import { ChatBubbleLeftIcon } from "@heroicons/react/24/outline";
import {
PageSize,
type PostReferencesRequest,
PostReferenceType,
PostVisibilityFilter,
type ReferencedPostFragment,
ReferenceRelevancyFilter,
usePostReferencesQuery
} from "@hey/indexer";
import { useCallback } from "react";
import { useHiddenCommentFeedStore } from "@/components/Post";
import SinglePost from "@/components/Post/SinglePost";
import PostFeed from "@/components/Shared/Post/PostFeed";
interface CommentFeedProps {
postId: string;
}
const CommentFeed = ({ postId }: CommentFeedProps) => {
const { showHiddenComments } = useHiddenCommentFeedStore();
const request: PostReferencesRequest = {
pageSize: PageSize.Fifty,
referencedPost: postId,
referenceTypes: [PostReferenceType.CommentOn],
relevancyFilter: ReferenceRelevancyFilter.Relevant,
visibilityFilter: showHiddenComments
? PostVisibilityFilter.Hidden
: PostVisibilityFilter.Visible
};
const { data, error, fetchMore, loading } = usePostReferencesQuery({
skip: !postId,
variables: { request }
});
const comments =
(data?.postReferences?.items as ReferencedPostFragment[]) ?? [];
const pageInfo = data?.postReferences?.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 filteredComments = comments.filter(
(comment) =>
!comment.author.operations?.hasBlockedMe &&
!comment.author.operations?.isBlockedByMe &&
!comment.operations?.hasReported &&
!comment.isDeleted
);
return (
}
emptyMessage="Be the first one to comment!"
error={error}
errorTitle="Failed to load comment feed"
handleEndReached={handleEndReached}
hasMore={hasMore}
items={filteredComments}
loading={loading}
renderItem={(comment) => (
)}
/>
);
};
export default CommentFeed;