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",