import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { useQuery } from '@tanstack/react-query'; import { useVirtualizer } from '@tanstack/react-virtual'; import { useCallback, useRef } from 'react'; import { useNDK } from '@libs/ndk/provider'; import { ArticleNote, NoteSkeleton, NoteWrapper } from '@shared/notes'; import { TitleBar } from '@shared/titleBar'; import { Widget } from '@utils/types'; export function GlobalArticlesWidget({ params }: { params: Widget }) { const { ndk } = useNDK(); const { status, data } = useQuery( [params.id + '-' + params.title], async () => { const events = await ndk.fetchEvents({ kinds: [NDKKind.Article], limit: 100, }); return [...events] as unknown as NDKEvent[]; }, { refetchOnWindowFocus: false } ); const parentRef = useRef(null); const virtualizer = useVirtualizer({ count: data ? data.length : 0, getScrollElement: () => parentRef.current, estimateSize: () => 650, overscan: 4, }); const items = virtualizer.getVirtualItems(); // render event match event kind const renderItem = useCallback( (index: string | number) => { const event: NDKEvent = data[index]; if (!event) return; return (
); }, [data] ); return (
{status === 'loading' ? (
) : items.length === 0 ? (

There have been no new articles in the last 24 hours.

) : (
{items.map((item) => renderItem(item.index))}
)}
); }