Repository navigation
fix(plugin-list): the gantt chart query honours the toolbar Filter and UserFilters chips (objectui#10037) - #10249
Conversation
…bar Filter and UserFilters chips reach the chart The registered object-gantt renderer forwards no host prop and queries for itself from schema.filter, so a gantt node carrying only the authored filter left the toolbar Filter control and the UserFilters chips changing ListView's own fetch and nothing drawn. The node now carries the same buildEffectiveFilter value ListView's fetch sends, cached on its serialised payload so an equal filter keeps its identity across re-renders. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LkCKMa5bvrw3L4ezcNXEXW
…ecord observed ablation directions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LkCKMa5bvrw3L4ezcNXEXW
…ntt-toolbar-filter
|
changeset-claim-re-read
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Fixes #10037
What was wrong
On a
ganttlist view, the toolbar offers the Filter control and theUserFilterschips. Neither one changed the chart. Every other view draws the rowsListViewfetched, and that fetch appliesbuildEffectiveFilter(schema.filter, currentFilters, userFilterConditions). The registeredobject-ganttrenderer takes only the node'sschemaand runs its own query with$filter: schema.filter(ObjectGantt.reload). The gantt node was built frombaseProps, which carries only the authoredfilter: schema.filter. So both controls changedListView's own fetch and nothing the user could see.The change (forwarding arm, as the dispatch suggested)
packages/plugin-list/src/ListView.tsx: a newganttChartFiltervalue, computed only on the gantt view. It is the samebuildEffectiveFilter(...)value thatListView's own fetch sends. Theobject-ganttbranch now writesfilter: ganttChartFilterafter spreadingbaseProps. Nothing else inbasePropsor in the other branches changed. The toolbar flags did not change either, because the controls now work.ObjectGantt's reload effect listsschema.filteras a dependency. If every re-render handed it a fresh['and', …]array for the same filter, the chart would re-query each time. This follows AGENTS.md [WIP] Enhance every detail of the designer #10: the cache is keyed on the data, not on the identity of a memo result.FilterOperatorErrorfrombuildEffectiveFilterdoes not turn into "no filter". That would widen the chart to every row. The node keeps its last filter (or, before it has one, the authored filter it carried before this change).ListView's own fetch hits the same refusal inside its loadtryand shows the load-error panel, which replaces the chart.ObjectGantt.reloadpassesschema.filtertodataSource.findunchanged as$filter. The effective filter is the spec filter AST thatListView's grid fetch already sends, andValueDataSource(the inline provider) matches the AST form. One side effect: an authoredViewFilterRule[]or MongoDB-style object filter now reaches the chart already lowered bytoFilterNode, the same lowering every other view's query uses. Before, the chart passed it through as authored.Tests and measurements (final head
6260932)packages/plugin-list/src/__tests__/ListView.ganttToolbarFilter-10037.test.tsx. Its stand-in matches the registered renderer's contract (reads{ schema }only, queries$filter: schema.filter, keyed onschema.filter) and asserts what the CHART queries: a CONTROL case, toolbar forwarding, a UserFilters dropdown chip, and a stability case. 4 passed.ablation-replace.mjs(the mutation was proven on disk, then the blob was restored to match HEAD andgit diff HEADwas empty):filter: ganttChartFilter: 3 failed / 1 passed. Both FORWARDS cases failed. STABILITY failed too, because its precondition waits for the forwarded toolbar condition. CONTROL stayed green.expected 5 to be 1.@object-ui/plugin-ganttrenderer (a temporary probe, not committed: it imports a packageplugin-listdoes not declare). Toolbarstatus equals open, chippriority: high, authoredowner = ada. The chart's query was told apart by its$top(theNON_GRID_ROW_CEILING_TOPceiling):$filter=["and",[["owner","=","ada"]],["status","=","open"],["priority","=","high"]], identical to the host fetch; 1 chart query.$filter=[["owner","=","ada"]], while the host fetch carried all three.6260932:pnpm exec vitest run packages/plugin-list/: 83 files / 1009 tests passed.pnpm --filter @object-ui/plugin-list type-check: exit 0. The new test file is intsconfig.test.json's file list (--listFilesOnly).pnpm --filter @object-ui/plugin-list lint: exit 0 (0 errors).check:vi-mock-specifiers/-inherit/-override-shape,check:changeset-claims(report-only),check:new-line-citations(0 new),check:control-bytes,check:test-path-roots,check:phantom-deps,changeset:check,check:unreferenced-sources,check-changeset-presence.mjs: all exit 0.Sibling views (measured, not assumed)
A temporary probe rendered
ListViewwith the toolbar filterstatus equals openover the REAL registered renderers:treeDOES query for itself:ObjectTree's object-provider branch runs before its host-databranch. Its query carried only the authored filter.chartaggregates fromschema.filteralone.Those two are the same defect class on other views. They are reported to the dispatching seat and not fixed here.
Acceptance notes
ListView.tsxstill calls objectui#7210 half 2 "an open maintainer decision" in theganttOwnsDataandsurfaceDrawsFetchedRowscomment blocks. That has been out of date since the a′ ruling (comment 5508048888). This change does not edit those blocks, which are outside its file fence, so the sentences are left as they are.check:changeset-claimsreported pending changesets that nameListView.tsx. I re-read each paragraph: they describe the kanbangroupFieldnode, theuserActionsharvest, comment corrections and the gantt binding route. None of them is falsified by moving the gantt node'sfilter.$search. The probe measured host$search: "needle"and no search on the chart query. That is outside this card, which is about Filter and UserFilters, and is reported separately.Generated by Claude Code