import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; import { useCallback } from 'react'; import { WVList } from 'virtua'; import { useNDK } from '@libs/ndk/provider'; import { MemoizedRepost, MemoizedTextNote, NoteSkeleton, UnknownNote, } from '@shared/notes'; import { TitleBar } from '@shared/titleBar'; import { UserProfile } from '@shared/userProfile'; import { WidgetWrapper } from '@shared/widgets'; import { nHoursAgo } from '@utils/date'; import { Widget } from '@utils/types'; export function UserWidget({ widget }: { widget: Widget }) { const { ndk } = useNDK(); const { status, data } = useQuery({ queryKey: ['widget-' + widget.id], queryFn: async () => { const rootIds = new Set(); const dedupQueue = new Set(); const events = await ndk.fetchEvents({ kinds: [NDKKind.Text, NDKKind.Repost], authors: [widget.content], since: nHoursAgo(24), }); const ndkEvents = [...events]; ndkEvents.forEach((event) => { const tags = event.tags.filter((el) => el[0] === 'e'); if (tags && tags.length > 0) { const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1]; if (rootIds.has(rootId)) return dedupQueue.add(event.id); rootIds.add(rootId); } }); return ndkEvents .filter((event) => !dedupQueue.has(event.id)) .sort((a, b) => b.created_at - a.created_at); }, staleTime: Infinity, refetchOnMount: false, refetchOnReconnect: false, refetchOnWindowFocus: false, }); // render event match event kind const renderItem = useCallback( (event: NDKEvent) => { switch (event.kind) { case NDKKind.Text: return ; case NDKKind.Repost: return ; default: return ; } }, [data] ); return ( Latest posts {status === 'pending' ? ( ) : data.length === 0 ? ( No new post from 24 hours ago ) : ( data.map((item) => renderItem(item)) )} ); }
No new post from 24 hours ago