import { Routes, Route, Navigate } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { useAuth } from "./hooks/useAuth"; import { getMe } from "./api/client"; import AppShell from "./components/AppShell"; import LoginPage from "./pages/LoginPage"; import DashboardPage from "./pages/DashboardPage"; import ProfilePage from "./pages/ProfilePage"; import AppsPage from "./pages/AppsPage"; import AdminPage from "./pages/AdminPage"; import AdminUsersPage from "./pages/AdminUsersPage"; import AdminGroupsPage from "./pages/AdminGroupsPage"; import DocumentsPage from "./pages/DocumentsPage"; import DocumentAdminSettingsPage from "./pages/DocumentAdminSettingsPage"; import AIAdminSettingsPage from "./pages/AIAdminSettingsPage"; function PrivateRoute({ children }: { children: React.ReactNode }) { const { token } = useAuth(); return token ? ( {children} ) : ( ); } function AdminRoute({ children }: { children: React.ReactNode }) { const { token } = useAuth(); const { data: user, isLoading } = useQuery({ queryKey: ["me"], queryFn: getMe }); if (!token) return ; // Wait for the me query before deciding — prevents a flash redirect if (isLoading) return null; // Redirect to /login (not /) so the route appears not to exist if (!user?.is_admin) return ; return {children}; } export default function App() { return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Catch-all */} } /> ); }