Skip to content

Console: opening a list filter panel persists a view overlay that overrides the source-defined view filter (empties the list) #4155

Description

@baozhoutao

Summary

In Console, opening a list view's filter panel and interacting with it (add / clear a condition) persists the transient filter state as a view customization overlay in sys_metadata (type=view). The overlay overrides the source-defined view filter — e.g. a source view whose default filter is status not_in [archived, deleted] gets its filter replaced by a stray field equals "" (empty-value) condition. On the next visit the list is served with that empty-value filter → total: 0 → the list looks permanently empty.

Two things make this hard to diagnose:

  1. Clearing doesn't recover. "Clear all" / "Remove condition" in the filter panel do not remove the persisted overlay; the panel then shows no active conditions while the list request still carries the stale field equals "" filter.
  2. It persists across reload and across accounts (the overlay is stored server-side, not per-session), and the empty state renders the "no data yet" copy rather than "no records match your filter" — so it reads like data loss or a permission problem, not a filter artifact.

Recovery requires deleting the overlay row from sys_metadata and restarting the service.

Impact

  • A regular end-user (no admin rights, never explicitly clicked "save view") can silently overwrite the project's source-code view declaration just by using the filter panel.
  • The overwritten filter can hide all rows indefinitely for every user of that view.
  • Severity: high — silent, cross-user, and the misleading empty-state copy sends triage down the wrong path (data / permission) instead of the view layer.

Environment

  • @objectstack/*@17.0.0-rc.5
  • Console list view with a source-defined default filter (status not_in [...]).
  • Observed independently twice on the same platform version (a QA run and a dev run), different objects, different accounts.

Steps to reproduce

  1. Define a list view in metadata with a non-empty default filter (e.g. status not_in ['archived','deleted']).
  2. Open that list in Console as a normal user.
  3. Open the filter panel, add a condition, then use Clear all / Remove condition.
  4. Leave and re-open the list (reload, or log in as a different user).

Expected: the source-defined filter is intact; the list shows the same rows as before.
Actual: the list is served with a persisted field equals "" overlay filter → total: 0 → empty list with "no data yet" copy; the filter panel shows no conditions; the source filter is gone until the sys_metadata view overlay row is deleted and the service restarted.

Notes / questions

  • Is a view customization overlay meant to be written on mere filter-panel interaction (vs. only on an explicit "save view" action)? The trigger threshold appears far lower than expected.
  • When an overlay carries an empty-value condition, could Console treat it as "no filter" rather than field equals ""? And surface a "clear customization / reset to default" affordance for non-admins?

Reproduced while building an ObjectStack 17 app. Detailed screen captures are available on request (currently in a private project repo).

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions