diff --git a/src/pages/PostDetailPage.tsx b/src/pages/PostDetailPage.tsx index 00455859..f25472de 100644 --- a/src/pages/PostDetailPage.tsx +++ b/src/pages/PostDetailPage.tsx @@ -23,6 +23,7 @@ import { ArticleContent } from "@/components/ArticleContent"; import { AudioVisualizer } from "@/components/AudioVisualizer"; import { BadgeDetailContent } from "@/components/BadgeDetailContent"; import { CalendarEventDetailPage } from "@/components/CalendarEventDetailPage"; +import { ComposeBox } from "@/components/ComposeBox"; import { ColorMomentContent, ColorMomentEyeButton, @@ -347,12 +348,12 @@ export function AddrPostDetailPage({ addr, relays }: AddrPostDetailPageProps) { ); } - // NIP-58 profile badges get a NoteCard view (same as the feed) + // NIP-58 profile badges get a NoteCard view (same as the feed) + comments if (resolvedEvent.kind === BADGE_PROFILE_KIND) { return ( - + ); @@ -367,6 +368,52 @@ export function AddrPostDetailPage({ addr, relays }: AddrPostDetailPageProps) { ); } +/** NoteCard + NIP-22 comments section for kind 30008 profile badges detail page. */ +function ProfileBadgesDetailView({ event }: { event: NostrEvent }) { + const { muteItems } = useMuteList(); + const { data: commentsData, isLoading: commentsLoading } = useComments(event, 500); + + const orderedReplies = useMemo(() => { + const topLevel = commentsData?.topLevelComments ?? []; + const filtered = muteItems.length > 0 + ? topLevel.filter((r) => !isEventMuted(r, muteItems)) + : topLevel; + return [...filtered] + .sort((a, b) => a.created_at - b.created_at) + .map((reply) => { + const directReplies = commentsData?.getDirectReplies(reply.id) ?? []; + return { + reply, + firstSubReply: directReplies[0] as NostrEvent | undefined, + }; + }); + }, [commentsData, muteItems]); + + return ( +
+ +
+ +
+
+ {commentsLoading ? ( +
+ {Array.from({ length: 3 }).map((_, i) => ( + + ))} +
+ ) : orderedReplies.length > 0 ? ( + + ) : ( +
+ No replies yet. Be the first to reply! +
+ )} +
+
+ ); +} + export function PostDetailShell({ children, title = "Post Details",