Wires up AppShell + Sidebar compound component, a per-environment SidebarTree that lazy-fetches apps, React Router nested routes, and provider-wrapped main.tsx with ThemeProvider/ToastProvider/BreadcrumbProvider. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { Routes, Route } from 'react-router';
|
|
import { useEffect } from 'react';
|
|
import { useAuthStore } from './auth/auth-store';
|
|
import { LoginPage } from './auth/LoginPage';
|
|
import { CallbackPage } from './auth/CallbackPage';
|
|
import { ProtectedRoute } from './auth/ProtectedRoute';
|
|
import { Layout } from './components/Layout';
|
|
import { DashboardPage } from './pages/DashboardPage';
|
|
import { EnvironmentsPage } from './pages/EnvironmentsPage';
|
|
import { EnvironmentDetailPage } from './pages/EnvironmentDetailPage';
|
|
import { AppDetailPage } from './pages/AppDetailPage';
|
|
import { LicensePage } from './pages/LicensePage';
|
|
|
|
export function AppRouter() {
|
|
const loadFromStorage = useAuthStore((s) => s.loadFromStorage);
|
|
useEffect(() => {
|
|
loadFromStorage();
|
|
}, [loadFromStorage]);
|
|
|
|
return (
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route path="/callback" element={<CallbackPage />} />
|
|
<Route
|
|
element={
|
|
<ProtectedRoute>
|
|
<Layout />
|
|
</ProtectedRoute>
|
|
}
|
|
>
|
|
<Route index element={<DashboardPage />} />
|
|
<Route path="environments" element={<EnvironmentsPage />} />
|
|
<Route path="environments/:envId" element={<EnvironmentDetailPage />} />
|
|
<Route path="environments/:envId/apps/:appId" element={<AppDetailPage />} />
|
|
<Route path="license" element={<LicensePage />} />
|
|
</Route>
|
|
</Routes>
|
|
);
|
|
}
|