feat: restructure frontend routes — vendor/tenant persona split
Splits the flat 3-page UI into /vendor/* (platform:admin) and /tenant/* (all authenticated users) route trees, with stub pages, new API hooks, updated Layout with persona-aware sidebar, and SpaController forwarding. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,30 +1,56 @@
|
||||
import { Routes, Route } from 'react-router';
|
||||
import { Routes, Route, Navigate } from 'react-router';
|
||||
import { LoginPage } from './auth/LoginPage';
|
||||
import { CallbackPage } from './auth/CallbackPage';
|
||||
import { ProtectedRoute } from './auth/ProtectedRoute';
|
||||
import { OrgResolver } from './auth/OrgResolver';
|
||||
import { Layout } from './components/Layout';
|
||||
import { DashboardPage } from './pages/DashboardPage';
|
||||
import { LicensePage } from './pages/LicensePage';
|
||||
import { AdminTenantsPage } from './pages/AdminTenantsPage';
|
||||
import { RequireScope } from './components/RequireScope';
|
||||
|
||||
import { VendorTenantsPage } from './pages/vendor/VendorTenantsPage';
|
||||
import { CreateTenantPage } from './pages/vendor/CreateTenantPage';
|
||||
import { TenantDetailPage } from './pages/vendor/TenantDetailPage';
|
||||
import { TenantDashboardPage } from './pages/tenant/TenantDashboardPage';
|
||||
import { TenantLicensePage } from './pages/tenant/TenantLicensePage';
|
||||
import { OidcConfigPage } from './pages/tenant/OidcConfigPage';
|
||||
import { TeamPage } from './pages/tenant/TeamPage';
|
||||
import { SettingsPage } from './pages/tenant/SettingsPage';
|
||||
|
||||
export function AppRouter() {
|
||||
return (
|
||||
<Routes>
|
||||
<Route path="/login" element={<LoginPage />} />
|
||||
<Route path="/callback" element={<CallbackPage />} />
|
||||
<Route
|
||||
element={
|
||||
<ProtectedRoute>
|
||||
<OrgResolver>
|
||||
<Layout />
|
||||
</OrgResolver>
|
||||
</ProtectedRoute>
|
||||
}
|
||||
>
|
||||
<Route index element={<DashboardPage />} />
|
||||
<Route path="license" element={<LicensePage />} />
|
||||
<Route path="admin/tenants" element={<AdminTenantsPage />} />
|
||||
<Route element={<ProtectedRoute />}>
|
||||
<Route element={<OrgResolver />}>
|
||||
<Route element={<Layout />}>
|
||||
{/* Vendor console */}
|
||||
<Route path="/vendor/tenants" element={
|
||||
<RequireScope scope="platform:admin" fallback={<Navigate to="/tenant" replace />}>
|
||||
<VendorTenantsPage />
|
||||
</RequireScope>
|
||||
} />
|
||||
<Route path="/vendor/tenants/new" element={
|
||||
<RequireScope scope="platform:admin" fallback={<Navigate to="/tenant" replace />}>
|
||||
<CreateTenantPage />
|
||||
</RequireScope>
|
||||
} />
|
||||
<Route path="/vendor/tenants/:id" element={
|
||||
<RequireScope scope="platform:admin" fallback={<Navigate to="/tenant" replace />}>
|
||||
<TenantDetailPage />
|
||||
</RequireScope>
|
||||
} />
|
||||
|
||||
{/* Tenant portal */}
|
||||
<Route path="/tenant" element={<TenantDashboardPage />} />
|
||||
<Route path="/tenant/license" element={<TenantLicensePage />} />
|
||||
<Route path="/tenant/oidc" element={<OidcConfigPage />} />
|
||||
<Route path="/tenant/team" element={<TeamPage />} />
|
||||
<Route path="/tenant/settings" element={<SettingsPage />} />
|
||||
|
||||
{/* Default redirect */}
|
||||
<Route index element={<Navigate to="/tenant" replace />} />
|
||||
</Route>
|
||||
</Route>
|
||||
</Route>
|
||||
</Routes>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user