fsanyoto commited on
Commit
a944445
Β·
verified Β·
1 Parent(s): 07ed0d2

Deploy AIOS web (React glide grid + FastAPI slice)

Browse files
Files changed (3) hide show
  1. RELEASES.json +1 -1
  2. VERSION +1 -1
  3. web/src/customer-grid/CustomerGrid.tsx +27 -10
RELEASES.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "current": "80b80b9",
3
  "releases": [
4
  {
5
  "version": "v53",
 
1
  {
2
+ "current": "507c54b",
3
  "releases": [
4
  {
5
  "version": "v53",
VERSION CHANGED
@@ -1 +1 @@
1
- 80b80b9
 
1
+ 507c54b
web/src/customer-grid/CustomerGrid.tsx CHANGED
@@ -4010,17 +4010,34 @@ function CustomerGridSurface({
4010
  /* ═══ end W18-B VOID (geometry) ═══ */
4011
 
4012
  // The record drawer resolves positions against what the MODE paints: the display slice for
4013
- // grid/list (the cap is real there), the FULL pipeline for calendar/kanban/map (a month, a
4014
- // stack or a pin reaches past the cap by design β€” a drawer that refused those pids would
4015
- // close itself on a card the user can plainly see).
4016
- // ⭐ WAVE-27 item 8 (C3) β€” `swipe` belongs here for calendar/kanban/map's own reason: the deck
4017
- // is derived from `modeDataRows` (the FULL pipeline), so a card past the display cap is one
4018
- // the user can plainly see, and a drawer that refused its pid would close itself on open.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4019
  const fullSetMode =
4020
- displayMode === "calendar" || displayMode === "kanban" || displayMode === "map" ||
4021
- displayMode === "swipe";
4022
- const detailRows = fullSetMode ? visibleRows : displayRows;
4023
- const detailIdxMap = fullSetMode ? pidToIndex : displayPidToIndex;
4024
  const detailIndex = detailPid !== null ? detailIdxMap.get(detailPid) : undefined;
4025
  useEffect(() => {
4026
  if (detailPid !== null && detailIndex === undefined) setDetailPid(null);
 
4010
  /* ═══ end W18-B VOID (geometry) ═══ */
4011
 
4012
  // The record drawer resolves positions against what the MODE paints: the display slice for
4013
+ // grid/list (the cap is real there), the FULL pipeline for calendar/kanban (a month or a
4014
+ // stack reaches past the cap by design β€” a drawer that refused those pids would close itself
4015
+ // on a card the user can plainly see).
4016
+ //
4017
+ // Map has one deliberately narrower exception to that rule. A saved Route is read from the
4018
+ // current scoped book so opening yesterday's route still shows its complete stop list even
4019
+ // when today's View filters a stop out. `MapView` can therefore ask the ordinary drawer to
4020
+ // open a pid that is not in `visibleRows`. Resolve Map's detail identity from that SAME
4021
+ // `scopedRows` universe: it is already after the table, permission, BU, and Cohort walls, and
4022
+ // is exactly what MapView receives as `allRows`. This is a drawer lookup only β€” it neither
4023
+ // changes the View's rows nor selection, route membership, or route order.
4024
+ const mapDetailRows = useMemo(
4025
+ () => scopedRows.map((record) => ({ kind: "data" as const, record })),
4026
+ [scopedRows]
4027
+ );
4028
+ const mapDetailPidToIndex = useMemo(
4029
+ () => new Map(mapDetailRows.map((row, index) => [row.record.pid, index])),
4030
+ [mapDetailRows]
4031
+ );
4032
+ // ⭐ WAVE-27 item 8 (C3) β€” `swipe` belongs here for calendar/kanban's own reason: the deck is
4033
+ // derived from `modeDataRows` (the FULL pipeline), so a card past the display cap is one the
4034
+ // user can plainly see, and a drawer that refused its pid would close itself on open. Map's
4035
+ // saved-stop case is the explicit scoped branch above, not another spelling of this rule.
4036
  const fullSetMode =
4037
+ displayMode === "calendar" || displayMode === "kanban" || displayMode === "swipe";
4038
+ const detailRows = displayMode === "map" ? mapDetailRows : fullSetMode ? visibleRows : displayRows;
4039
+ const detailIdxMap = displayMode === "map" ? mapDetailPidToIndex
4040
+ : fullSetMode ? pidToIndex : displayPidToIndex;
4041
  const detailIndex = detailPid !== null ? detailIdxMap.get(detailPid) : undefined;
4042
  useEffect(() => {
4043
  if (detailPid !== null && detailIndex === undefined) setDetailPid(null);