From 7a77f975dfe8a983ef175fa207bcd2e37e2cfa2f Mon Sep 17 00:00:00 2001 From: Yevhen Husak Date: Sat, 4 Apr 2026 16:53:06 +0100 Subject: [PATCH] fix: bridge SSR payload mismatch between search providers - Centralize `?p` query param merge into `useSearchProvider()` - Remove duplicated `searchProviderValue` computed from all consumers - Add `bridgeSearchSSRPayload()` to copy SSR cache to client's provider key during hydration - Destructure asyncData before spreading to avoid shadowing custom `data` ref - Update e2e tests for org suggestion cards in keyboard navigation --- .../SearchProviderToggle.client.vue | 19 +- app/composables/npm/search-utils.ts | 27 ++ app/composables/npm/useOrgPackages.ts | 14 +- app/composables/npm/useSearch.ts | 8 +- app/composables/npm/useUserPackages.ts | 26 +- app/composables/useGlobalSearch.ts | 8 +- app/composables/useSettings.ts | 8 +- test/e2e/interactions.spec.ts | 41 ++- test/fixtures/npm-registry/search/@vue.json | 276 ++++++++++++++++++ 9 files changed, 376 insertions(+), 51 deletions(-) create mode 100644 test/fixtures/npm-registry/search/@vue.json diff --git a/app/components/SearchProviderToggle.client.vue b/app/components/SearchProviderToggle.client.vue index 4a9033dd24..a3d1589721 100644 --- a/app/components/SearchProviderToggle.client.vue +++ b/app/components/SearchProviderToggle.client.vue @@ -2,11 +2,6 @@ const route = useRoute() const router = useRouter() const { searchProvider } = useSearchProvider() -const searchProviderValue = computed(() => { - const p = normalizeSearchParam(route.query.p) - if (p === 'npm' || searchProvider.value === 'npm') return 'npm' - return 'algolia' -}) const isOpen = shallowRef(false) const toggleRef = useTemplateRef('toggleRef') @@ -54,7 +49,7 @@ useEventListener('keydown', event => { type="button" role="menuitem" class="w-full flex items-start gap-3 px-3 py-2.5 rounded-md text-start transition-colors hover:bg-bg-muted" - :class="[searchProviderValue !== 'algolia' ? 'bg-bg-muted' : '']" + :class="[searchProvider !== 'algolia' ? 'bg-bg-muted' : '']" @click=" () => { searchProvider = 'npm' @@ -65,13 +60,13 @@ useEventListener('keydown', event => { >