import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { type AtUri, asRkey } from "@/lib/atproto-client"; import type { BacklinkRecord } from "@/lib/constellation-client"; import { directRepliesQueryOptions, directReplyCountQueryOptions, } from "@/lib/constellation-queries"; import type { SocialItemUri } from "@/lib/social-item-types"; import { CommentItem } from "./CommentItem"; interface CommentThreadProps { backlink: BacklinkRecord; type: "comment" | "reply"; subjectUri: SocialItemUri; /** URI of the parent comment/reply (for deletion cache updates) */ parentUri?: AtUri; depth?: number; } export function CommentThread({ backlink, type, subjectUri, parentUri, depth = 0, }: CommentThreadProps) { const [showReplies, setShowReplies] = useState(depth < 2); const did = backlink.did; const rkey = asRkey(backlink.rkey); const uri = `at://${did}/${backlink.collection}/${rkey}` satisfies AtUri; const replyCountQuery = useQuery(directReplyCountQueryOptions(uri)); const replyCount = replyCountQuery.data ?? 0; const repliesQuery = useInfiniteQuery({ ...directRepliesQueryOptions(uri), enabled: showReplies, }); const replies = repliesQuery.data?.pages.flatMap((p) => p.records) ?? []; const hasReplies = replyCount > 0 || replies.length > 0; return (