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 [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); await message(`Something wrong: ${e}`, { title: 'Lume', type: 'error', }); } }; useEffect(() => { if (ndk) { if (!db.account) invoke('close_splashscreen'); console.log('prefetching...'); prefetch(); } }, [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.

) : (

Something wrong!

{errorMessage}

)}
); }