Skip to content

feat(tracker): field-prefixed search, inline filter chips and zero-hit empty state - #10998

Merged
ArtyomSavchenko merged 4 commits into
hcengineering:developfrom
MichaelUray:feat/tracker-search-filter
Aug 11, 2026
Merged

feat(tracker): field-prefixed search, inline filter chips and zero-hit empty state#10998
ArtyomSavchenko merged 4 commits into
hcengineering:developfrom
MichaelUray:feat/tracker-search-filter

Conversation

@MichaelUray

Copy link
Copy Markdown
Contributor

Summary

Split out of #10992 following review feedback. This supersedes the closed #10872 with a clean branch based on current develop and contains only the shared search/filter work; no Gantt code.

Adds SearchInputAdvanced, match highlighting, inline filter chips with an overflow popover, a reusable zero-hit empty state in view-resources, and search-scope/highlight view options wired into List and Kanban.

Known field prefixes are routed through Elasticsearch query_string; queries without a recognized prefix retain the existing simple_query_string path. Workspace and space access filtering remain unchanged.

The exact head passed all required fork-CI jobs, including uitest, uitest-pg, uitest-workspaces, uitest-qms, build, svelte-check, test, formatting, and docker-build.

The Gantt feature remains in #10992 and builds on this PR.

…t empty state

Adds SearchInputAdvanced (field:value prefixes routed to Elasticsearch query_string), match highlighting, inline filter chips with overflow popover, a reusable zero-hit empty state in view-resources, and search-scope/highlight view options for List and Kanban.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Comment thread packages/ui/src/components/SearchInputAdvanced.encoder.ts Outdated
Comment thread models/tracker/src/viewlets.ts
Comment thread packages/ui/src/__test__/SearchInputAdvanced.test.ts
Comment thread plugins/tracker-assets/lang/zh.json Outdated
Comment thread packages/ui/src/components/SearchInputAdvanced.encoder.ts Outdated
Comment thread plugins/tracker-resources/src/components/issues/KanbanView.svelte Outdated
ArtyomSavchenko and others added 3 commits July 31, 2026 12:33
…rework

Shared, non-storage-specific field list, test-folder conventions, locale
coverage, single regex source and an owner-token gate for the result count.

- core: add shared `fullTextSearchFields` constant next to
  FullTextSearchContext as the single source of truth for the full-text
  fields exposed to `field:value` targeting. The client encoder derives
  ES_NATIVE_FIELDS from it and the elastic adapter derives KNOWN_FIELD_RE
  from it, replacing the two "KEEP IN SYNC" copies. Per-field boost weights
  stay a local adapter detail.
- tests: move the five co-located tests into each package's existing test
  folder convention (ui `__test__`, view-resources `__tests__`) and fix the
  relative imports.
- i18n: translate the new tracker search/filter strings in the remaining
  locales (zh, ja, ko, cs, es, fr, it, pt, pt-br, tr), reusing each file's
  existing terminology; ICU placeholders left unchanged.
- encoder: hoist the reserved-character class into one constant and build two
  RegExp instances from it (non-global for `.test()`, global for `.replace()`)
  to avoid the shared-lastIndex trap.
- view-resources: guard `resultIssueCountStore` writes with an owner-token
  gate so a superseded viewlet can no longer clobber the active viewlet's
  count; List/KanbanView claim and release, IssuesView resets through the
  current owner. Assumes a single active IssuesView surface.
- view-resources: make result-count reporting opt-in via a new
  `reportResultCount` prop on List (default true). Embedded, non-primary List
  instances (sub-issues / related issues in the issue edit panel, routed
  through SubIssueList) pass false and never claim the owner token, so opening
  and closing an issue can no longer strand the primary Issues viewlet with a
  dead token — the zero-hit SearchEmptyState card renders again afterwards. Add
  a regression test covering the opted-out embedded consumer.
- elastic: escape every regex metacharacter (not just `.`) when building
  KNOWN_FIELD_RE from `fullTextSearchFields`, so a future field name carrying
  another metacharacter cannot silently corrupt the alternation. Behaviour for
  the current fields is unchanged.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…ult-count store

- Share escapeRegExp from @hcengineering/core so the client encoder and the server elastic adapter escape the fulltext field list identically, not just dots on the client.

- Export resultIssueCountStore as a read-only Readable; the owner-token gate functions (setResultCount / resetResultCount / releaseResultCountOwner) are now the only write path.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
@ArtyomSavchenko
ArtyomSavchenko merged commit 1be6047 into hcengineering:develop Aug 11, 2026
35 of 37 checks passed
@ArtyomSavchenko

Copy link
Copy Markdown
Member

Hi @MichaelUray
I've merged this PR, thank you for the contribution.

MichaelUray added a commit to MichaelUray/huly-platform that referenced this pull request Aug 11, 2026
Builds on the merged search/filter rework (hcengineering#10998). Introduces @hcengineering/gantt, a dependency-free scheduling/zoom/drag/viewport engine package (with a neutral GanttDependency contract), and wires the tracker-specific adapter, Svelte UI, model schema, dependency-shift notifications and sanity coverage in tracker-resources.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants