import { QueryClient, QueryClientProvider, useQuery } from "@tanstack/react-query"; import { useEffect } from "react"; import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; import { publicApi, SetupStatus } from "./api/client"; import { Layout } from "./components/Layout"; import { Dashboard } from "./pages/Dashboard"; import { FirewallPreview } from "./pages/FirewallPreview"; import { Clusters } from "./pages/Clusters"; import { Ipam } from "./pages/Ipam"; import { ListPage } from "./pages/ListPage"; import { Login } from "./pages/Login"; import { Networks } from "./pages/Networks"; import { Nodes } from "./pages/Nodes"; import { Policies } from "./pages/Policies"; import { PolicyDesigner } from "./pages/PolicyDesigner"; import { SecurityGroups } from "./pages/SecurityGroups"; import { ServiceCatalog } from "./pages/ServiceCatalog"; import { Settings } from "./pages/Settings"; import { SetupWizard } from "./pages/SetupWizard"; import { TenantsProjects } from "./pages/TenantsProjects"; import { UsersRoles } from "./pages/UsersRoles"; import { WorkloadDetail, WorkloadFlows, Workloads } from "./pages/Workloads"; import { useTheme } from "./stores/theme"; const queryClient = new QueryClient(); function AppRoutes() { const setup = useQuery({ queryKey: ["setup-status"], queryFn: () => publicApi("/setup/status") }); if (setup.isLoading) { return
Loading NexaFabric...
; } if (!setup.data?.complete) { return ( } /> } /> ); } return ( } /> } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export function App() { const dark = useTheme((state) => state.dark); useEffect(() => { document.documentElement.classList.toggle("dark", dark); }, [dark]); return ( ); }