import { NDKEvent, NDKFilter, NDKKind, NDKSubscription } from '@nostr-dev-kit/ndk'; import { QueryStatus, useQueryClient } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; import { useNDK } from '@libs/ndk/provider'; import { useStorage } from '@libs/storage/provider'; import { ChevronUpIcon } from '@shared/icons'; export function LiveUpdater({ status }: { status: QueryStatus }) { const { db } = useStorage(); const { ndk } = useNDK(); const [events, setEvents] = useState([]); const queryClient = useQueryClient(); const update = async () => { await queryClient.setQueryData( ['newsfeed'], (prev: { pageParams: number; pages: Array }) => ({ ...prev, pages: [[...events], ...prev.pages], }) ); // reset setEvents([]); }; useEffect(() => { let sub: NDKSubscription = undefined; if (status === 'success' && db.account && db.account?.contacts?.length > 0) { const filter: NDKFilter = { kinds: [NDKKind.Text, NDKKind.Repost], authors: db.account.contacts, since: Math.floor(Date.now() / 1000), }; sub = ndk.subscribe(filter, { closeOnEose: false, groupable: false }); sub.addListener('event', (event: NDKEvent) => setEvents((prev) => [...prev, event]) ); } return () => { if (sub) sub.stop(); }; }, [status]); if (!events.length) return null; return (
); }