{"id":"69d415109f23152e64341dcc","title":"2026 04 06 Issue 224","path":"how-to/committee/release-notes/2026-04-06-issue-224","contentMarkdown":"# 06-Apr-2026 — respect user's view toggle on mobile and clear expanded state on table switch [#224](https://github.com/nbarrett/ngx-ramblers/issues/224)\n\n## [build 579](https://github.com/nbarrett/ngx-ramblers/actions/runs/24048805738) — [commit 00e8193](https://github.com/nbarrett/ngx-ramblers/commit/00e81932b12597e50be965ebbaa92249a2c4dbf4)\n\n_____\n\n### Fixes directly related to this Issue\n\n* `resetQueryDrivenState()` was ignoring the user's localStorage preference and\nalways resetting to the group config default (CARDS). When queryParamMap\nre-emitted (orientation change, soft reload, navigation events), the user's\nexplicit Table view selection was overridden. Now reads from localStorage first,\nmatching the pattern already used in the systemConfigService subscription.\n\n* Also adds `role=\"button\"` to dropdown `<a>` elements for reliable touch interaction\non mobile browsers (Samsung Internet, older WebViews) where `<a>` without `href`\nmay not fire click events.\n\n* Clears expandedWalks when switching to table view so that a walk expanded in\ncards view does not carry over its expanded state into the table layout.\n\n### Additional fixes to improve advanced search queries during  criteria adjustment and preservation during screen refresh\n\n* Fix replaceQueryParams in both events-full and walk-search to read the actual\ncurrent URL before merging, instead of relying on the stale Angular router\nsnapshot. The old approach used queryParamsHandling:\"merge\" which merged with\nroute.snapshot.queryParams — but location.replaceState never updated that\nsnapshot, so successive calls lost params set by earlier calls.\n\n* Make queryParamMap subscription the primary search trigger on init, removing\nthe unreliable setTimeout fallback that could race with query param processing.\nAdvanced search changes now always fire performServerSideSearch directly from\nonAdvancedSearch, and walk-search always writes advanced criteria to query\nparams (setting queryParamsActive=true on any change).\n\n* When the server returns zero results for a page beyond range but pagination\ntotal indicates matching documents exist, reset to page 1 and re-fetch rather\nthan displaying empty results with stale pagination.\n\n### Advanced search UX improvements\n* Add \"X of Y selected\" counts to all advanced search multiselect labels:\nWalk Leaders, Groups, Day of the Week, Difficulty, Accessibility, Facilities.","contentHtml":"<h1>06-Apr-2026 — respect user&#39;s view toggle on mobile and clear expanded state on table switch <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/224\">#224</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/24048805738\">build 579</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/00e81932b12597e50be965ebbaa92249a2c4dbf4\">commit 00e8193</a></h2>\n<hr>\n<h3>Fixes directly related to this Issue</h3>\n<ul>\n<li><p><code>resetQueryDrivenState()</code> was ignoring the user&#39;s localStorage preference and\nalways resetting to the group config default (CARDS). When queryParamMap\nre-emitted (orientation change, soft reload, navigation events), the user&#39;s\nexplicit Table view selection was overridden. Now reads from localStorage first,\nmatching the pattern already used in the systemConfigService subscription.</p>\n</li>\n<li><p>Also adds <code>role=&quot;button&quot;</code> to dropdown <code>&lt;a&gt;</code> elements for reliable touch interaction\non mobile browsers (Samsung Internet, older WebViews) where <code>&lt;a&gt;</code> without <code>href</code>\nmay not fire click events.</p>\n</li>\n<li><p>Clears expandedWalks when switching to table view so that a walk expanded in\ncards view does not carry over its expanded state into the table layout.</p>\n</li>\n</ul>\n<h3>Additional fixes to improve advanced search queries during  criteria adjustment and preservation during screen refresh</h3>\n<ul>\n<li><p>Fix replaceQueryParams in both events-full and walk-search to read the actual\ncurrent URL before merging, instead of relying on the stale Angular router\nsnapshot. The old approach used queryParamsHandling:&quot;merge&quot; which merged with\nroute.snapshot.queryParams — but location.replaceState never updated that\nsnapshot, so successive calls lost params set by earlier calls.</p>\n</li>\n<li><p>Make queryParamMap subscription the primary search trigger on init, removing\nthe unreliable setTimeout fallback that could race with query param processing.\nAdvanced search changes now always fire performServerSideSearch directly from\nonAdvancedSearch, and walk-search always writes advanced criteria to query\nparams (setting queryParamsActive=true on any change).</p>\n</li>\n<li><p>When the server returns zero results for a page beyond range but pagination\ntotal indicates matching documents exist, reset to page 1 and re-fetch rather\nthan displaying empty results with stale pagination.</p>\n</li>\n</ul>\n<h3>Advanced search UX improvements</h3>\n<ul>\n<li>Add &quot;X of Y selected&quot; counts to all advanced search multiselect labels:\nWalk Leaders, Groups, Day of the Week, Difficulty, Accessibility, Facilities.</li>\n</ul>\n"}