import { useState } from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { Box, Button, Card, CardContent, Typography } from '@mui/material'; import { STORAGE_KEY_SIDEBAR } from './constants'; import PeopleIcon from '@mui/icons-material/People'; import ProtectedRoute, { RoleGuard } from './components/ProtectedRoute'; import Topbar from './components/Topbar'; import Sidebar from './components/Sidebar'; import LoginPage from './pages/auth/LoginPage'; import AuthCallback from './pages/auth/AuthCallback'; import Dashboard from './pages/dashboard/Dashboard'; import ProposalFormPage from './pages/proposals/form/ProposalFormPage'; import ProposalDetailPage from './pages/proposals/detail/ProposalDetailPage'; import ProposalListPage from './pages/proposals/list/ProposalListPage'; import AdminDashboard from './pages/admin/dashboard/AdminDashboard'; import AdminWorkspace from './pages/admin/workspace/AdminWorkspace'; import CustomerManagementPage from './pages/admin/customers/CustomerManagementPage'; import PricingLibraryPage from './pages/admin/pricing-library/PricingLibraryPage'; export default function App() { // SHOC shell pattern (mirrors (protected)/_layout.tsx): sidebar open state is // plain layout state passed down as props, persisted across visits. const [sidebarOpen, setSidebarOpenState] = useState( () => window.localStorage.getItem(STORAGE_KEY_SIDEBAR) !== 'false', ); const setSidebarOpen = (open: boolean) => { setSidebarOpenState(open); window.localStorage.setItem(STORAGE_KEY_SIDEBAR, String(open)); }; return ( } /> } /> {/* SHOC shell composition (ADR 0003): sidebar column + [topbar / scrolling main] */} setSidebarOpen(!sidebarOpen)} /> } /> } /> } /> } /> {/* Admin Routes */} } /> } /> } /> } /> } /> User Management Users and roles are currently managed in AWS Cognito. Contact the system administrator to update access. } /> } /> } /> ); }