Add store location map manager #20

Open
nalalangan wants to merge 206 commits from feature/location-map-manager into feature/store-selector-modal
Owner

Owner: Codex
Status: in-progress
Branch: feature/location-map-manager
Branch relationship: stacked on parent branch feature/store-selector-modal
Likely modified areas: location map API/model/routes, location map page/components/hooks/styles, map buying flow, focused Playwright coverage
Actual modified files: backend/controllers/location-maps.controller.js; backend/models/location-map.model.js; backend/routes/households.routes.js; backend/services/location-map-layout.service.js; backend/tests/location-map-layout.service.test.js; backend/tests/location-map.model.test.js; backend/tests/store-locations.routes.test.js; frontend/src/App.jsx; frontend/src/api/locationMaps.js; frontend/src/components/maps/; frontend/src/components/modals/ConfirmBuyModal.jsx; frontend/src/components/store/StoreTabs.jsx; frontend/src/context/StoreContext.jsx; frontend/src/hooks/useLocationMap.js; frontend/src/lib/locationMap*.js; frontend/src/pages/LocationMapManager.jsx; frontend/src/styles/ConfirmBuyModal.css; frontend/src/styles/pages/LocationMapManager.css; frontend/tests/buy-modal-auto-advance.spec.ts; frontend/tests/helpers/e2e.ts; frontend/tests/location-map-manager.spec.ts; frontend/tests/store-selector.spec.ts; packages/db/migrations/20260602_010000_location_maps.sql
Collision risk: high
Last meaningful update: Map area drag, resize, and keyboard nudge edits now stay bounded inside the canvas.

Summary:

  • Adds household store-location map persistence, generated starter layouts, draft/publish lifecycle, and member-safe view access.
  • Adds the location map manager route with mobile-first map viewing, editing, panning, zooming, layers, zone/item panels, and buying flow integration.
  • Splits map behavior into dedicated components/hooks for canvas rendering, bottom sheets, dialogs, toolbar/topbar state, draft actions, object actions, derived state, buying, auto-fit, and leave guards.
  • Polishes mobile map controls by removing redundant actions/descriptions, stabilizing toolbar slots, using compact icon/history controls, keeping selected areas visually prioritized and reachable across selection and zoom changes, keeping direct map edits inside the canvas, clarifying locked/hidden/draft states, and refitting maps on compact viewport changes without overriding manual zoom.
  • Adds focused backend and Playwright coverage for map persistence, draft visibility, editing, layout, mobile interactions, buying, stale responses, filters, accessibility names, item count announcements, selected-area reachability, selected zoom reachability, bounded canvas edits, and responsive refit behavior.

Tests:

  • npm run test:e2e -- frontend/tests/location-map-manager.spec.ts --grep "admin nudges selected map areas with arrow keys|admin cannot nudge map areas outside the canvas|admin cannot resize map areas beyond the canvas"
  • npm run test:e2e -- frontend/tests/location-map-manager.spec.ts
  • npm run lint
  • npm run typecheck

Notes:

  • In-app browser verification was attempted for the latest slice, but the browser setup failed in the Windows sandbox. Playwright covered the bounded edit interactions directly.
Owner: Codex Status: in-progress Branch: feature/location-map-manager Branch relationship: stacked on parent branch feature/store-selector-modal Likely modified areas: location map API/model/routes, location map page/components/hooks/styles, map buying flow, focused Playwright coverage Actual modified files: backend/controllers/location-maps.controller.js; backend/models/location-map.model.js; backend/routes/households.routes.js; backend/services/location-map-layout.service.js; backend/tests/location-map-layout.service.test.js; backend/tests/location-map.model.test.js; backend/tests/store-locations.routes.test.js; frontend/src/App.jsx; frontend/src/api/locationMaps.js; frontend/src/components/maps/*; frontend/src/components/modals/ConfirmBuyModal.jsx; frontend/src/components/store/StoreTabs.jsx; frontend/src/context/StoreContext.jsx; frontend/src/hooks/useLocationMap*.js; frontend/src/lib/locationMap*.js; frontend/src/pages/LocationMapManager.jsx; frontend/src/styles/ConfirmBuyModal.css; frontend/src/styles/pages/LocationMapManager.css; frontend/tests/buy-modal-auto-advance.spec.ts; frontend/tests/helpers/e2e.ts; frontend/tests/location-map-manager.spec.ts; frontend/tests/store-selector.spec.ts; packages/db/migrations/20260602_010000_location_maps.sql Collision risk: high Last meaningful update: Map area drag, resize, and keyboard nudge edits now stay bounded inside the canvas. Summary: - Adds household store-location map persistence, generated starter layouts, draft/publish lifecycle, and member-safe view access. - Adds the location map manager route with mobile-first map viewing, editing, panning, zooming, layers, zone/item panels, and buying flow integration. - Splits map behavior into dedicated components/hooks for canvas rendering, bottom sheets, dialogs, toolbar/topbar state, draft actions, object actions, derived state, buying, auto-fit, and leave guards. - Polishes mobile map controls by removing redundant actions/descriptions, stabilizing toolbar slots, using compact icon/history controls, keeping selected areas visually prioritized and reachable across selection and zoom changes, keeping direct map edits inside the canvas, clarifying locked/hidden/draft states, and refitting maps on compact viewport changes without overriding manual zoom. - Adds focused backend and Playwright coverage for map persistence, draft visibility, editing, layout, mobile interactions, buying, stale responses, filters, accessibility names, item count announcements, selected-area reachability, selected zoom reachability, bounded canvas edits, and responsive refit behavior. Tests: - npm run test:e2e -- frontend/tests/location-map-manager.spec.ts --grep "admin nudges selected map areas with arrow keys|admin cannot nudge map areas outside the canvas|admin cannot resize map areas beyond the canvas" - npm run test:e2e -- frontend/tests/location-map-manager.spec.ts - npm run lint - npm run typecheck Notes: - In-app browser verification was attempted for the latest slice, but the browser setup failed in the Windows sandbox. Playwright covered the bounded edit interactions directly.
nalalangan added 1 commit 2026-06-02 00:00:53 -09:00
nalalangan added 1 commit 2026-06-02 23:24:09 -09:00
nalalangan added 1 commit 2026-06-02 23:45:16 -09:00
nalalangan added 1 commit 2026-06-03 00:00:06 -09:00
nalalangan added 1 commit 2026-06-03 00:15:19 -09:00
nalalangan added 1 commit 2026-06-03 08:39:50 -09:00
nalalangan added 1 commit 2026-06-03 09:02:13 -09:00
nalalangan added 1 commit 2026-06-03 09:11:25 -09:00
nalalangan added 1 commit 2026-06-03 09:25:36 -09:00
nalalangan added 1 commit 2026-06-03 09:36:10 -09:00
nalalangan added 1 commit 2026-06-03 09:44:27 -09:00
nalalangan added 1 commit 2026-06-03 09:55:28 -09:00
nalalangan added 1 commit 2026-06-03 10:09:54 -09:00
nalalangan added 1 commit 2026-06-03 10:19:29 -09:00
nalalangan added 1 commit 2026-06-03 10:28:16 -09:00
nalalangan added 1 commit 2026-06-03 10:37:38 -09:00
nalalangan added 1 commit 2026-06-03 10:48:47 -09:00
nalalangan added 1 commit 2026-06-03 10:57:34 -09:00
nalalangan added 1 commit 2026-06-03 11:06:06 -09:00
nalalangan added 1 commit 2026-06-03 11:22:07 -09:00
nalalangan added 1 commit 2026-06-03 11:39:15 -09:00
nalalangan added 1 commit 2026-06-03 11:50:14 -09:00
nalalangan added 1 commit 2026-06-03 12:02:33 -09:00
nalalangan added 1 commit 2026-06-03 12:12:39 -09:00
nalalangan added 1 commit 2026-06-03 12:29:28 -09:00
nalalangan added 1 commit 2026-06-03 12:43:24 -09:00
nalalangan added 1 commit 2026-06-03 12:52:57 -09:00
nalalangan added 1 commit 2026-06-03 13:04:12 -09:00
nalalangan added 1 commit 2026-06-03 13:13:08 -09:00
nalalangan added 1 commit 2026-06-03 13:23:11 -09:00
nalalangan added 1 commit 2026-06-03 13:41:26 -09:00
nalalangan added 1 commit 2026-06-03 13:51:18 -09:00
nalalangan added 1 commit 2026-06-03 14:41:42 -09:00
nalalangan added 1 commit 2026-06-03 14:57:17 -09:00
nalalangan added 1 commit 2026-06-03 15:18:47 -09:00
nalalangan added 1 commit 2026-06-03 15:30:48 -09:00
nalalangan added 1 commit 2026-06-03 16:03:20 -09:00
nalalangan added 1 commit 2026-06-03 16:15:33 -09:00
nalalangan added 1 commit 2026-06-03 16:44:49 -09:00
nalalangan added 1 commit 2026-06-03 17:02:46 -09:00
nalalangan added 1 commit 2026-06-03 17:10:04 -09:00
nalalangan added 1 commit 2026-06-03 17:42:18 -09:00
nalalangan added 1 commit 2026-06-03 17:54:21 -09:00
nalalangan added 1 commit 2026-06-03 18:10:48 -09:00
nalalangan added 1 commit 2026-06-03 18:34:32 -09:00
nalalangan added 1 commit 2026-06-03 18:44:11 -09:00
nalalangan added 1 commit 2026-06-03 19:09:45 -09:00
nalalangan added 1 commit 2026-06-03 19:25:42 -09:00
nalalangan added 1 commit 2026-06-03 19:36:40 -09:00
nalalangan added 1 commit 2026-06-03 19:44:51 -09:00
nalalangan added 1 commit 2026-06-03 19:53:58 -09:00
nalalangan added 1 commit 2026-06-03 20:08:26 -09:00
nalalangan added 1 commit 2026-06-03 20:24:57 -09:00
nalalangan added 1 commit 2026-06-03 20:42:51 -09:00
nalalangan added 1 commit 2026-06-03 20:53:16 -09:00
nalalangan added 1 commit 2026-06-03 21:05:19 -09:00
nalalangan added 1 commit 2026-06-03 21:15:23 -09:00
nalalangan added 1 commit 2026-06-03 21:47:51 -09:00
nalalangan added 1 commit 2026-06-03 22:34:37 -09:00
nalalangan added 1 commit 2026-06-03 23:05:49 -09:00
nalalangan added 1 commit 2026-06-03 23:18:26 -09:00
nalalangan added 1 commit 2026-06-03 23:27:37 -09:00
nalalangan added 1 commit 2026-06-03 23:37:21 -09:00
nalalangan added 1 commit 2026-06-04 00:13:09 -09:00
nalalangan added 1 commit 2026-06-04 00:23:32 -09:00
nalalangan added 1 commit 2026-06-04 00:34:11 -09:00
nalalangan added 1 commit 2026-06-04 00:44:51 -09:00
nalalangan added 1 commit 2026-06-04 00:58:58 -09:00
nalalangan added 1 commit 2026-06-04 01:09:55 -09:00
nalalangan added 1 commit 2026-06-04 01:20:55 -09:00
nalalangan added 1 commit 2026-06-04 01:30:42 -09:00
nalalangan added 1 commit 2026-06-04 01:39:30 -09:00
nalalangan added 2 commits 2026-06-04 01:56:25 -09:00
nalalangan added 1 commit 2026-06-04 02:06:06 -09:00
nalalangan added 1 commit 2026-06-04 02:15:20 -09:00
nalalangan added 1 commit 2026-06-04 02:29:31 -09:00
nalalangan added 1 commit 2026-06-04 02:40:46 -09:00
nalalangan added 1 commit 2026-06-04 02:50:58 -09:00
nalalangan added 1 commit 2026-06-04 03:07:29 -09:00
nalalangan added 1 commit 2026-06-04 03:20:23 -09:00
nalalangan added 1 commit 2026-06-04 03:30:22 -09:00
nalalangan added 1 commit 2026-06-04 03:39:03 -09:00
nalalangan added 1 commit 2026-06-04 03:53:19 -09:00
nalalangan added 1 commit 2026-06-04 04:02:28 -09:00
nalalangan added 1 commit 2026-06-04 04:11:33 -09:00
nalalangan added 1 commit 2026-06-04 04:23:07 -09:00
nalalangan added 1 commit 2026-06-04 04:32:38 -09:00
nalalangan added 1 commit 2026-06-04 04:41:29 -09:00
nalalangan added 1 commit 2026-06-04 04:57:17 -09:00
nalalangan added 1 commit 2026-06-04 05:06:02 -09:00
nalalangan added 1 commit 2026-06-04 05:17:44 -09:00
nalalangan added 2 commits 2026-06-04 05:39:21 -09:00
nalalangan added 1 commit 2026-06-04 05:53:29 -09:00
nalalangan added 1 commit 2026-06-04 06:17:04 -09:00
nalalangan added 1 commit 2026-06-04 06:29:42 -09:00
nalalangan added 1 commit 2026-06-04 06:42:11 -09:00
nalalangan added 1 commit 2026-06-04 06:58:38 -09:00
nalalangan added 1 commit 2026-06-04 07:14:16 -09:00
nalalangan added 1 commit 2026-06-04 07:28:55 -09:00
nalalangan added 1 commit 2026-06-04 07:49:49 -09:00
nalalangan added 1 commit 2026-06-04 08:07:28 -09:00
nalalangan added 1 commit 2026-06-04 08:18:00 -09:00
nalalangan added 1 commit 2026-06-04 08:28:05 -09:00
nalalangan added 1 commit 2026-06-04 08:48:43 -09:00
nalalangan added 1 commit 2026-06-04 08:56:48 -09:00
nalalangan added 1 commit 2026-06-04 09:11:19 -09:00
nalalangan added 1 commit 2026-06-04 09:20:03 -09:00
nalalangan added 1 commit 2026-06-04 09:30:08 -09:00
nalalangan added 1 commit 2026-06-04 09:38:27 -09:00
nalalangan added 1 commit 2026-06-04 09:55:15 -09:00
nalalangan added 1 commit 2026-06-04 10:10:12 -09:00
nalalangan added 1 commit 2026-06-04 10:20:19 -09:00
nalalangan added 1 commit 2026-06-04 10:28:25 -09:00
nalalangan added 1 commit 2026-06-04 10:38:10 -09:00
nalalangan added 1 commit 2026-06-04 10:45:31 -09:00
nalalangan added 1 commit 2026-06-04 11:01:37 -09:00
nalalangan added 1 commit 2026-06-04 11:09:58 -09:00
nalalangan added 1 commit 2026-06-04 11:21:11 -09:00
nalalangan added 2 commits 2026-06-04 11:40:25 -09:00
nalalangan added 1 commit 2026-06-04 11:49:40 -09:00
nalalangan added 1 commit 2026-06-04 11:59:28 -09:00
nalalangan added 1 commit 2026-06-04 12:07:35 -09:00
nalalangan added 1 commit 2026-06-04 12:18:34 -09:00
nalalangan added 1 commit 2026-06-04 12:30:10 -09:00
nalalangan added 1 commit 2026-06-04 12:42:39 -09:00
nalalangan added 1 commit 2026-06-04 12:52:02 -09:00
nalalangan added 1 commit 2026-06-04 13:03:20 -09:00
nalalangan added 1 commit 2026-06-04 13:18:43 -09:00
nalalangan added 1 commit 2026-06-04 13:28:59 -09:00
nalalangan added 1 commit 2026-06-04 13:37:30 -09:00
nalalangan added 1 commit 2026-06-04 13:47:51 -09:00
nalalangan added 1 commit 2026-06-04 14:00:55 -09:00
nalalangan added 1 commit 2026-06-04 14:18:26 -09:00
nalalangan added 1 commit 2026-06-04 14:41:44 -09:00
nalalangan added 1 commit 2026-06-04 14:49:49 -09:00
nalalangan added 1 commit 2026-06-04 15:04:30 -09:00
nalalangan added 1 commit 2026-06-04 15:15:08 -09:00
nalalangan added 1 commit 2026-06-04 15:25:51 -09:00
nalalangan added 3 commits 2026-06-04 15:59:53 -09:00
nalalangan added 1 commit 2026-06-04 16:09:22 -09:00
nalalangan added 1 commit 2026-06-04 16:19:36 -09:00
nalalangan added 1 commit 2026-06-04 16:29:13 -09:00
nalalangan added 1 commit 2026-06-04 16:40:22 -09:00
nalalangan added 1 commit 2026-06-04 16:54:24 -09:00
nalalangan added 1 commit 2026-06-04 17:04:01 -09:00
nalalangan added 1 commit 2026-06-04 17:29:33 -09:00
nalalangan added 1 commit 2026-06-04 17:42:08 -09:00
nalalangan added 1 commit 2026-06-04 17:52:19 -09:00
nalalangan added 1 commit 2026-06-04 18:07:05 -09:00
nalalangan added 1 commit 2026-06-04 18:13:46 -09:00
nalalangan added 1 commit 2026-06-04 18:20:59 -09:00
nalalangan added 1 commit 2026-06-04 18:28:33 -09:00
nalalangan added 1 commit 2026-06-04 18:35:58 -09:00
nalalangan added 2 commits 2026-06-04 19:06:16 -09:00
nalalangan added 1 commit 2026-06-04 19:15:15 -09:00
nalalangan added 1 commit 2026-06-04 19:25:56 -09:00
nalalangan added 1 commit 2026-06-04 19:35:40 -09:00
nalalangan added 1 commit 2026-06-04 19:47:15 -09:00
nalalangan added 1 commit 2026-06-04 19:54:24 -09:00
nalalangan added 1 commit 2026-06-04 20:13:04 -09:00
nalalangan added 1 commit 2026-06-04 20:26:45 -09:00
nalalangan added 1 commit 2026-06-04 20:45:57 -09:00
nalalangan added 1 commit 2026-06-04 20:57:42 -09:00
nalalangan added 1 commit 2026-06-04 21:09:46 -09:00
nalalangan added 1 commit 2026-06-04 21:21:23 -09:00
nalalangan added 2 commits 2026-06-04 21:42:53 -09:00
nalalangan added 1 commit 2026-06-14 20:58:47 -09:00
nalalangan added 1 commit 2026-06-14 21:08:36 -09:00
nalalangan added 1 commit 2026-06-14 21:16:47 -09:00
nalalangan added 1 commit 2026-06-14 21:42:59 -09:00
nalalangan added 1 commit 2026-06-14 21:50:51 -09:00
nalalangan added 1 commit 2026-06-15 11:22:03 -09:00
nalalangan added 1 commit 2026-06-15 13:08:20 -09:00
nalalangan added 1 commit 2026-06-15 13:27:43 -09:00
nalalangan added 1 commit 2026-06-15 14:03:59 -09:00
nalalangan added 1 commit 2026-06-15 14:11:33 -09:00
nalalangan added 1 commit 2026-06-15 14:22:44 -09:00
nalalangan added 1 commit 2026-06-15 14:27:27 -09:00
nalalangan added 1 commit 2026-06-15 14:47:43 -09:00
nalalangan added 1 commit 2026-06-15 16:11:38 -09:00
nalalangan added 1 commit 2026-06-15 21:00:33 -09:00
nalalangan added 1 commit 2026-06-15 21:08:49 -09:00
nalalangan added 1 commit 2026-06-15 21:19:58 -09:00
nalalangan added 1 commit 2026-06-15 21:27:23 -09:00
nalalangan added 1 commit 2026-06-15 21:35:29 -09:00
nalalangan added 1 commit 2026-06-15 21:55:48 -09:00
nalalangan added 1 commit 2026-06-15 22:04:04 -09:00
nalalangan added 1 commit 2026-06-15 22:15:19 -09:00
nalalangan added 1 commit 2026-06-15 22:20:34 -09:00
nalalangan added 1 commit 2026-06-15 22:26:00 -09:00
nalalangan added 1 commit 2026-06-15 22:39:29 -09:00
nalalangan added 1 commit 2026-06-15 22:52:42 -09:00
nalalangan added 1 commit 2026-06-16 07:13:31 -09:00
nalalangan added 1 commit 2026-06-16 20:31:19 -09:00
nalalangan added 1 commit 2026-06-16 20:44:59 -09:00
nalalangan added 1 commit 2026-06-16 22:22:30 -09:00
nalalangan added 1 commit 2026-06-16 22:36:18 -09:00
nalalangan added 1 commit 2026-06-16 22:49:27 -09:00
nalalangan added 1 commit 2026-06-17 08:36:36 -09:00
This pull request can be merged automatically.
You are not authorized to merge this pull request.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feature/location-map-manager:feature/location-map-manager
git checkout feature/location-map-manager
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: nalalangan/grocery-app#20
No description provided.