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 { createNote, getNoteByID } from '@utils/storage'; import { getParentID } from '@utils/transform'; import useLocalStorage from '@rehooks/local-storage'; import { memo, useCallback, useContext, useEffect, useState } from 'react'; export const NoteParent = memo(function NoteParent({ id }: { id: string }) { const pool: any = useContext(RelayContext); const [activeAccount]: any = useLocalStorage('account', {}); const [event, setEvent] = useState(null); const content = event ? contentParser(event.content, event.tags) : ''; const fetchEvent = useCallback(async () => { const unsubscribe = pool.subscribe( [ { ids: [id], kinds: [1], }, ], DEFAULT_RELAYS, (event: any) => { // update state setEvent(event); // insert to database const parentID = getParentID(event.tags, event.id); // insert event to local database createNote( event.id, activeAccount.id, event.pubkey, event.kind, event.tags, event.content, event.created_at, parentID ); }, undefined, undefined, { unsubscribeOnEose: true, } ); return () => { unsubscribe(); }; }, [activeAccount.id, id, pool]); const checkNoteIsSaved = useCallback(async () => { getNoteByID(id) .then((res) => { if (res) { setEvent(res); } else { fetchEvent(); } }) .catch(console.error); }, [fetchEvent, id]); useEffect(() => { let ignore = false; if (!ignore) { checkNoteIsSaved(); } return () => { ignore = true; }; }, [checkNoteIsSaved]); if (event) { return (