import BaseLayout from '@layouts/base'; import { RelayContext } from '@components/relaysProvider'; import { dateToUnix, hoursAgo } from '@utils/getDate'; import { getParentID, pubkeyArray } from '@utils/transform'; import LumeSymbol from '@assets/icons/Lume'; import { useLocalStorage } from '@rehooks/local-storage'; import { invoke } from '@tauri-apps/api/tauri'; 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, relays]: any = useContext(RelayContext); const now = useRef(new Date()); const unsubscribe = useRef(null); const [eose, setEose] = useState(false); const [lastLogin] = useLocalStorage('lastLogin'); const [activeAccount]: any = useLocalStorage('activeAccount'); const [follows] = useLocalStorage('activeAccountFollows'); const fetchData = useCallback( async (since: Date) => { const { createNote } = await import('@utils/bindings'); unsubscribe.current = pool.subscribe( [ { kinds: [1], authors: pubkeyArray(follows), since: dateToUnix(since), until: dateToUnix(now.current), }, ], relays, (event) => { const parentID = getParentID(event.tags, event.id); // insert event to local database createNote({ event_id: event.id, pubkey: event.pubkey, kind: event.kind, tags: JSON.stringify(event.tags), content: event.content, parent_id: parentID, parent_comment_id: '', created_at: event.created_at, account_id: activeAccount.id, }).catch(console.error); }, undefined, () => { setEose(true); } ); }, [activeAccount.id, follows, pool, relays] ); const isNoteExist = useCallback(async () => { invoke('count_total_notes').then((res: number) => { if (res > 0) { const parseDate = new Date(lastLogin); fetchData(parseDate); } else { fetchData(hoursAgo(24, now.current)); } }); }, [fetchData, lastLogin]); useEffect(() => { if (eose === false) { isNoteExist(); } else { router.replace('/newsfeed/following'); } return () => { unsubscribe.current; }; }, [router, eose, isNoteExist]); return (
{/* dragging area */}
{/* end dragging area */}

Loading...

Keep calm as Lume fetches events... 🤙

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