import BaseLayout from '@layouts/base'; import { RelayContext } from '@components/relaysProvider'; import { activeAccountAtom } from '@stores/account'; import { relaysAtom } from '@stores/relays'; import { dateToUnix, hoursAgo } from '@utils/getDate'; import { countTotalNotes, createCacheNote, getAllFollowsByID, getLastLoginTime } from '@utils/storage'; import { pubkeyArray } from '@utils/transform'; import LumeSymbol from '@assets/icons/Lume'; import { useAtom, useAtomValue } from 'jotai'; import { useRouter } from 'next/router'; import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useCallback, useContext, useEffect, useRef, useState, } from 'react'; export default function Page() { const router = useRouter(); const pool: any = useContext(RelayContext); const relays = useAtomValue(relaysAtom); const [activeAccount] = useAtom(activeAccountAtom); const [done, setDone] = useState(false); const now = useRef(new Date()); const unsubscribe = useRef(null); const fetchData = useCallback( (since) => { getAllFollowsByID(activeAccount.id).then((follows) => { unsubscribe.current = pool.subscribe( [ { kinds: [1], authors: pubkeyArray(follows), since: dateToUnix(since), until: dateToUnix(now.current), }, ], relays, (event) => { // insert event to local database createCacheNote(event); }, undefined, () => { setDone(true); }, { unsubscribeOnEose: true, } ); }); }, [activeAccount.id, pool, relays] ); useEffect(() => { if (!done) { countTotalNotes().then((count) => { if (count.total === 0) { fetchData(hoursAgo(24, now.current)); } else { getLastLoginTime().then((time) => { const parseDate = new Date(time.setting_value); fetchData(parseDate); }); } }); } else { router.push('/newsfeed/following'); } return () => { unsubscribe.current; }; }, [activeAccount.id, done, pool, relays, router, fetchData]); return (
{/* dragging area */}
{/* end dragging area */}

Loading...

Keep calm and waiting, Lume is fetching event...

); } Page.getLayout = function getLayout( page: | string | number | boolean | ReactElement> | ReactFragment | ReactPortal ) { return {page}; };