LearnNewsExamplesServices
Frontmatter
id19787
titleClicking an inline grid header filter also sorts its column
stateClosed
labels
bugaigrid
assigneesneo-gpt-emmy
createdAtOct 16, 2026, 11:23 AM
updatedAtOct 16, 2026, 11:49 AM
githubUrlhttps://github.com/neomjs/neo/issues/19787
authorneo-gpt-emmy
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtOct 16, 2026, 11:49 AM
milestonev13.3

Clicking an inline grid header filter also sorts its column

neo-gpt-emmy
neo-gpt-emmy commented on Oct 16, 2026, 11:23 AM

Context

The v13.3 polish pass exposed an unwanted sort while focusing a header filter. Grace reported it during the grid workflow read; Emmy independently reproduced it in Chrome on Engine 065915038d. Current dev 5829f5d407 changes only the lockfile from that tree.

The Problem

In examples/grid/bigData, enable showHeaderFilter on the firstname header, with column menus disabled. Before a native click into the empty input, isSorted is null. The click focuses the input but also changes it to ASC and installs a firstname/ASC sorter in the Store. No text was entered. A user trying to position the caret unexpectedly reorders records.

The Architectural Reality

src/grid/header/Button.mjs:onClick excludes the menu trigger and resize handle, then always advances the sort state. The inline field created by afterSetShowHeaderFilter is a child of the same header button; its input, wrapper and field root are in the observed click ancestry.

Design authority: learn/guides/datahandling/Grids.md describes header filters as “allowing users to filter data directly from the column headers”; its Sorting section separately describes a header click as the sorting gesture. This repair keeps interaction with the nested filter control from being interpreted as the sorting gesture, consistent with the existing menu-trigger exclusion.

The Fix

Keep inline filter interactions inside that control at the header's sort-dispatch boundary. Cover the existing field root and its descendants, including nested operator/clear controls, without disabling ordinary header sorting or changing Store filter ownership. Add the regression to the existing test/playwright/e2e/grid/HeaderInlineProjectionNL.spec.mjs.

Acceptance Criteria

  • Clicking an empty or populated inline filter leaves the header sort state and Store sorters unchanged.
  • Nested filter controls retain their filtering action without also sorting; typing still updates the inline contribution.
  • A normal click on the header caption still sorts and toggles direction.
  • A native browser regression fails on the current source and passes with the repair; existing inline projection coverage remains green.

Out of Scope

Header layout/overflow, the new optional record-search toolbar, Table behavior, and the separately owned keyboard-navigation investigation.

Related

#19652 · #19786 · #19669

Live latest-open sweep: latest20 open issues checked 2026-10-16 around09:22Z; no equivalent. Recent30all-state A2A: no competing claim; Grace handed the reported bug to Emmy's census. Own-assignment sweep:2open, neither on this surface. MC sweep: header-filter input click/sort query returned3results, no prior disposition of this symptom; KB points to existing header/menu interaction separation. No new module placement or public API.

Origin Session ID: 40118f10-f8f6-4506-a439-4589744b689f Retrieval Hint: "inline header filter click changes isSorted and Store sorters"

tobiu referenced in commit cd2d1e5 - "fix(grid): keep inline filter clicks from sorting (#19787) (#19788)" on Oct 16, 2026, 11:49 AM
tobiu closed this issue on Oct 16, 2026, 11:49 AM