diff --git a/web/src/App.tsx b/web/src/App.tsx index b8a30d8..40c0635 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -1,5 +1,9 @@ import { Routes, Route, Navigate } from 'react-router-dom'; -import { Box, Toolbar, Typography } from '@mui/material'; +import { useSelector } from 'react-redux'; +import { Box, Button, Card, CardContent, Toolbar, Typography } from '@mui/material'; +import PeopleIcon from '@mui/icons-material/People'; +import { selectSidebarOpen } from './app/slices/uiSlice'; +import type { RootState } from './app/store'; import ProtectedRoute, { RoleGuard } from './components/ProtectedRoute'; import Topbar from './components/Topbar'; import Sidebar from './components/Sidebar'; @@ -11,7 +15,11 @@ 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 { DRAWER_WIDTH } from './constants'; + export default function App() { + const sidebarOpen = useSelector((state: RootState) => selectSidebarOpen(state)); + return ( } /> @@ -29,6 +37,8 @@ export default function App() { sx={{ flexGrow: 1, p: 1.25, + ml: sidebarOpen ? `${DRAWER_WIDTH}px` : 0, + transition: 'margin-left 250ms ease', minHeight: '100vh', }} > @@ -46,13 +56,18 @@ export default function App() { - - User Management - Coming Soon - - Users and roles are currently managed in Cognito. Contact the system administrator to update access. - - + + + + User Management + + Users and roles are currently managed in AWS Cognito. Contact the system administrator to update access. + + + + } /> diff --git a/web/src/pages/proposals/form/ProposalFormPage.tsx b/web/src/pages/proposals/form/ProposalFormPage.tsx index 1cdb54f..1523371 100644 --- a/web/src/pages/proposals/form/ProposalFormPage.tsx +++ b/web/src/pages/proposals/form/ProposalFormPage.tsx @@ -147,7 +147,7 @@ export default function ProposalFormPage() { }, [form.workOrderNumber, form.customerAddress, form.serviceCategory, form.scopeOfWork, customCategory]); return ( - + New Proposal Request diff --git a/web/src/pages/proposals/list/ProposalListPage.tsx b/web/src/pages/proposals/list/ProposalListPage.tsx index bdc3b83..34c7609 100644 --- a/web/src/pages/proposals/list/ProposalListPage.tsx +++ b/web/src/pages/proposals/list/ProposalListPage.tsx @@ -21,8 +21,8 @@ import SearchIcon from '@mui/icons-material/Search'; import AddCircleIcon from '@mui/icons-material/AddCircle'; import { usePaginatedList } from '../../../hooks/usePaginatedList'; import { proposalsApi, type ProposalListItem } from '../../../lib/api/proposals'; -import { STATUS_CHIP_STYLES } from '../../../constants'; -import { formatCurrency, formatDate } from '../../../lib/format'; +import { STATUS_COLORS } from '../../../constants'; +import { formatBidAmount, formatDate, formatDateFull } from '../../../lib/format'; import { useDocumentTitle } from '../../../hooks/useDocumentTitle'; export default function ProposalListPage() { @@ -112,7 +112,7 @@ export default function ProposalListPage() { sx={{ cursor: 'pointer' }} onClick={() => navigate(`/proposals/${row.id}`)} > - {row.proposalNumber} + {row.proposalNumber} {row.customerName} {row.workOrderNumber} {row.serviceCategory} @@ -121,11 +121,18 @@ export default function ProposalListPage() { - {formatCurrency(row.totalBidAmount)} - {formatDate(row.submittedAt)} + + {row.totalBidAmount > 0 + ? formatBidAmount(row.totalBidAmount) + : Not priced + } + + + {formatDate(row.submittedAt)} + ))} {!loading && rows.length === 0 && (