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, relayUrls } = useNDK(); const { fetchUserData, prefetchEvents } = useNostr(); const [isLoading, setIsLoading] = useState(true); const [errorMessage, setErrorMessage] = useState(null); const skip = async () => { await invoke('close_splashscreen'); }; const prefetch = async () => { const onboarding = localStorage.getItem('onboarding'); const step = JSON.parse(onboarding).state.step || null; if (step) await invoke('close_splashscreen'); try { const user = await fetchUserData(); const data = await prefetchEvents(); if (user.status === 'ok' && data.status === 'ok') { await db.updateLastLogin(); await invoke('close_splashscreen'); } else { setIsLoading(false); setErrorMessage(user.message); console.log('fetch failed, error: ', user.message); } } catch (e) { setIsLoading(false); setErrorMessage(e); console.log('prefetch failed, error: ', e); } }; useEffect(() => { if (!db.account) { invoke('close_splashscreen'); } if (ndk && db.account) { console.log('prefetching...'); prefetch(); } }, [ndk, db.account]); return (
{isLoading ? (

{!ndk ? 'Connecting to relay...' : `Connected to ${relayUrls.length} relays`}

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

) : (

Something wrong!

{errorMessage}

)}
); }