import { RepostNote, TextNote, User, useArk } from "@lume/ark"; import { ArrowLeftIcon, ArrowRightCircleIcon, ArrowRightIcon, 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 { useTranslation } from "react-i18next"; import { useNavigate, useParams } from "react-router-dom"; import { WindowVirtualizer } from "virtua"; export function UserRoute() { const ark = useArk(); const navigate = useNavigate(); const { id } = useParams(); const { t } = useTranslation(); 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 (

{t("user.latestPosts")}

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