import { NoteMetadata } from '@components/note/metadata'; import { RelayContext } from '@components/relaysProvider'; import { UserExtend } from '@components/user/extend'; import { DEFAULT_RELAYS } from '@stores/constants'; import { contentParser } from '@utils/parser'; import { memo, useCallback, useContext, useEffect, useState } from 'react'; import { navigate } from 'vite-plugin-ssr/client/router'; export const RootNote = memo(function RootNote({ event }: { event: any }) { const pool: any = useContext(RelayContext); const [data, setData] = useState(null); const [content, setContent] = useState(''); const openUserPage = (e) => { e.stopPropagation(); navigate(`/user?pubkey=${event.pubkey}`); }; const openThread = (e) => { const selection = window.getSelection(); if (selection.toString().length === 0) { navigate(`/newsfeed/note?id=${event.parent_id}`); } else { e.stopPropagation(); } }; const fetchEvent = useCallback( async (id: string) => { const unsubscribe = pool.subscribe( [ { ids: [id], kinds: [1], }, ], DEFAULT_RELAYS, (event: any) => { setData(event); setContent(contentParser(event.content, event.tags)); }, undefined, undefined, { unsubscribeOnEose: true, } ); return () => { unsubscribe(); }; }, [pool] ); useEffect(() => { let ignore = false; if (!ignore) { if (typeof event === 'object') { setData(event); setContent(contentParser(event.content, event.tags)); } else { fetchEvent(event); } } return () => { ignore = true; }; }, [event, fetchEvent]); if (data) { return (