import { RepostNote, TextNote, User, useArk } from "@lume/ark"; import { ArrowRightCircleIcon, LoaderIcon } from "@lume/icons"; import { FETCH_LIMIT } from "@lume/utils"; import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; import { useInfiniteQuery } from "@tanstack/react-query"; import { useMemo } from "react"; import { WindowVirtualizer } from "virtua"; export function HomeRoute({ id }: { id: string }) { const ark = useArk(); const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = useInfiniteQuery({ queryKey: ["user-posts", id], initialPageParam: 0, queryFn: async ({ signal, pageParam, }: { signal: AbortSignal; pageParam: number; }) => { const events = await ark.getInfiniteEvents({ filter: { kinds: [NDKKind.Text, NDKKind.Repost], authors: [id], }, limit: FETCH_LIMIT, pageParam, signal, }); return events; }, getNextPageParam: (lastPage) => { const lastEvent = lastPage.at(-1); if (!lastEvent) return; return lastEvent.created_at - 1; }, refetchOnWindowFocus: false, }); const allEvents = useMemo( () => (data ? data.pages.flatMap((page) => page) : []), [data], ); const renderItem = (event: NDKEvent) => { switch (event.kind) { case NDKKind.Text: return ; case NDKKind.Repost: return ; default: return ; } }; return (

Latest posts

{isLoading ? (
) : ( allEvents.map((item) => renderItem(item)) )}
{hasNextPage ? ( ) : null}
); }