Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 59 lines 1.6 kB view raw
1import { ChatBubbleBottomCenterIcon } from "@heroicons/react/24/outline"; 2import { PageSize, type PostsRequest, usePostsQuery } from "@hey/indexer"; 3import { useCallback, useMemo } from "react"; 4import SinglePost from "@/components/Post/SinglePost"; 5import PostFeed from "@/components/Shared/Post/PostFeed"; 6 7interface GroupFeedProps { 8 feed: string; 9} 10 11const GroupFeed = ({ feed }: GroupFeedProps) => { 12 const request: PostsRequest = { 13 filter: { feeds: [{ feed }] }, 14 pageSize: PageSize.Fifty 15 }; 16 17 const { data, error, fetchMore, loading } = usePostsQuery({ 18 skip: !feed, 19 variables: { request } 20 }); 21 22 const posts = data?.posts?.items; 23 const pageInfo = data?.posts?.pageInfo; 24 const hasMore = pageInfo?.next; 25 26 const handleEndReached = useCallback(async () => { 27 if (hasMore) { 28 await fetchMore({ 29 variables: { request: { ...request, cursor: pageInfo?.next } } 30 }); 31 } 32 }, [fetchMore, hasMore, pageInfo?.next, request]); 33 34 const filteredPosts = useMemo( 35 () => 36 (posts ?? []).filter( 37 (post) => 38 !post.author.operations?.hasBlockedMe && 39 !post.author.operations?.isBlockedByMe 40 ), 41 [posts] 42 ); 43 44 return ( 45 <PostFeed 46 emptyIcon={<ChatBubbleBottomCenterIcon className="size-8" />} 47 emptyMessage="Group has no posts yet!" 48 error={error} 49 errorTitle="Failed to load group feed" 50 handleEndReached={handleEndReached} 51 hasMore={hasMore} 52 items={filteredPosts} 53 loading={loading} 54 renderItem={(post) => <SinglePost key={post.id} post={post} />} 55 /> 56 ); 57}; 58 59export default GroupFeed;