feat(GRO-2159): drag-to-reorder + re-optimize on route planner #63

Merged
Flea Flicker merged 1 commits from feat/GRO-2159-route-drag-reorder into dev 2026-06-09 02:57:50 +00:00
Member

GRO-2159 — Route Optimization: Drag-to-Reorder + Optimize UX

Adds drag-and-drop reorder and a re-optimize trigger to the /admin/routes planner page (built in GRO-2158).

Changes

  • Deps: @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities
  • Sortable stop list: each stop card has a grab handle (⠿); reorder via drag
  • Sensors: PointerSensor (desktop), TouchSensor (press-and-hold, mobile groomers), KeyboardSensor (a11y) — touch/mobile drag support required by the spec
  • Persist: on drop, PATCH /api/routes/:routeId/reorder with { stopOrder: [routeStopId…] } (full first-to-last order, exact permutation the API requires)
  • Optimistic UI + rollback: list/map update immediately; reverts and shows an error if the PATCH fails. Server response (recomputed legs, buffers, totals, conflict flags) is adopted authoritatively on success
  • Tight-schedule warnings: retained — server flags stops where the gap < travel + buffer
  • Re-optimize: after a manual reorder, a hint banner with a Re-optimize button appears and re-runs POST /api/routes/optimize
  • Tests: drag handles render, conflict flag shows, no pre-reorder hint, reorder endpoint mocked (179 tests pass)

UAT Playbook

Updated UAT_PLAYBOOK.md §5.29 — Route Planner: Drag-to-Reorder & Re-optimize (GRO-2159) (7 new test cases: handle present, reorder persists, optimistic rollback, conflict re-eval, re-optimize button, touch drag, groomer own-route).

Verification

  • pnpm typecheck
  • pnpm lint (only pre-existing warnings, none in changed files)
  • pnpm test 179 passed
  • pnpm build

Closes GRO-2159.

## GRO-2159 — Route Optimization: Drag-to-Reorder + Optimize UX Adds drag-and-drop reorder and a re-optimize trigger to the `/admin/routes` planner page (built in GRO-2158). ### Changes - **Deps:** `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities` - **Sortable stop list:** each stop card has a grab handle (⠿); reorder via drag - **Sensors:** `PointerSensor` (desktop), `TouchSensor` (press-and-hold, mobile groomers), `KeyboardSensor` (a11y) — touch/mobile drag support required by the spec - **Persist:** on drop, `PATCH /api/routes/:routeId/reorder` with `{ stopOrder: [routeStopId…] }` (full first-to-last order, exact permutation the API requires) - **Optimistic UI + rollback:** list/map update immediately; reverts and shows an error if the PATCH fails. Server response (recomputed legs, buffers, totals, conflict flags) is adopted authoritatively on success - **Tight-schedule warnings:** retained — server flags stops where the gap < travel + buffer - **Re-optimize:** after a manual reorder, a hint banner with a **Re-optimize** button appears and re-runs `POST /api/routes/optimize` - **Tests:** drag handles render, conflict flag shows, no pre-reorder hint, reorder endpoint mocked (179 tests pass) ### UAT Playbook Updated `UAT_PLAYBOOK.md` **§5.29 — Route Planner: Drag-to-Reorder & Re-optimize (GRO-2159)** (7 new test cases: handle present, reorder persists, optimistic rollback, conflict re-eval, re-optimize button, touch drag, groomer own-route). ### Verification - `pnpm typecheck` ✅ - `pnpm lint` ✅ (only pre-existing warnings, none in changed files) - `pnpm test` ✅ 179 passed - `pnpm build` ✅ Closes [GRO-2159](/GRO/issues/GRO-2159).
Flea Flicker added 1 commit 2026-06-09 02:55:53 +00:00
feat(GRO-2159): drag-to-reorder + re-optimize on route planner
CI / Test (pull_request) Successful in 24s
CI / Lint & Typecheck (pull_request) Successful in 31s
CI / Build & Push Docker Image (pull_request) Successful in 50s
2e5e35dcea
Add @dnd-kit drag-and-drop reorder to the /admin/routes stop list.

- Install @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities
- Sortable stop cards with a grab handle; pointer + touch (press-and-hold)
  + keyboard sensors so mobile groomers and a11y users can reorder
- On drop, PATCH /api/routes/:routeId/reorder { stopOrder } (full order)
- Optimistic UI update with rollback + error message on failure
- Server recomputes legs/buffers/conflicts; response adopted authoritatively
- Tight-schedule conflict warnings retained (server-flagged, gap < travel+buffer)
- "Re-optimize" hint+button after a manual reorder (re-runs POST /optimize)
- Tests: drag handles, conflict flag, no pre-reorder hint, reorder mock
- Updated UAT_PLAYBOOK.md §5.29 — drag-to-reorder & re-optimize cases

Co-Authored-By: Paperclip <noreply@paperclip.ing>
Flea Flicker merged commit 59a29a2d03 into dev 2026-06-09 02:57:50 +00:00
Sign in to join this conversation.