import { RepostNote } from "@/components/repost"; import { Suggest } from "@/components/suggest"; import { TextNote } from "@/components/text"; import { LoaderIcon, ArrowRightCircleIcon, InfoIcon } from "@lume/icons"; import { ColumnRouteSearch, Event, Kind } from "@lume/types"; import { Column } from "@lume/ui"; import { useInfiniteQuery } from "@tanstack/react-query"; import { createFileRoute } from "@tanstack/react-router"; import { useTranslation } from "react-i18next"; import { Virtualizer } from "virtua"; export const Route = createFileRoute("/newsfeed")({ component: Screen, validateSearch: (search: Record): ColumnRouteSearch => { return { account: search.account, label: search.label, name: search.name, }; }, beforeLoad: async ({ context }) => { const ark = context.ark; const settings = await ark.get_settings(); return { settings, }; }, }); export function Screen() { const { label, name, account } = Route.useSearch(); const { ark } = Route.useRouteContext(); const { t } = useTranslation(); const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage } = useInfiniteQuery({ queryKey: [name, account], initialPageParam: 0, queryFn: async ({ pageParam }: { pageParam: number }) => { const events = await ark.get_events(20, pageParam); return events; }, getNextPageParam: (lastPage) => { const lastEvent = lastPage?.at(-1); return lastEvent ? lastEvent.created_at - 1 : null; }, select: (data) => data?.pages.flatMap((page) => page), refetchOnWindowFocus: false, }); const renderItem = (event: Event) => { if (!event) return; switch (event.kind) { case Kind.Repost: return ; default: return ; } }; return ( {isLoading ? (
) : !data.length ? (

{t("global.emptyFeedTitle")}

{t("global.emptyFeedSubtitle")}

) : ( {data.map((item) => renderItem(item))} )} {data?.length && hasNextPage ? (
) : null}
); }