import { message } from '@tauri-apps/api/dialog'; import { invoke } from '@tauri-apps/api/tauri'; import { useEffect, useState } from 'react'; import { useNDK } from '@libs/ndk/provider'; import { useStorage } from '@libs/storage/provider'; import { LoaderIcon } from '@shared/icons'; import { useNostr } from '@utils/hooks/useNostr'; export function SplashScreen() { const { db } = useStorage(); const { ndk } = useNDK(); const { fetchUserData, prefetchEvents } = useNostr(); const [isLoading, setIsLoading] = useState(true); const skip = async () => { await invoke('close_splashscreen'); }; const prefetch = async () => { try { const user = await fetchUserData(); const data = await prefetchEvents(); if (user.status === 'ok' && data.status === 'ok') { // update last login = current time await db.updateLastLogin(); // close splash screen and open main app screen await invoke('close_splashscreen'); } } catch (e) { setIsLoading(false); await message(e, { title: 'An unexpected error has occurred', type: 'error', }); } }; useEffect(() => { async function initial() { if (!db.account) { await invoke('close_splashscreen'); } else { const onboarding = localStorage.getItem('onboarding'); const step = JSON.parse(onboarding).state.step || null; if (step) { await invoke('close_splashscreen'); } else { console.log('prefetching...'); prefetch(); } } } if (ndk) { initial(); } }, [ndk, db.account]); return (
{isLoading ? (

{!ndk ? 'Connecting to relay...' : 'Fetching events from the last login.'}

This may take a few seconds, please don't close app.

) : (

An unexpected error has occurred

)}
); }