Repository navigation
Web grid: filter a column by number, text operator or empty cell - #5255
Merged
Merged
Conversation
This was referenced Oct 5, 2026
erikdarlingdata
marked this pull request as ready for review
October 5, 2026 14:51
12 of 14 tasks
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.
Fixes #5248
Part of #4843
What users see change
Typing in a column filter works exactly as before (case-insensitive substring of the cell text). Beside the box there is now a "Match" list with the desktop's operators, chosen only when wanted:
The chip names the choice ("CPU: > 900"). The operator is kept at module scope with the text, so the 60 s repaint keeps it. Is empty / Is not empty hide the text box.
What changed
panels.jsonly. The column's numeric value comes from the same path the sort uses: a newcolumnValue(sortValue, else the row key) feeds both the sort and the filter, andsortKeyOfturns it into a number. The column kind issortKindOf, the same decision the sort makes.> 900therefore matches a cell showing "1,000". The typed number drops,%$and spaces, as the desktop does. If the cell or the typed text is not a number, an ordering matches nothing; Equals/Not equals fall back to text.Empty vs zero: a cell is empty when its raw value is null, undefined, "", blank, NaN or an empty list.
0,falseand a literal "-" are values. A column drawn bydisplay()orrender()with no raw value is empty when it shows nothing or the dash.Not changed
No service or MCP read changes; the rows are already on the page.
Verified at the head
GridFilterBehaviourTests15/15 (7 new). RED against unmodifiedpanels.js: all 7 new tests fail (no operator list exists, so the operator harness cannot find it); the 8 existing pass.GridAdoptionBehaviourTests7/7,GridToolsBehaviourTests9/9.panels.jsor a web harness): all pass except the expected platform ones (LivePostgresCollectionHygieneTests,RawWindowFloorViewerPortTestswhich needs WPF COM).node --checkon panels.js: clean.CHANGELOG entry
SECTION: Added
ENTRY: - Filter web grid columns by number, text operator or empty cell ([#PR]) - a column filter can now match greater/less than, equals, not equals, starts with, ends with, is empty and is not empty, comparing the real numbers rather than the formatted text; plain typing still does a contains match.
REF: [#PR]: https://github.com/erikdarlingdata/PerformanceMonitor/pull/PR
Why a time column offers no ordering operators
Checked against the desktop rather than assumed.
ColumnFilterMatcher.cs:97implements thefour ordering operators through
CompareNumeric, which parses decimals only — so>on aDateTimecolumn parses nothing and matches nothing in the desktop either. The desktop's popupstill lists those operators for such a column, so choosing one there silently returns no rows.
The web omits them on time columns instead. That is a deliberate, narrow divergence: it removes
an operator that cannot work rather than reproducing a dead control. If date ordering is wanted
later it needs a real date comparison in both apps, which is its own change.