import LedDisplay from '@/components/Display/LedDisplay'; import InlineForm from '@/components/Display/InlineForm'; import OnboardingFlow from '@/components/Onboarding/OnboardingFlow'; import TerminalSpinner from '@/components/ui/TerminalSpinner'; import { Head } from '@inertiajs/react'; import { useCallback, useEffect, useState } from 'react'; import type { Tracker } from '@/types/domain'; export default function Dashboard() { const [totalShares, setTotalShares] = useState(0); const [formOpen, setFormOpen] = useState(false); const [loading, setLoading] = useState(true); const [needsOnboarding, setNeedsOnboarding] = useState(false); const [tracker, setTracker] = useState(null); const loadData = useCallback(async () => { const [entriesResponse, trackerResponse] = await Promise.all([ fetch('/entries/summary'), fetch('/tracker'), ]); if (entriesResponse.ok) { const entries = await entriesResponse.json(); setTotalShares(entries.total_quantity); } let trackerExists = false; if (trackerResponse.ok) { const { exists, tracker: trackerData } = await trackerResponse.json(); setTracker(trackerData ?? null); trackerExists = Boolean(exists); } setNeedsOnboarding(!trackerExists); }, []); useEffect(() => { const fetchData = async () => { try { await loadData(); } catch (error) { console.error('Failed to fetch data:', error); } finally { setLoading(false); } }; fetchData(); }, [loadData]); const handleEntrySuccess = async () => { try { const entriesResponse = await fetch('/entries/summary'); if (entriesResponse.ok) { const entries = await entriesResponse.json(); setTotalShares(entries.total_quantity); } } catch (error) { console.error('Failed to refresh entry data:', error); } }; const handleOnboardingComplete = loadData; if (loading) { return ( <> ); } if (needsOnboarding) { return ( <> ); } return ( <>
setFormOpen((open) => !open)} />
setFormOpen(false)} onSuccess={handleEntrySuccess} />
); }