import { UserGroupIcon } from "@heroicons/react/24/outline"; import { TimelineEventItemType, type TimelineRequest, useTimelineQuery } from "@hey/indexer"; import { memo, useCallback, useMemo } from "react"; import SinglePost from "@/components/Post/SinglePost"; import PostFeed from "@/components/Shared/Post/PostFeed"; import { useAccountStore } from "@/store/persisted/useAccountStore"; const Timeline = () => { const { currentAccount } = useAccountStore(); const request: TimelineRequest = { account: currentAccount?.address, filter: { eventType: [ TimelineEventItemType.Post, TimelineEventItemType.Quote, TimelineEventItemType.Repost ] } }; const { data, error, fetchMore, loading } = useTimelineQuery({ variables: { request } }); const feed = data?.timeline?.items; const pageInfo = data?.timeline?.pageInfo; const hasMore = pageInfo?.next; const handleEndReached = useCallback(async () => { if (hasMore) { await fetchMore({ variables: { request: { ...request, cursor: pageInfo?.next } } }); } }, [fetchMore, hasMore, pageInfo?.next, request]); const filteredPosts = useMemo( () => (feed ?? []).filter( (timelineItem) => !timelineItem.primary.author.operations?.hasBlockedMe && !timelineItem.primary.author.operations?.isBlockedByMe && !timelineItem.primary.operations?.hasReported ), [feed] ); return ( } emptyMessage="No posts yet!" error={error} errorTitle="Failed to load timeline" handleEndReached={handleEndReached} hasMore={hasMore} items={filteredPosts} loading={loading} renderItem={(timelineItem) => ( )} /> ); }; export default memo(Timeline);