import { useQuery } from '@tanstack/react-query'; import { useNDK } from '@libs/ndk/provider'; import { NoteSkeleton, Reply } from '@shared/notes'; import { LumeEvent } from '@utils/types'; export function RepliesList({ id }: { id: string }) { const { relayUrls, fetcher } = useNDK(); const { status, data } = useQuery(['thread', id], async () => { const events = (await fetcher.fetchAllEvents( relayUrls, { kinds: [1], '#e': [id] }, { since: 0 } )) as unknown as LumeEvent[]; if (events.length > 0) { const replies = new Set(); events.forEach((event) => { const tags = event.tags.filter((el) => el[0] === 'e' && el[1] !== id); if (tags.length > 0) { tags.forEach((tag) => { const rootIndex = events.findIndex((el) => el.id === tag[1]); if (rootIndex) { const rootEvent = events[rootIndex]; if (rootEvent.replies) { rootEvent.replies.push(event); } else { rootEvent.replies = [event]; } replies.add(event.id); } }); } }); const cleanEvents = events.filter((ev) => !replies.has(ev.id)); return cleanEvents; } return events; }); if (status === 'loading') { return (
Share your thought on it...