fix(filters): browse with no rules works, popup under the input, no sticky headers (user report)

- Blank typed queries rode the STATIC autocomplete path for the classic
  six fields, where a single space similarity-matches into nothing —
  clicking an empty value box with no other filters said 'No matching
  values' in a library full of values. Blank = browse now always rides
  the composed engine (which trims and answers the top values); static
  keeps its pinned contract for real typed queries. Regression-pinned:
  browse with no rules lists the field's values.
- The value popup now drops BELOW the input (top: 100%), not over it.
- Field-menu group headers lost position:sticky — the search box alone
  stays pinned.
This commit is contained in:
John O'Keefe committed 2026-10-20 16:01:10 -04:00
1 parent 4c03116ec7
commit 9c006a9a2f
3 files changed
+20 -6

No files matched your search

+8 -3
View File
@@ -2648,9 +2648,14 @@ func (mh *MediaHandler) handleFieldValuesSearch(c *echo.Context, userID pgtype.U
tree = t
}
// Static path: the classic six with no rule tree (unchanged
// contract — the tag-dropdown island and deep links still ride it).
staticSix := tree == nil
// Static path: the classic six with a REAL typed query and no rule
// tree (unchanged contract — the tag-dropdown island and deep links
// still ride it). A BLANK typed query is BROWSE (the builder's
// click-the-box top-values list): the static queries would
// similarity-match a single space into nothing, so browse rides the
// composed engine, which trims the query and answers the top values
// under the rules.
staticSix := tree == nil && strings.TrimSpace(searchQuery) != ""
if staticSix {
switch fieldType {
case "author", "genre", "tags", "narrator", "series", "language":