You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: ADR-0047 — persist user-filter selections in the URL (#1681)
* feat: ADR-0047 — persist user-filter selections in the URL
End-user filter selections (dropdown values + active filter tab) now
mirror into uf_* search params and restore on load, so filtered lists
survive a reload and are shareable as links (Airtable Interfaces parity):
- UserFilters: initialSelections prop restores dropdown values (typed
coercion against resolved option values) and the active tab preset
(_tab key); onSelectionsChange reports raw selections on every change.
- ListView: forwards both props; the TabBar path (metadata view tabs)
restores the active tab and applies its filter to the first fetch.
- ObjectView/InterfaceListPage: parse uf_* params once at mount, write
back with history replace. The url-filters memo now keys off the
filter[...] entries only so uf_* writes don't rebuild the schema.
Browser-verified on app-showcase: workbench dropdown (?uf_priority=urgent)
and data-mode tab (?uf__tab=urgent) both survive reload with correct
badge/tab state and filtered results. plugin-list: 135/135.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix: InterfaceListPage infinite refetch loop + ADR-0047 live e2e suite
The hollow-view hydration effect keyed on objectDef/resolvedView object
identities, which are rebuilt every render (useMetadata().objects is a
fresh array each time). Any re-render after hydration settled — e.g. the
new uf_* URL write — made the unconditional setHydratedView(null)
ping-pong with the async setHydratedView(full): an infinite render +
refetch loop (~60 req/s). Deps are now scalars (object name, view key,
hollow flag) and the schema memo keys on the serialized view config, so
parent re-renders no longer refetch.
Adds e2e/live/user-filters.spec.ts locking the ADR-0047 surfaces:
tabs XOR dropdowns, uf__tab/uf_<field> URL persistence across reload,
visualization dropdown whitelist, interface-page lockdown, and the
counts snapshot — this suite is what caught the loop.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
0 commit comments