fsanyoto commited on
Commit
c27b755
Β·
verified Β·
1 Parent(s): 3ae601b

Deploy AIOS web (React glide grid + FastAPI slice)

Browse files
web/src/customer-grid/CustomerGrid.tsx CHANGED
@@ -2985,6 +2985,13 @@ function CustomerGridSurface({
2985
  [cohortMode, linkCandidateRows, cohortMemberSet]
2986
  );
2987
 
 
 
 
 
 
 
 
2988
  const { visibleRows, pidToIndex } = useVisibleRows(
2989
  scopedRows,
2990
  fields,
@@ -3006,7 +3013,8 @@ function CustomerGridSurface({
3006
  // wave17 R1 / C-LOCKV: the view's SAVED lock is now the only source. A locked view is a
3007
  // saved view whose `config.cohortLock` names its own id, so opening it IS applying the
3008
  // lock β€” the wave-15 transient rail pick that used to outrank this is gone with its rail.
3009
- config.cohortLock
 
3010
  );
3011
 
3012
  // Owner item 8 β€” the DISPLAY cap. The pipeline above still ran over the whole book (counts,
@@ -7528,7 +7536,7 @@ function CustomerGridSurface({
7528
  );
7529
  }
7530
 
7531
- const activeView = views.find((view) => view.id === activeViewId);
7532
  // Cohort mode's toolbar control (rendered by Toolbar via the `cohortAction` slot; the popover
7533
  // it opens is with the other overlays at the bottom). Disabled without an active cohort β€”
7534
  // zero cohorts is the host page's near-empty state, not this button's error to explain.
 
2985
  [cohortMode, linkCandidateRows, cohortMemberSet]
2986
  );
2987
 
2988
+ // W42-T27 β€” display mode deliberately ignores an unresolved condition so an
2989
+ // owner's existing view stays unchanged. A view granted to this reader is a
2990
+ // permission boundary instead: an unavailable field must narrow the result,
2991
+ // never make the shared view show extra rows.
2992
+ const activeViewForPermissions = views.find((view) => view.id === activeViewId);
2993
+ const receiverSharedView = activeViewForPermissions?.shared === true;
2994
+
2995
  const { visibleRows, pidToIndex } = useVisibleRows(
2996
  scopedRows,
2997
  fields,
 
3013
  // wave17 R1 / C-LOCKV: the view's SAVED lock is now the only source. A locked view is a
3014
  // saved view whose `config.cohortLock` names its own id, so opening it IS applying the
3015
  // lock β€” the wave-15 transient rail pick that used to outrank this is gone with its rail.
3016
+ config.cohortLock,
3017
+ receiverSharedView
3018
  );
3019
 
3020
  // Owner item 8 β€” the DISPLAY cap. The pipeline above still ran over the whole book (counts,
 
7536
  );
7537
  }
7538
 
7539
+ const activeView = activeViewForPermissions;
7540
  // Cohort mode's toolbar control (rendered by Toolbar via the `cohortAction` slot; the popover
7541
  // it opens is with the other overlays at the bottom). Disabled without an active cohort β€”
7542
  // zero cohorts is the host page's near-empty state, not this button's error to explain.
web/wiring_rows/wave42_c.py CHANGED
@@ -175,5 +175,14 @@ ROWS: list[tuple[str, str, str, str, str]] = [
175
  "customer-grid/CustomerGrid.tsx", r"outcome\.results"),
176
  ]
177
 
 
 
 
 
 
 
 
 
 
178
  #: (what was deleted, file, the pattern that must NOT match, why it matters)
179
  DELETIONS: list[tuple[str, str, str, str]] = []
 
175
  "customer-grid/CustomerGrid.tsx", r"outcome\.results"),
176
  ]
177
 
178
+ # W42-T27: strict is only effective once the grid passes it into the row
179
+ # pipeline for a receiver's shared view. The owner remains in display mode.
180
+ ROWS.append(
181
+ ("W42-T27 a receiver's shared-view filters reach the fail-closed row pipeline",
182
+ "customer-grid/useVisibleRows.ts", r"strict\?: boolean",
183
+ "customer-grid/CustomerGrid.tsx",
184
+ r"useVisibleRows\([\s\S]*config\.cohortLock,\s*receiverSharedView")
185
+ )
186
+
187
  #: (what was deleted, file, the pattern that must NOT match, why it matters)
188
  DELETIONS: list[tuple[str, str, str, str]] = []