Uh oh!
There was an error while loading. Please reload this page.
refactor(studio): unify tab + base filter editors on the runtime FilterBuilder - #1813
Merged
Conversation
…erBuilder
Studio's interface-page filter UX was two bespoke editors: a per-tab
rule list (field/operator/value rows + Add rule) and a base `filterBy`
repeater. Neither matched the polished FilterBuilder the list view's
top-right toolbar already uses, and the per-tab rows were cramped and
hard to use.
Replace both with the SAME runtime FilterBuilder, surfaced in a popover:
- New `FilterBuilderField` / `filter-builder` widget wraps the
`@object-ui/components` FilterBuilder in a Popover. The trigger
summarizes the active conditions by field label ("+ Add filter…"
when empty).
- Per-tab presets (FilterModeWidget tabs editor) now render
`FilterBuilderField` inside `tab-N-filter` instead of the old
rule rows; addRule/patchRule/removeRule + TAB_OPERATORS removed.
- Stored format stays spec `ViewFilterRule[]` ({field,operator,value});
the builder's camelCase operators are mapped at the boundary
(FB_TO_SPEC / SPEC_TO_FB) so the runtime (specOperatorToAst) is
unchanged and existing tab/base filters round-trip.
The base `filterBy` switches to this widget via the spec form
(framework page.form.ts → widget:'filter-builder').
Verified in the studio (:5181) against showcase_task_triage: both the
base filter and each tab open the same popout builder, existing
conditions load (status equals in_progress), edits apply live to the
preview, and clearing restores all records. tsc clean; 274
metadata-admin tests pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Studio's interface-page filter setup used two bespoke editors — a cramped per-tab rule list (field/operator/value rows + Add rule) and a
type:'repeater'basefilterBy. Neither matched the polished FilterBuilder that the list view's top-right toolbar already uses, and the per-tab rows were hard to use.This unifies both the tab-preset filters and the page base filter onto the same runtime FilterBuilder, surfaced in a popover — one consistent, good filter UX everywhere.
What
FilterBuilderField+filter-builderwidget wraps@object-ui/components'FilterBuilderin aPopover. The trigger summarizes active conditions by field label ("+ Add filter…" when empty).FilterBuilderFieldinsidetab-N-filter; the oldaddRule/patchRule/removeRulehelpers andTAB_OPERATORSare removed.ViewFilterRule[]({field, operator, value}); the builder's camelCase operators are mapped at the boundary (FB_TO_SPEC/SPEC_TO_FB) so the runtime (specOperatorToAst) is unchanged and existing filters round-trip.filterByswitches to this widget via the spec form — see companion framework PR (page.form.ts→widget:'filter-builder').Verification
Verified in the studio (
:5181) againstshowcase_task_triage:status equals in_progress).tscclean; 274 metadata-admin tests pass (incl. updatedFilterModeWidget.test.tsx).🤖 Generated with Claude Code