import BaseLayout from '@layouts/base'; import WithSidebarLayout from '@layouts/withSidebar'; import { Content } from '@components/note/content'; import { ContentExtend } from '@components/note/content/extend'; import FormComment from '@components/note/form/comment'; import { RelayContext } from '@components/relaysProvider'; import { getNoteByID } from '@utils/storage'; import useLocalStorage from '@rehooks/local-storage'; import { useRouter } from 'next/router'; import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useEffect, useState, } from 'react'; export default function Page() { const pool: any = useContext(RelayContext); const router = useRouter(); const id = router.query.id; const [relays]: any = useLocalStorage('relays'); const [rootEvent, setRootEvent] = useState(null); const [comments, setComments] = useState([]); useEffect(() => { let unsubscribe: () => void; getNoteByID(id) .then((res) => { // update state setRootEvent(res); // get all comments unsubscribe = pool.subscribe( [ { '#e': [id], kinds: [1], }, ], relays, (event: any) => { setComments((comments) => [...comments, event]); } ); }) .catch(console.error); return () => { unsubscribe(); }; }, [id, pool, relays]); return (
{rootEvent && }
{comments.length > 0 && comments.map((comment) => (
))}
); } Page.getLayout = function getLayout( page: | string | number | boolean | ReactElement> | ReactFragment | ReactPortal ) { return ( {page} ); };