Repository navigation
fix(ui): search the Applications and Services lists server side, with the Search and Columns sidebar - #1290
fix(ui): search the Applications and Services lists server side, with the Search and Columns sidebar#1290WilcoLouwerse wants to merge 2 commits into
Conversation
…ive them the Search and Columns sidebar A free-text search on the faceted Applications page narrowed the list by every id the facets matched, sent as _ids[] in the query string. From about 170 matches the request line was too long, the server answered HTTP 414 and the list showed an error on every search after that. The page now has the Search and Columns sidebar the other index pages have. Its search is the list's own _search, which OpenRegister pages server side; the facet counts follow the same term. Only a GEMMA facet selection still narrows the list by the matched ids. The Services page uses the same view and gets the same sidebar, as its toolbar search box is gone. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, and update the e2e and spec Review of #1290: - created() carries an @SPEC tag (gate 16). - The e2e scenario typed into the removed toolbar search box; it now opens the Search and columns sidebar and types there. - The list is no longer remounted when the facet counts change the narrowing ids: the self-fetch list watches its filter prop and refetches (nextcloud-vue 2.65.0 and later), so typing in the sidebar search with a facet selected keeps the focus. Only a saved view or an old link still remounts it. - A link from before this change carries the term as _gf_search; it moves to _search and the list reads it. - gemma-faceted-search spec: the search is the sidebar's Search tab. - The header docblock says the search and columns are CnIndexPage's own sidebar; the unused strings "Search applications and services…" and "Clear search" are gone from en and nl. jest 187 pass, vitest facetStore/facetSchema 28 pass, validate-manifest PASS, eslint clean on the changed files. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
WilcoLouwerse
left a comment
There was a problem hiding this comment.
Verdict: APPROVE (self-review, posted as a comment)
Mode Standard. The approach holds in both library versions the PR can ship with (nextcloud-vue 2.65.0 from the lock, 2.73.1 from #1291): CnIndexPage takes sidebar, its hoisted sidebar's search reaches onSearchEvent → $emit('search'), and the list restores _search from the route on mount. The review found 2 🔴, 2 🟡 and 1 🟢; all were fixed on the branch before posting.
✅ Fixed before posting (5)
- 🔴 gate-16:
created()had no@spectag — fixed in71e684c0. - 🔴 The e2e scenario typed into the removed toolbar search box — fixed in
71e684c0. - 🟡 With a GEMMA facet selected, every facet-count refetch changed the remount key, so typing in the sidebar search lost focus — the key now changes only on
listRemount(the self-fetch list watches itsfilterprop and refetches from 2.65.0 on) —71e684c0. - 🟡 Old links carry the term as
_gf_searchand lost it;created()now moves it to_searchand remounts the list. The gemma-faceted-search spec scenario names the sidebar search —71e684c0. - 🟢 The header docblock described the search as not using
CnIndexPage's sidebar; it now says it does. The unused strings "Search applications and services…" and "Clear search" are removed from en and nl —71e684c0.
Gates: local run on 71e684c0 (run-hydra-gates.sh --scope-to-diff --base origin/development): exit 0, 58 of 58 applicable gates ran. The PR's own CI did not start for the first head (the pull_request event was lost during a GitHub API outage); it is expected on this push.
Tests: npx jest 187 passed, vitest facetStore/facetSchema 28 passed, node tests/validate-manifest.js PASS, eslint clean on the changed files.
Not verified: in a browser — the WOO-586 rig was stopped during the review.
Quality Report — ConductionNL/stackiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue-demi | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 133/133 | |||
| npm | ✅ | ✅ 807/807 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| lockfile sync | ✅ | ||||
| PHPUnit | ✅ 1223/1223 · 20 skipped | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development. |
||||
| Hydra gates | ✅ |
Quality workflow — 2026-10-12 14:54 UTC
Download the full PDF report from the workflow artifacts.
What
Findings from the WOO-586 walkthrough on the CMDB rig (Gemeente Rotterdam import, 1138 applications):
_ids[]in the query string. From about 170 matches the request line is too long: the rig's access log showsGET …/objects/20/module?…_ids%5B%5D=…answered with HTTP 414 (19 times), and the list showed an error. The facet cache (30 min) made earlier terms look fine for a while.How
config.sidebaron the Modules and Services pages;FacetedCatalogIndexViewforwards it toCnIndexPage. The sidebar's search is the page's free-text search: the list sends it as_search(server-side, paged), and@searchhands the term to the facet counts, so the counts still follow the search._searchand remounts the list. An old link with_gf_searchis carried over to_search. The list is not remounted when the facet counts change the narrowing ids (the self-fetch list watches itsfilterprop), so the sidebar search keeps its focus._ids(new helperlistNarrowingFilter). On this data set no module has GEMMA links, so the facets are empty. A facet that matches more than ~170 modules would still hit the 414; that needs a server-side narrowing in OpenRegister and is out of scope here.Checks
npx jest187 passed (3 new forlistNarrowingFilter), hydra gates (local, diff scope) 58 of 58 applicable passed,node tests/validate-manifest.jsPASS, eslint 0 errors on the changed files,npm run buildOK. Rig check pending: the WOO-586 rig was stopped before the overlay could be tested.Jira: WOO-586 — plan: https://github.com/ConductionNL/readonly-mirror-wilco-claude-plans/tree/dev-mirror/issues/jira/WOO-586/
🤖 Generated with Claude Code