feat(GRO-2158): route planner page at /admin/routes
CI / Test (pull_request) Successful in 27s
CI / Lint & Typecheck (pull_request) Successful in 34s
CI / Build & Push Docker Image (pull_request) Successful in 53s

Build the Route Optimization route planner UI in groombook/web:
- New /admin/routes page with date picker + groomer selector
  (auto-filtered for groomer role via GET /api/staff/me)
- react-leaflet + OpenStreetMap tiles, lazy-loaded so Leaflet ships
  as a separate code-split chunk (RouteMap-*.js / .css)
- Map with numbered teardrop divIcon pins + route polyline, auto-fit
  bounds; numbered pins avoid the Leaflet default-marker asset issue
- Stop-list panel: per-stop card with time, client name, address,
  travel time from previous stop, and tight-schedule conflict flag
- Total travel time + distance summary + route status badge
  (draft / optimized / in_progress / completed)
- "Optimize" button wired to POST /api/routes/optimize
- Reads daily route via GET /api/routes/daily?staffId=&date=
- Tests for stop rendering, summary, role auto-filter, optimize call
- Updated UAT_PLAYBOOK.md §5.28 — Route Planner Page

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Flea Flicker
2026-06-09 01:48:35 +00:00
parent 98c8a7bb83
commit bb306ea41d
7 changed files with 718 additions and 3 deletions
+3
View File
@@ -18,9 +18,11 @@
"@stripe/stripe-js": "^9.1.0",
"@tailwindcss/vite": "^4.2.2",
"better-auth": "^1.5.6",
"leaflet": "^1.9.4",
"lucide-react": "^0.577.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-leaflet": "^5.0.0",
"react-router-dom": "^7.1.2",
"recharts": "^3.8.0",
"tailwindcss": "^4.2.2"
@@ -30,6 +32,7 @@
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/leaflet": "^1.9.12",
"@types/node": "^25.6.0",
"@types/react": "^19.0.6",
"@types/react-dom": "^19.0.3",