feat(dispatch): Phase 1 — LynkDispatch AI skeleton, mock data, routes, sidebar

- mockStore: add DISPATCH_LEADS (12), DISPATCH_REPS (5), DISPATCH_RECOMMENDATIONS
  (pre-baked AI scores + route paths for all 12 leads), dispatchLeads state,
  assignDispatchLead() action
- LynkDispatchPage: 3-panel command center shell with storm banner, live badge,
  Storm Mode toggle, KPI bar with real unassigned count
- App.jsx: routes /admin/dispatch and /owner/dispatch wired
- Layout.jsx: LynkDispatch (Zap icon) added to ADMIN and OWNER sidebar nav
This commit is contained in:
Satyam
2026-03-21 21:46:09 +05:30
parent cd3b6c8cfe
commit 4648561e7a
4 changed files with 663 additions and 2 deletions
+17
View File
@@ -31,6 +31,7 @@ import ContractorDashboard from './pages/contractor/ContractorDashboard';
import SubContractorDashboard from './pages/subcontractor/SubContractorDashboard';
import CreateLeadPage from './pages/CreateLeadPage';
import LeadsListPage from './pages/LeadsListPage';
import LynkDispatchPage from './pages/LynkDispatchPage';
// ... (existing imports)
const ProtectedRoute = ({ children, allowedRoles }) => {
@@ -197,6 +198,22 @@ function App() {
</ProtectedRoute>
}
/>
<Route
path="/admin/dispatch"
element={
<ProtectedRoute allowedRoles={['ADMIN', 'OWNER']}>
<LynkDispatchPage />
</ProtectedRoute>
}
/>
<Route
path="/owner/dispatch"
element={
<ProtectedRoute allowedRoles={['OWNER']}>
<LynkDispatchPage />
</ProtectedRoute>
}
/>
<Route
path="/admin/maps"
element={