From 9f257b56681abd39e8a9453758132bfa3606964e Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Tue, 27 Apr 2021 15:00:09 +0200 Subject: [PATCH] fix(algolia): avoid creating multiple algolia searches Workaround until a destroy method is added More at https://github.com/algolia/docsearch-configs/pull/3967#issuecomment-827565200 --- src/client/theme-default/Layout.vue | 1 - .../components/AlgoliaSearchBox.vue | 32 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/client/theme-default/Layout.vue b/src/client/theme-default/Layout.vue index 0421c4b2..d0d5457c 100644 --- a/src/client/theme-default/Layout.vue +++ b/src/client/theme-default/Layout.vue @@ -7,7 +7,6 @@ v-if="theme.algolia" :options="theme.algolia" :multilang="!!theme.locales" - :key="siteRouteData.lang" /> diff --git a/src/client/theme-default/components/AlgoliaSearchBox.vue b/src/client/theme-default/components/AlgoliaSearchBox.vue index 8b7af040..09ab1726 100644 --- a/src/client/theme-default/components/AlgoliaSearchBox.vue +++ b/src/client/theme-default/components/AlgoliaSearchBox.vue @@ -57,13 +57,29 @@ function update(options: any) { } } -function initialize(userOptions: any) { - // if the user has multiple locales, the search results should be filtered - // based on the language - const facetFilters = props.multilang - ? ['language:' + siteData.value.lang] - : [] +// if the user has multiple locales, the search results should be filtered +// based on the language +const facetFilters: string[] = props.multilang + ? ['language:' + siteData.value.lang] + : [] + +if (props.options.searchParameters?.facetFilters) { + facetFilters.push(...props.options.searchParameters.facetFilters) +} +watch( + () => siteData.value.lang, + (newLang, oldLang) => { + const index = facetFilters.findIndex( + (filter) => filter === 'language:' + oldLang + ) + if (index > -1) { + facetFilters.splice(index, 1, 'language:' + newLang) + } + } +) + +function initialize(userOptions: any) { docsearch( Object.assign({}, userOptions, { container: '#docsearch', @@ -71,9 +87,7 @@ function initialize(userOptions: any) { searchParameters: Object.assign({}, userOptions.searchParameters, { // pass a custom lang facetFilter to allow multiple language search // https://github.com/algolia/docsearch-configs/pull/3942 - facetFilters: facetFilters.concat( - userOptions.searchParameters?.facetFilters || [] - ) + facetFilters }), navigator: {