import { Navigate, Route, Routes } from "react-router-dom"; import { useEffect, useState, type ReactNode } from "react"; import Layout from "./components/Layout"; import { useAuth } from "./auth"; import { api } from "./api"; import DemoApp from "./demo/DemoApp"; import Home from "./pages/Home"; import Login from "./pages/Login"; import Register from "./pages/Register"; import MyDogs from "./pages/MyDogs"; import DogDetail from "./pages/DogDetail"; import ReportLost from "./pages/ReportLost"; import ReportFound from "./pages/ReportFound"; import MyCases from "./pages/MyCases"; import CaseDetail from "./pages/CaseDetail"; import NextSteps from "./pages/NextSteps"; import Admin from "./pages/Admin"; import AdminData from "./pages/AdminData"; import AdminDogs from "./pages/AdminDogs"; import AdminCases from "./pages/AdminCases"; import AdminOwners from "./pages/AdminOwners"; import AdminOwnerDetail from "./pages/AdminOwnerDetail"; import AdminPending from "./pages/AdminPending"; import AdminTestMatch from "./pages/AdminTestMatch"; import DatasetDetail from "./pages/DatasetDetail"; function RequireAuth({ children }: { children: ReactNode }) { const { user, loading } = useAuth(); if (loading) return
Loading…
; if (!user) return ; return <>{children}; } export default function App() { // On load, ask the backend which UI to render. DEMO_MODE=1 -> the read-only 3-page demo shell; // otherwise the full app. (The backend also hard-blocks writes in demo mode — this is just the UI.) const [config, setConfig] = useState<{ demo_mode: boolean; haystack_size: number } | null>(null); useEffect(() => { api .getConfig() .then(setConfig) .catch(() => setConfig({ demo_mode: false, haystack_size: 0 })); }, []); if (config === null) return
Loading…
; if (config.demo_mode) return ; return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }