feat: ADR-0047 implementation (objectui) — spec tabs render, visualization switcher, interface pages#1678
Merged
Merged
Conversation
…t∩capability visualization switcher
- ObjectView forwards viewDef.tabs (spec ViewTab metadata was stored and
served but never rendered) and viewDef.appearance (allowedVisualizations
whitelist), and turns on the dormant ViewSwitcher when the author
whitelisted more than one type
- ListView.handleTabChange accepts the canonical ViewFilterRule[] tab
filter shape (was silently ignored — only the legacy FilterGroup worked);
mapOperator learns the spec snake_case operators
- availableViews: effective options = author whitelist ∩ capability-
resolvable types (kanban needs groupBy, calendar a date field, …) instead
of trusting the whitelist blindly; chart included
- UserFilters tabs element normalizes spec ViewTab presets
({name,filter,isDefault} → {id,filters,default})
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(interface mode) InterfaceListPage binds interfaceConfig.source/sourceView to the merged object definition, inherits columns/filter/sort from the referenced view (the iron rule), and overlays the page's presentation policy: userFilters, appearance.allowedVisualizations (single entry = no switcher), userActions toggles (closed-by-default toolbar — no advanced filter builder, no view management, no export). PageView routes pages carrying interfaceConfig.source to this surface instead of the region renderer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ollow-view hydration, getView type bug - ListView reads showViewSwitcher from the schema too (ObjectView/ InterfaceListPage stamp it there; the prop-only read left the switcher permanently hidden) - InterfaceListPage: prefer source-view candidates that actually carry columns, and hydrate hollow ADR-0017 expansion items through listViewOverrides()/getView() — the same path ObjectView uses - data-objectstack getView(): pass 'view' as the metadata type instead of the object name (hit /meta/<object>/<view> and always 404ed — latent since ADR-0017) All verified live in the browser: data mode (tabs + dropdowns + Grid/ Kanban/Gallery/Calendar switcher, tab filter 10→2 records) and interface mode (inherited columns, page-curated dropdowns only, locked grid, closed toolbar, dropdown filter 10→2 records). Co-Authored-By: Claude Fable 5 <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 free
to 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.
Implements the objectui side of ADR-0047 (phases 2, 4). Companion to framework#1792.
Phase 2 — data mode
ObjectViewforwardsviewDef.tabs(spec ViewTab metadata was stored and served but never rendered — the one-line gap) andviewDef.appearance, and enables the dormantViewSwitcherwhen the author whitelists >1 visualizationListView.handleTabChangeaccepts the canonicalViewFilterRule[]tab-filter shape (was silently ignored);mapOperatorlearns spec snake_case operatorsavailableViews= author whitelist ∩ capability-resolvable types (kanban needs a groupBy, calendar a date field) instead of trusting the whitelist blindlyUserFilterstabs element normalizes spec ViewTab presetsPhase 4 — interface mode
InterfaceListPage: bindsinterfaceConfig.source/sourceViewto the merged object definition, inherits columns/filter/sort from the referenced view (iron rule), overlays page presentation policy (userFilters / locked visualization / closed toolbar).PageViewroutes pages carryinginterfaceConfig.sourceto itlistViewOverrides()/getView()Bug fixes found during live verification
data-objectstack getView()passed the object name as the metadata TYPE (hit/meta/<object>/<view>, always 404 — latent since ADR-0017)ListViewreadsshowViewSwitcherfrom the schema as well as the propVerified live (app-showcase + console)
showcase_task: metadata filter tabs (All/In Progress/Urgent/Done — tab click filters 10→2), metadata dropdowns (状态/优先级/done), Grid|Kanban|Gallery|Calendar switcher, kanban groups by status🤖 Generated with Claude Code