Skip to content

showcase authoring gap: the ops dashboard's global filter is field:'status' with *task* statuses, and the project widgets carry no filterBindings — so it also lands on showcase_project.status and zeroes those tiles #7568

Description

@huangyiirene

Symptom

This is a showcase authoring gap, not a platform defect. The run classified it as such deliberately. Do not go hunting for a bug in the global-filter engine — the engine does exactly what the metadata tells it to. The fix is in the example's dashboard authoring.

On the showcase ops dashboard, picking any value in the "Task Status" global filter zeroes the project-bound tiles (Active Projects, At-Risk (Red), Total Budget, Projects by Health) as well as filtering the task widgets it was meant for.

examples/app-showcase/src/ui/dashboards/ops-dashboard.dashboard.ts declares one dashboard-scoped global filter:

globalFilters: [
{ field: 'status', label: 'Task Status', type: 'select',
options: [ backlog, todo, in_progress, in_review, done ],
scope: 'dashboard' },
]

Those five options are the task status vocabulary. But the filter is declared by bare field name at scope: 'dashboard', and the widgets bound to the project dataset (kpi_active_projects, kpi_at_risk, kpi_total_budget, col_health) declare no filterBindings, so the same status filter is also applied to showcase_project.status — whose value domain is a different set entirely (active / health-style values). No project row matches in_review, so those tiles read 0.

Expected authoring: either give the project-bound widgets filterBindings that map (or opt out of) the dashboard filter, or scope the filter to the task widgets — the same per-widget field-mapping mechanism proven exact elsewhere in this run (region on invoice widgets vs sales_region on account widgets, correct on the wire and in the echoed SQL).

Still present on origin/main as of 2026-08-11.

Root cause

Authoring, in the example app: a dashboard-scoped global filter declared by bare field name (status) fans out to every widget that has not opted out via filterBindings, and the showcase's project widgets never opted out. The platform behaviour is the documented one — a widget without filterBindings inherits the dashboard filter on its own object's like-named field.

File: examples/app-showcase/src/ui/dashboards/ops-dashboard.dashboard.ts (the globalFilters block and the four projectDs widgets).

Reproduction

  1. Boot showcase and open the ops dashboard.
  2. Note the baseline values of Active Projects / At-Risk (Red) / Total Budget / Projects by Health.
  3. Set the "Task Status" global filter to any option (e.g. in_review).
  4. Observe the task widgets filter correctly while all four project-bound tiles drop to 0 — the filter reached showcase_project.status, whose domain does not contain task statuses.

Source

Extracted from the QA run #7515 (framework a86db17).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions