import React from 'react'; import { Routes, Route, Navigate, useLocation } from 'react-router-dom'; import { useAuth } from './context/AuthContext'; import Layout from './components/Layout'; import Login from './pages/Login'; import Landing from './pages/Landing'; import Dashboard from './pages/Dashboard'; import Maps from './pages/Maps'; import AdminSchedule from './pages/AdminSchedule'; import CustomerProfile from './pages/CustomerProfile'; import LeaderboardPage from './pages/LeaderboardPage'; import ErrorBoundary from './components/ErrorBoundary'; import SmoothScroll from './components/SmoothScroll'; import { Toaster } from 'sonner'; import NotFound from './pages/NotFound'; import OwnerSnapshot from './pages/owner/OwnerSnapshot'; import PeopleDirectory from './pages/owner/PeopleDirectory'; import VendorDirectory from './pages/owner/VendorDirectory'; import DocumentManagement from './pages/owner/DocumentManagement'; import OwnerProjectList from './pages/owner/OwnerProjectList'; import OwnerProjectDetail from './pages/owner/OwnerProjectDetail'; import OrgSettings from './pages/owner/OrgSettings'; import SubcontractorTasksPage from './pages/owner/SubcontractorTasksPage'; import PlaceholderDashboard from './pages/PlaceholderDashboard'; import ProCanvas from './pages/ProCanvas'; import ProjectList from './pages/contractor/ProjectList'; import AiAssistantPage from './pages/AiAssistantPage'; import EstimateBuilder from './pages/EstimateBuilder'; // New Dashboards import VendorDashboard from './pages/vendor/VendorDashboard'; import VendorOrders from './pages/vendor/VendorOrders'; import ContractorDashboard from './pages/contractor/ContractorDashboard'; import SubContractorDashboard from './pages/subcontractor/SubContractorDashboard'; import SubcontractorTaskDetailPage from './pages/subcontractor/SubcontractorTaskDetailPage'; import CreateLeadPage from './pages/CreateLeadPage'; import LeadsListPage from './pages/LeadsListPage'; import LeadDetailPage from './pages/LeadDetailPage'; import LynkDispatchPage from './pages/LynkDispatchPage'; import EstimatesPage from './pages/EstimatesPage'; import KanbanPage from './pages/KanbanPage'; import LeadProjectPage from './pages/LeadProjectPage'; import StormIntelPage from './pages/StormIntelPage'; import FieldStormZonePage from './pages/FieldStormZonePage'; // ... (existing imports) const ProtectedRoute = ({ children, allowedRoles }) => { const { user, isAuthenticated } = useAuth(); const location = useLocation(); if (!isAuthenticated) { return ; } if (allowedRoles && !allowedRoles.includes(user.role)) { // If user is employee but wrong role, go to their default dashboard // For now, just redirect to home or show unauthorized return ; } return children; }; function App() { return ( }> {/* Public Routes */} } /> } /> } /> {/* Protected Field Agent Routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Owner Routes */} } /> } /> } /> } /> } /> } /> {/* Unified project detail — won leads and projects share this page (interim coarse guard; ABAC policy guard lands in Phase 8) */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Protected Admin Routes — Owner has full admin access */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Contractor Routes */} } /> } /> {/* Vendor Routes */} } /> } /> {/* Subcontractor Routes */} } /> } /> } /> {/* Catch all */} } /> ); } export default App;