import { useEffect, useState } from 'react' import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom' import { checkSetupStatus } from './api/client' import DemoIntroModal from './components/DemoIntroModal' import Shell from './components/Shell' import { DEMO_SESSION_USER, isDemoModeEnabled } from './demoMode' import AccountPage from './pages/AccountPage' import AdminPage from './pages/AdminPage' import DiagnosticsPage from './pages/DiagnosticsPage' import IncidentsPage from './pages/IncidentsPage' import LoginPage from './pages/LoginPage' import NodesPage from './pages/NodesPage' import RegisterPage from './pages/RegisterPage' import SetupPage from './pages/SetupPage' import TimelinePage from './pages/TimelinePage' import WebhooksPage from './pages/WebhooksPage' import { SessionProvider } from './session' const demoMode = isDemoModeEnabled(import.meta.env.VITE_DEMO_MODE) function DemoRoutes() { return ( } /> } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> ) } function StandardRoutes() { const [bootstrapped, setBootstrapped] = useState(null) const [checkingSetup, setCheckingSetup] = useState(true) const [setupError, setSetupError] = useState(null) const [setupCheckAttempt, setSetupCheckAttempt] = useState(0) useEffect(() => { let cancelled = false checkSetupStatus() .then(status => { if (cancelled) return setBootstrapped(status.bootstrapped) }) .catch(err => { if (cancelled) return setSetupError(err instanceof Error ? err.message : 'Failed to check setup status') }) .finally(() => { if (!cancelled) setCheckingSetup(false) }) return () => { cancelled = true } }, [setupCheckAttempt]) if (bootstrapped === null && checkingSetup) { return (
loading...
) } if (bootstrapped === null && setupError) { return (
{setupError}
) } if (!bootstrapped) { return ( } /> { setSetupError(null) setBootstrapped(true) }} /> } /> ) } return ( } /> } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> ) } function AppRoutes() { return demoMode ? : } export default function App() { return ( {demoMode && } ) }