'use client'; import { useEffect, useState, Suspense } from 'react'; import { useSearchParams } from 'next/navigation'; import { AppProvider, useApp } from '@/lib/context'; import { setToken, fetchAlerts } from '@/lib/api'; import { getLocaleMap } from '@/lib/localization'; import type { AlertConfig } from '@/lib/types'; import type { LocaleMap } from '@/lib/localization'; import TimeRangeSelector from '@/components/TimeRangeSelector'; import AlertPanel from '@/components/AlertPanel'; import Dashboard from '@/components/Dashboard'; function AppShell({ alerts }: { alerts: AlertConfig[] }) { const { triggeredAlerts } = useApp(); const [alertPanelOpen, setAlertPanelOpen] = useState(false); return (
Factorio Dashboard
setAlertPanelOpen(false)} />
); } function DashboardApp() { const searchParams = useSearchParams(); const token = searchParams.get('token') ?? ''; const [ready, setReady] = useState(false); const [alerts, setAlerts] = useState([]); const [localeMap, setLocaleMap] = useState(new Map()); useEffect(() => { if (!token) return; setToken(token); Promise.all([getLocaleMap(), fetchAlerts()]).then(([lm, al]) => { setLocaleMap(lm); setAlerts(al); setReady(true); }); }, [token]); if (!token) { return (
Missing ?token= in URL
); } if (!ready) { return (
Loading…
); } return ( ); } export default function Page() { return ( ); }