import { useArk } from "@lume/ark"; import { LoaderIcon } from "@lume/icons"; import { useStorage } from "@lume/storage"; import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; import { useInfiniteQuery } from "@tanstack/react-query"; import { useCallback, useMemo } from "react"; import { ReplyActivity } from "./reply"; import { RepostActivity } from "./repost"; import { ZapActivity } from "./zap"; export function ActivityContent() { const ark = useArk(); const storage = useStorage(); const { isLoading, data, hasNextPage, isFetchingNextPage, fetchNextPage } = useInfiniteQuery({ queryKey: ["activity"], initialPageParam: 0, queryFn: async ({ signal, pageParam, }: { signal: AbortSignal; pageParam: number; }) => { const events = await ark.getInfiniteEvents({ filter: { kinds: [NDKKind.Zap], "#p": [ark.account.pubkey], }, limit: 100, pageParam, signal, }); return events; }, getNextPageParam: (lastPage) => { const lastEvent = lastPage.at(-1); if (!lastEvent) return; return lastEvent.created_at - 1; }, refetchOnWindowFocus: false, refetchOnMount: false, refetchOnReconnect: false, }); const allEvents = useMemo( () => (data ? data.pages.flatMap((page) => page) : []), [data], ); const renderEvent = useCallback((event: NDKEvent) => { if (event.pubkey === ark.account.pubkey) return null; switch (event.kind) { case NDKKind.Text: return ; case NDKKind.Repost: return ; case NDKKind.Zap: return ; default: return ; } }, []); return (
{isLoading ? (
) : allEvents.length < 1 ? (

🎉

Yo! Nothing new yet.

) : ( renderEvent(allEvents[0]) )}
); }