import { useQueryClient } from "@tanstack/react-query"; import * as React from "react"; //import { useInView } from "react-intersection-observer"; import { UniversalPostRendererATURILoader } from "~/components/UniversalPostRenderer"; import { useAuth } from "~/providers/UnifiedAuthProvider"; import { useInfiniteQueryFeedSkeleton, // useQueryArbitrary, // useQueryIdentity, } from "~/utils/useQuery"; interface InfiniteCustomFeedProps { feedUri: string; pdsUrl?: string; feedServiceDid?: string; authedOverride?: boolean; unauthedfeedurl?: string; } export function InfiniteCustomFeed({ feedUri, pdsUrl, feedServiceDid, authedOverride, unauthedfeedurl, }: InfiniteCustomFeedProps) { const { agent } = useAuth(); const authed = authedOverride || !!agent?.did; // const identityresultmaybe = useQueryIdentity(agent?.did); // const identity = identityresultmaybe?.data; // const feedGenGetRecordQuery = useQueryArbitrary(feedUri); const { data, error, isLoading, isError, hasNextPage, fetchNextPage, isFetchingNextPage, refetch, isRefetching, queryKey, } = useInfiniteQueryFeedSkeleton({ feedUri: feedUri, agent: agent ?? undefined, isAuthed: authed ?? false, pdsUrl: pdsUrl, feedServiceDid: feedServiceDid, unauthedfeedurl: unauthedfeedurl, }); const queryClient = useQueryClient(); const handleRefresh = () => { queryClient.removeQueries({queryKey: queryKey}); //queryClient.invalidateQueries(["infinite-feed", feedUri] as const); refetch(); }; const allPosts = React.useMemo(() => { const flattenedPosts = data?.pages.flatMap((page) => page?.feed) ?? []; const seenUris = new Set(); return flattenedPosts.filter((item) => { if (!item?.post) return false; if (seenUris.has(item.post)) { return false; } seenUris.add(item.post); return true; }); }, [data]); //const { ref, inView } = useInView(); // React.useEffect(() => { // if (inView && hasNextPage && !isFetchingNextPage) { // fetchNextPage(); // } // }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]); if (isLoading) { return
Loading feed...
; } if (isError) { return (
Error: {error.message}
); } // const allPosts = // data?.pages.flatMap((page) => { // if (page) return page.feed; // }) ?? []; if (!allPosts || typeof allPosts !== "object" || allPosts.length === 0) { return (
No posts in this feed.
); } return ( <> {allPosts.map((item, i) => { if (item) return ( ); })} {/* allPosts?: {allPosts ? "true" : "false"} hasNextPage?: {hasNextPage ? "true" : "false"} isFetchingNextPage?: {isFetchingNextPage ? "true" : "false"} */} {isFetchingNextPage && (
Loading more...
)} {hasNextPage && !isFetchingNextPage && ( )} {!hasNextPage && (
End of feed.
)} ); } const RefreshIcon = (props: React.SVGProps) => ( );