diff --git a/src/components/ReplyNoteList/index.tsx b/src/components/ReplyNoteList/index.tsx index 388b0314..b15a950f 100644 --- a/src/components/ReplyNoteList/index.tsx +++ b/src/components/ReplyNoteList/index.tsx @@ -31,7 +31,21 @@ export default function ReplyNoteList({ const { currentIndex } = useSecondaryPage() const [rootInfo, setRootInfo] = useState<{ id: string; pubkey: string } | undefined>(undefined) const { repliesMap, addReplies } = useReply() - const replies = useMemo(() => repliesMap.get(event.id)?.events || [], [event.id, repliesMap]) + const replies = useMemo(() => { + const replyIdSet = new Set() + const replyEvents: NEvent[] = [] + let parentEventIds = [event.id] + while (parentEventIds.length > 0) { + const events = parentEventIds.flatMap((id) => repliesMap.get(id)?.events || []) + events.forEach((evt) => { + if (replyIdSet.has(evt.id)) return + replyIdSet.add(evt.id) + replyEvents.push(evt) + }) + parentEventIds = events.map((evt) => evt.id) + } + return replyEvents.sort((a, b) => a.created_at - b.created_at) + }, [event.id, repliesMap]) const [timelineKey, setTimelineKey] = useState(undefined) const [until, setUntil] = useState(undefined) const [loading, setLoading] = useState(false) diff --git a/src/providers/ReplyProvider.tsx b/src/providers/ReplyProvider.tsx index 0a3f8d9f..2a9d8df0 100644 --- a/src/providers/ReplyProvider.tsx +++ b/src/providers/ReplyProvider.tsx @@ -50,7 +50,6 @@ export function ReplyProvider({ children }: { children: React.ReactNode }) { replies.eventIdSet.add(reply.id) } }) - replies.events.sort((a, b) => a.created_at - b.created_at) prev.set(id, replies) } return new Map(prev)