{"version":3,"mappings":"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","names":["store","useStore","fischer","useFischer","sendClickToEventHub","useEventHub","isFiteApp","props","__props","emits","__emit","categorySlug","computed","onClick","event","breadcrumb","item","eventQuery","isLG","useBreakpoints","isSliderActive","ref","isMounted","categorySlider","onMounted","windowDimensions","setSlider","slidesWidth","s","watch","shortenText","text","lead","shortLead","escapeChars","unescaped","char","_sfc_main","ArrowIcon","IconAttributeItemFi","SsrCloudImageFi","catalogMixin","catalogAttributesMixin","priceCurrencyMixin","eventHubMixin","_b","_a","ProductId","ProductName","Slug","imageUrl","ProductPrice","ProductPriceCurrency","Attributes","bestPrice","variant","_c","href","markedText","pageSize","clickSource","query","attachBreadcrumb","escapedText","words","x","regexSafeWords","word","wordsRegex","_hoisted_1","_hoisted_3","_hoisted_6","_hoisted_9","_hoisted_10","_hoisted_13","_hoisted_14","_hoisted_16","_createElementBlock","_normalizeClass","_ctx","_createElementVNode","$options","args","$props","_openBlock","_hoisted_2","_toDisplayString","_createCommentVNode","_createBlock","_component_ssr_cloud_image_fi","$setup","_hoisted_4","_hoisted_5","_hoisted_7","_Fragment","_component_icon_attribute_item_fi","_hoisted_8","_createTextVNode","_hoisted_11","_hoisted_12","_hoisted_15","_hoisted_17","_createVNode","_component_arrow_icon","NoProductsFoundFi","defineAsyncComponent","__vitePreload","RichtextFi","TextInputFi","_component_no_products_found_fi","_component_text_input_fi","$data","_cache","$event","_component_richtext_fi","getSearchQuery","SEARCH_FACT_FINDER_NG_WEBSITE","SEARCH_FACT_FINDER_NG","updateSearchFactFinderNg","data","FacetsMenuFi","FactFinderCategories","FactFinderFacetFi","FactFinderItemFi","FactFinderNoResultsFi","GridContainerFi","InfiniteLoading","LoadingIndicator","PaginationProgressBar","breakpointMixin","multiBestPriceMixin","autoFiltersMixin","trackingMixin","localizedValueMixin","mapGetters","ids","id","count","categoryFacetElements","facet","a","b","currentFacets","firstMaster","_g","_f","_e","_d","firstHitPath","_i","_h","filter","selected","mergedFacets","mergeFacets","autoFilter","element","search","tab","otherFiltersStart","key","value","prefix","stringifyFilterValue","searchString","extraFilters","toFilterInput","pageParam","page","previous","newValue","masterFilters","getEventHubSessionId","loaded","trackingList","hit","category","_event","toggleOpen","record","name","factFinderNgNameCleaner","technicalFacetsLowerCase","technicalFacets","filters","searchRegExp","match","nameLowerCase","values","queryParam","complete","result","categoryData","changes","state","customQuery","filterKeys","el","obj","_renderSlot","_component_grid_container_fi","_withCtx","_component_fact_finder_categories","_component_facets_menu_fi","open","change","close","idx","registerDomElement","_component_fact_finder_facet_fi","_component_fact_finder_no_results_fi","_component_loading_indicator","_renderList","recordIdx","_component_fact_finder_item_fi","_component_infinite_loading","_component_pagination_progress_bar","_hoisted_18","_hoisted_19"],"ignoreList":[],"sources":["../../src/components/search-fact-finder-fi/fact-finder-categories/CategoryItemFi.vue","../../src/components/search-fact-finder-fi/fact-finder-categories/FactFinderCategories.vue","../../src/components/search-fact-finder-fi/fact-finder-item-fi/FactFinderItemFi.vue","../../src/components/search-fact-finder-fi/fact-finder-no-results-fi/FactFinderNoResultsFi.vue","../../src/components/search-fact-finder-fi/SearchFactFinderFi.vue"],"sourcesContent":["<template>\n <component\n :is=\"isFiteApp ? 'radio' : 'a'\"\n :id=\"isFiteApp ? `category_${category.id}` : null\"\n :href=\"categorySlug\"\n :class=\"{\n 'category-item-fi': true,\n 'category-item-fi--disabled': !category.enabled,\n 'category-item-fi--fite': isFiteApp,\n 'category-item-fi--selected': category.selected,\n }\"\n :checked=\"isFiteApp && category.enabled\"\n data-test=\"search-result-category\"\n @click.capture.stop=\"onClick\"\n >\n <ssr-cloud-image-fi\n v-if=\"isFiteApp\"\n class=\"category-item-fi__img\"\n :src=\"category.imageUrl\"\n :breakpoints=\"[\n {\n mediaWidth: 1024,\n imageWidth: 422,\n },\n ]\"\n :unlimited=\"353\"\n :aspect-ratio=\"16 / 9\"\n />\n <component\n :is=\"isFiteApp ? 'label' : 'span'\"\n :for=\"isFiteApp ? `category_${category.id}` : null\"\n class=\"category-item-fi__category\"\n data-test=\"search-result-category-name\"\n :class=\"{\n 'category-item-fi__category--selected': category.selected,\n 'category-item-fi__category--disabled': !category.enabled,\n }\"\n >\n {{ category.name }}\n </component>\n <icon-fi\n v-if=\"isFiteApp\"\n :icon=\"category.selected ? 'radio-btn-on' : 'radio-btn-off'\"\n :class=\"{\n 'category-item-fi__checkbox': true,\n 'category-item-fi__checkbox--selected': category.selected,\n 'category-item-fi__checkbox--disabled': !category.enabled,\n }\"\n />\n <div\n v-else\n class=\"category-item-fi__icon\"\n >\n <arrow-icon />\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type { BreadCrumbItem } from 'atoms/breadcrumb-fi/BreadcrumbFi.vue';\nimport { ArrowIcon, IconFi, SsrCloudImageFi } from 'atoms/index';\nimport { useEventHub } from 'composables/eventHub';\nimport { useFischer } from 'composables/fischerPlugin';\nimport { computed } from 'vue';\nimport { useStore } from 'vuex';\n\nimport type { Category } from './FactFinderCategories.vue';\n\nconst store = useStore();\nconst fischer = useFischer();\nconst { sendClickToEventHub } = useEventHub();\nconst isFiteApp = fischer.app.isFite();\n\nconst props = defineProps<{\n category: Category;\n filterUrlParams: string;\n}>();\n\nconst emits = defineEmits<{\n toggle: [value: boolean];\n}>();\n\nconst categorySlug = computed<string | undefined>(() => {\n if (!props.category.enabled || isFiteApp) {\n return undefined;\n }\n const products = fischer.pages.products().url;\n return `${products}${props.category.Slug}${props.filterUrlParams}`;\n});\n\nconst onClick = (event: MouseEvent) => {\n if (!props.category.enabled || event.detail === 2) {\n return;\n }\n if (isFiteApp) {\n event.preventDefault();\n emits('toggle', !props.category.selected);\n return;\n }\n if (!categorySlug.value) {\n console.error('missing category slug');\n return;\n }\n const productBreadcrumb = store.getters['navigation/productBreadcrumb'];\n const breadcrumb = productBreadcrumb.map((item: BreadCrumbItem) => item.title);\n breadcrumb.unshift('[category]:');\n breadcrumb.push(props.category.name);\n const eventQuery = breadcrumb.join('/');\n sendClickToEventHub(\n {\n clickSource: 'category',\n familyId: props.category.id,\n pageTitle: props.category.name,\n query: eventQuery,\n url: window.location.href,\n },\n event,\n categorySlug.value,\n );\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import './category-item-fi';\n</style>\n","<template>\n <div\n :class=\"{\n 'fact-finder-categories': true,\n 'fact-finder-categories--is-slider': isSliderActive,\n }\"\n >\n <div class=\"fact-finder-categories__label\">\n {{ $dict.get('product-List.Facets.Categories.Label') }}\n </div>\n <div\n v-if=\"isMounted\"\n class=\"md:fi-hidden\"\n >\n <splide\n :options=\"{\n drag: 'free',\n snap: true,\n padding: '18px',\n arrows: false,\n autoWidth: true,\n }\"\n >\n <splide-slide\n v-for=\"category in categories\"\n :key=\"category.id\"\n ref=\"categorySlider\"\n :class=\"{\n 'fact-finder-categories__slide': true,\n 'fact-finder-categories__slide--fite': isFiteApp,\n }\"\n >\n <category-item-fi\n :category=\"category\"\n :filter-url-params=\"filterUrlParams\"\n @toggle=\"$emit('toggle', category, $event)\"\n />\n </splide-slide>\n </splide>\n </div>\n <div\n :class=\"{\n 'fact-finder-categories__flex': true,\n 'fact-finder-categories__flex--ssr': !isMounted,\n 'fact-finder-categories__flex--fite': isFiteApp,\n }\"\n >\n <category-item-fi\n v-for=\"category in categories\"\n :key=\"category.id\"\n :category=\"category\"\n :filter-url-params=\"filterUrlParams\"\n @toggle=\"$emit('toggle', category, $event)\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Splide, SplideSlide } from '@splidejs/vue-splide';\nimport { useBreakpoints } from 'composables/breakpoint';\nimport { useFischer } from 'composables/fischerPlugin';\nimport { computed, onMounted, ref, watch } from 'vue';\nimport { useStore } from 'vuex';\n\nimport CategoryItemFi from './CategoryItemFi.vue';\n\nexport interface Category {\n id: string;\n name: string;\n enabled: boolean;\n Slug: string;\n imageUrl?: string;\n selected: boolean;\n}\n\ndefineEmits<{\n toggle: [value: Category, enabled: boolean];\n}>();\n\nwithDefaults(\n defineProps<{\n categories: Array<Category>;\n filterUrlParams: string;\n }>(),\n {\n categories: () => [],\n filterUrlParams: '',\n },\n);\n\nconst store = useStore();\nconst { isLG } = useBreakpoints();\nconst fischer = useFischer();\nconst isFiteApp = fischer.app.isFite();\n\nconst isSliderActive = ref(false);\nconst isMounted = ref(false);\nconst categorySlider = ref<InstanceType<typeof SplideSlide> | null>(null);\n\nonMounted(() => {\n isMounted.value = true;\n});\n\nconst windowDimensions = computed(() => store.getters['layout/getWindowDimensions']);\n\nconst setSlider = (): void => {\n if (!categorySlider.value || IS_SSR) {\n return;\n }\n\n let slidesWidth = 0;\n categorySlider.value.$el\n .querySelectorAll('.fact-finder-categories__item')\n .forEach((s: HTMLElement) => {\n slidesWidth += s.offsetWidth;\n });\n\n isSliderActive.value = !isLG.value && slidesWidth > categorySlider.value.$el.offsetWidth;\n};\n\nwatch(windowDimensions, () => setSlider, {\n deep: true,\n immediate: true,\n});\n</script>\n\n<style scoped lang=\"scss\">\n@import './fact-finder-categories';\n</style>\n\n<style lang=\"scss\">\n@import './fact-finder-categories-unscoped';\n</style>\n","<template>\n <div\n :class=\"{\n 'fact-finder-item': true,\n 'fact-finder-item--fite': isFite,\n }\"\n >\n <a\n class=\"fact-finder-item__tile\"\n data-test=\"search-result-item\"\n :href=\"href\"\n @click=\"onClick\"\n >\n <div\n v-if=\"bestPrice?.price?.savingsInformation\"\n class=\"fact-finder-item__savings\"\n >\n {{\n $dict.get('online-Shop.Product.Savings', [\n bestPrice.price.savingsInformation.savingsInPercent,\n ])\n }}\n </div>\n <ssr-cloud-image-fi\n v-if=\"imageUrl\"\n :src=\"imageUrl\"\n :aspect-ratio=\"1\"\n :unlimited=\"248\"\n :breakpoints=\"breakpoints\"\n :alt=\"itemName\"\n class=\"fact-finder-item__image\"\n params=\"func=fit\"\n trim\n do-not-replace-url\n />\n\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"fact-finder-item__name\"\n data-test=\"search-result-item-name\"\n v-html=\"highlightName\"\n />\n <!-- eslint-enable vue/no-v-html -->\n <div\n v-if=\"isProduct\"\n class=\"fact-finder-item__article-nr\"\n data-test=\"article-number\"\n >\n {{ $dict.get('product-List.Table.Article-Number') }}\n {{ variant.ID }}\n </div>\n\n <div\n v-if=\"isFamily\"\n :class=\"{\n 'fact-finder-item__family': true,\n 'fact-finder-item__family--has-description': showDescription,\n }\"\n >\n <div\n v-if=\"showDescription\"\n class=\"fact-finder-item__description\"\n >\n {{ record.masterValuesObject.catalogCategoryData.MarketingClaim }}\n </div>\n\n <div\n v-if=\"record.variantCount\"\n :cat-id=\"variant.CategoryPathId\"\n class=\"fact-finder-item__family-variants\"\n data-test=\"search-result-item-variants-count\"\n >\n {{\n $dict.get(\n record.variantCount === 1 ? 'search.Variants-Singular' : 'search.Variants-Plural',\n [record.variantCount],\n )\n }}\n </div>\n </div>\n <div\n v-else-if=\"isProduct\"\n class=\"fact-finder-item__product-info\"\n >\n <template v-if=\"isFite\">\n <icon-attribute-item-fi\n v-if=\"attributeValue(variant.Attributes, 'ALTER_AB')\"\n class=\"fact-finder-item__recommended-age\"\n icon=\"age\"\n :size=\"1\"\n :value=\"attributeValue(variant.Attributes, 'ALTER_AB')\"\n :label=\"attributeName(variant.Attributes, 'ALTER_AB')\"\n />\n <div\n v-if=\"variant.ProductPrice\"\n class=\"fact-finder-item__uvp-price\"\n >\n <div class=\"fact-finder-item__uvp-price-value\">\n <template v-if=\"uvpPricePrefix\">\n {{\n `${uvpPricePrefix} ${formatPrice(\n variant.ProductPrice,\n variant.ProductPriceCurrency,\n )}`\n }}\n </template>\n <template v-else>\n {{ formatPrice(variant.ProductPrice, variant.ProductPriceCurrency) }}\n </template>\n </div>\n <div class=\"fact-finder-item__uvp-price-vat\">\n {{ $dict.get('online-Shop.Product.Vat-included') }}\n </div>\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"bestPrice\"\n class=\"fact-finder-item__best-price\"\n >\n <div>\n <span\n v-if=\"bestPrice.price.savingsInformation\"\n class=\"fact-finder-item__stroke-price\"\n >\n {{ bestPrice.price.savingsInformation.totalStrokePriceValueFormatted }}\n </span>\n <span class=\"fact-finder-item__best-price-value\">\n {{ bestPrice.price.valueFormatted }}\n </span>\n </div>\n <div class=\"fact-finder-item__best-price-vat\">\n {{ $dict.get('online-Shop.Product.Vat-excluded') }}\n </div>\n </div>\n </template>\n </div>\n <div\n v-else-if=\"isPage\"\n class=\"fact-finder-item__page\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <div\n class=\"fact-finder-item__texts\"\n v-html=\"highlightText\"\n />\n <!-- eslint-enable vue/no-v-html -->\n <div\n v-if=\"record.variantValuesObject[0].CategoryPathName?.[0]\"\n class=\"fact-finder-item__path\"\n >\n {{\n $dict.get('search.Found-In', [\n record.variantValuesObject[0].CategoryPathName[0].join(' | '),\n ])\n }}\n </div>\n <arrow-icon class=\"fact-finder-item__arrow\" />\n </div>\n </a>\n </div>\n</template>\n\n<script>\nimport { ArrowIcon, IconAttributeItemFi, SsrCloudImageFi } from 'atoms';\nimport catalogAttributesMixin from 'mixins/catalogAttributesMixin';\nimport catalogMixin from 'mixins/catalogMixin';\nimport eventHubMixin from 'mixins/eventHubMixin';\nimport priceCurrencyMixin from 'mixins/priceCurrencyMixin';\n\nconst shortenText = (text) =>\n text.replace(/^[^<]+</, (lead) => {\n const shortLead = / [^ ]{0,15}.{15}$/.exec(lead);\n return shortLead ? `...${shortLead[0]}` : lead;\n });\n\nconst escapeChars = (unescaped) =>\n (unescaped || '').replace(/[<>&]/g, (char) => `&#${char.charCodeAt(0)};`);\n\nexport default {\n name: 'FactFinderItem',\n components: {\n ArrowIcon,\n IconAttributeItemFi,\n SsrCloudImageFi,\n },\n mixins: [catalogMixin, catalogAttributesMixin, priceCurrencyMixin, eventHubMixin],\n inject: ['getSearchData'],\n props: {\n record: {\n type: Object,\n required: true,\n },\n bestPrice: {\n type: Object,\n default: null,\n },\n filterUrl: {\n type: String,\n default: '',\n },\n showDescription: {\n type: Boolean,\n default: false,\n },\n type: {\n type: String,\n required: true,\n },\n recordIdx: {\n type: Number,\n required: true,\n },\n },\n setup() {\n return {\n breakpoints: [\n {\n mediaWidth: 369,\n imageWidth: 285,\n },\n {\n mediaWidth: 479,\n imageWidth: 395,\n },\n {\n mediaWidth: 767,\n imageWidth: 318,\n },\n ],\n };\n },\n computed: {\n variant() {\n if (this.record.masterValuesObject?.masterProductData?.catalogProductData) {\n const {\n ProductId,\n ProductName,\n Slug,\n imageUrl,\n ProductPrice,\n ProductPriceCurrency,\n Attributes,\n } = this.record.masterValuesObject.masterProductData.catalogProductData;\n\n const { bestPrice } = this.record.masterValuesObject.masterProductData;\n\n return {\n ID: ProductId,\n Name: ProductName,\n ImageURL: imageUrl,\n Slug,\n bestPrice,\n ProductPrice,\n ProductPriceCurrency,\n Attributes,\n };\n }\n\n const variant = this.record.variantValuesObject?.[0];\n if (!variant) {\n if (this.type !== 'family') {\n console.error('record missing variant', this.record, this.type);\n }\n return {};\n }\n return variant;\n },\n imageUrl() {\n if (this.isFamily) {\n if (this.record.masterValuesObject.catalogCategoryData?.imageUrl) {\n return this.record.masterValuesObject.catalogCategoryData.imageUrl;\n }\n }\n\n if (this.isProduct) {\n return this.variant.ImageURL;\n }\n return null;\n },\n href() {\n const href = [];\n if (this.isFamily || this.isProduct) {\n href.push(this.$fischer.pages.products().url);\n }\n if (this.isFamily) {\n href.push(this.record.masterValuesObject.catalogCategoryData.Slug, this.filterUrl);\n } else {\n href.push(this.variant.Slug);\n }\n return href.join('');\n },\n highlightText() {\n const markedText = this.markText(this.record.variantValuesObject[0].Texts);\n return shortenText(markedText);\n },\n itemName() {\n if (this.isFamily) {\n return (\n this.record.masterValuesObject.catalogCategoryData?.CategoryName ||\n (this.record.masterValuesObject.catalogProductData &&\n this.record.masterValuesObject.masterProductData.catalogProductData.CategoryName)\n );\n }\n return this.record.Name || this.variant.Name || '';\n },\n highlightName() {\n if (!this.isPage) {\n return escapeChars(this.itemName);\n }\n\n return this.markText(this.itemName);\n },\n isProduct() {\n return (\n this.type === 'product' ||\n Boolean(this.record.masterValuesObject?.masterProductData?.catalogProductData)\n );\n },\n isFamily() {\n return this.type === 'family' && !this.isProduct;\n },\n isPage() {\n return this.type === 'page';\n },\n uvpPricePrefix() {\n return this.$dict.get('online-Shop.Product.UVP-Price-Prefix');\n },\n },\n methods: {\n onClick(event) {\n const { pageSize, clickSource, query, attachBreadcrumb } = this.getSearchData();\n let eventQuery;\n if (attachBreadcrumb) {\n const productBreadcrumb = this.$store.getters['navigation/productBreadcrumb'];\n const breadcrumb = productBreadcrumb.map((item) => item.title);\n breadcrumb.unshift(query);\n breadcrumb.push(this.itemName);\n eventQuery = breadcrumb.join('/');\n } else {\n eventQuery = query;\n }\n this.sendClickToEventHub(\n {\n clickSource,\n familyId: this.isFamily ? this.record.idString : undefined,\n page: Math.floor(pageSize / this.recordIdx),\n pageSize,\n pageTitle: this.itemName,\n position: this.recordIdx + 1,\n productId: this.isProduct ? this.variant.ID : undefined,\n productTitle: this.isProduct ? this.itemName : null,\n query: eventQuery,\n score: this.record.score,\n },\n event,\n this.href,\n );\n },\n markText(text = '') {\n const escapedText = escapeChars(text);\n\n const query = this.$store.getters['search/getQuery'];\n const words = escapeChars(query)\n .split(' ')\n .filter((x) => x.length > 2);\n if (!words.length) {\n return escapedText;\n }\n\n const regexSafeWords = words.map((word) =>\n // eslint-disable-next-line no-useless-escape\n word.replace(/[\\[\\\\^$.|?*+()]/g, ([char]) => `\\\\${char}`),\n );\n const wordsRegex = new RegExp(regexSafeWords.join('|'), 'gi');\n const markedText = escapedText.replace(wordsRegex, (word) => `<mark>${word}</mark>`);\n\n return markedText;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import './fact-finder-item-fi';\n</style>\n","<template>\n <div\n v-if=\"isCategory\"\n class=\"fi-mt-48\"\n >\n <no-products-found-fi />\n </div>\n <div\n v-else\n class=\"fact-finder-no-results-fi\"\n >\n <div\n v-if=\"noFilters\"\n class=\"fact-finder-no-results-fi__search\"\n :class=\"{ 'fact-finder-no-results-fi__search-full': showResultSuggestion }\"\n >\n <text-input-fi\n v-model.trim=\"search\"\n :placeholder=\"$dict.get('search.No-Results.Placeholder')\"\n icon=\"search\"\n class=\"fact-finder-no-results-fi__input\"\n @keyup-enter=\"newSearch\"\n @icon-clicked=\"newSearch\"\n />\n </div>\n <div\n v-if=\"!showResultSuggestion\"\n :class=\"{\n 'fact-finder-no-results-fi__content': true,\n 'fact-finder-no-results-fi__content--no-filters': noFilters,\n }\"\n >\n <richtext-fi\n class=\"fact-finder-no-results-fi__suggestions\"\n :html-content=\"fields.noResultsSuggestions\"\n />\n </div>\n </div>\n</template>\n\n<script>\nimport { RichtextFi, TextInputFi } from 'atoms';\nimport { defineAsyncComponent } from 'vue';\n\nconst NoProductsFoundFi = defineAsyncComponent(\n () => import('components/shop-modules/product-list-view/NoProductsFoundFi.vue'),\n);\n\nexport default {\n name: 'FactFinderNoResultsFi',\n components: {\n NoProductsFoundFi,\n RichtextFi,\n TextInputFi,\n },\n props: {\n fields: {\n type: Object,\n required: true,\n },\n query: {\n type: String,\n required: true,\n },\n noFilters: {\n type: Boolean,\n },\n showResultSuggestion: {\n type: Boolean,\n },\n isCategory: Boolean,\n },\n emits: ['new-search'],\n data() {\n return {\n search: '',\n };\n },\n methods: {\n newSearch() {\n this.$emit('new-search', this.search);\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './fact-finder-no-results-fi-unscoped';\n</style>\n\n<style scoped lang=\"scss\">\n@import './fact-finder-no-results-fi';\n</style>\n","<template>\n <div\n :class=\"{\n 'search-fact-finder-fi': true,\n 'search-fact-finder-fi--website': isWebsiteSearch,\n 'search-fact-finder-fi--fite': isFite,\n }\"\n >\n <div\n v-if=\"!searchFactFinderNg.initializing || skipSearch\"\n class=\"search-fact-finder-fi__results\"\n >\n <slot\n :search-fact-finder-ng=\"searchFactFinderNg\"\n :skip-search=\"skipSearch\"\n name=\"heading\"\n />\n\n <grid-container-fi\n :container=\"false\"\n container-sm\n class=\"search-fact-finder-fi__results__filter-container\"\n >\n <div\n v-if=\"!isSearchPage && categories.length\"\n class=\"search-fact-finder-fi__results__filter search-fact-finder-fi__results__filter--categories\"\n >\n <fact-finder-categories\n :categories=\"categories\"\n :filter-url-params=\"filterUrlParams\"\n @toggle=\"onToggleCategory\"\n />\n </div>\n <div\n v-if=\"menuFacets.length && !showNoQueryHint && !skipSearch\"\n class=\"search-fact-finder-fi__results__filter search-fact-finder-fi__results__filter--facets\"\n >\n <facets-menu-fi\n :facets=\"menuFacets\"\n :allow-clear-all=\"!autoFilters\"\n @change=\"changeFacet\"\n @clear-all-facets=\"clearAllFacets\"\n >\n <template #facets=\"{ facet, open, change, close, toggleOpen, idx, registerDomElement }\">\n <fact-finder-facet-fi\n :facet=\"facet\"\n :open=\"open\"\n :idx=\"idx\"\n :register-dom-element=\"registerDomElement\"\n @change=\"change\"\n @toggle-open=\"onToggleOpen($event, toggleOpen, facet)\"\n @close=\"close(facet)\"\n />\n </template>\n <template #selection=\"{ facet, element }\">\n {{ cleanName(facet.name) }}:\n <span\n v-if=\"facet.type === 'FLOAT' || facet.type === 'INTEGER'\"\n class=\"facets-selection-fi__value\"\n >\n {{ getLocalizedValue(element.selectedMinValue) }}\n [{{ facet.unit }}] -\n {{ getLocalizedValue(element.selectedMaxValue) }}\n [{{ facet.unit }}]\n </span>\n <span\n v-else\n class=\"facets-selection-fi__value\"\n >\n {{ element.text }}\n </span>\n </template>\n </facets-menu-fi>\n </div>\n </grid-container-fi>\n\n <grid-container-fi :container=\"(searchFactFinderNg?.totalHits || 0) === 0 || skipSearch\">\n <div\n v-if=\"showNoQueryHint\"\n class=\"search-fact-finder-fi__show-no-query-hint\"\n :class=\"{ 'search-fact-finder-fi__show-no-query-hint-no-filters': !noFilters }\"\n >\n <grid-container-fi>\n <div class=\"search-fact-finder-fi__query\">\n {{ $dict.get('search.Fact-Finder.No-Search-Result.Heading') }}\n </div>\n </grid-container-fi>\n\n <fact-finder-no-results-fi\n :query=\"searchFactFinderNg.query\"\n :fields=\"fields\"\n :no-filters=\"noFilters\"\n :show-result-suggestion=\"true\"\n :is-category=\"isCategory\"\n @new-search=\"newSearch\"\n />\n </div>\n <div\n v-else-if=\"(searchFactFinderNg?.totalHits || 0) === 0 || skipSearch\"\n :class=\"{\n 'fi-col-start-1': true,\n 'fi-col-end-13': true,\n 'sm:fi-col-start-3': true,\n 'sm:fi-col-end-11': true,\n 'lg:fi-col-start-3': noFilters,\n 'lg:fi-col-end-11': noFilters,\n 'lg:fi-col-start-5': !noFilters,\n 'lg:fi-col-end-9': !noFilters,\n }\"\n >\n <fact-finder-no-results-fi\n :query=\"searchFactFinderNg.query\"\n :fields=\"fields\"\n :no-filters=\"noFilters\"\n :is-category=\"isCategory\"\n @new-search=\"newSearch\"\n />\n </div>\n <div\n v-else\n class=\"fi-col-span-full\"\n >\n <div class=\"search-fact-finder-fi__item-wrapper\">\n <loading-indicator\n v-if=\"isCategory && $apollo.loading\"\n variant=\"spinnerLocal\"\n />\n\n <div class=\"search-fact-finder-fi__item-wrapper-inner\">\n <div\n class=\"search-fact-finder-fi__count\"\n data-test=\"fact-finder-count\"\n :data-test-2=\"familiesCount ? familiesCount : null\"\n :data-test-3=\"productsCount ? productsCount : null\"\n >\n <span v-if=\"familiesCount && productsCount\">\n {{\n $dict.get('search.Families-And-Variants-Count', [familiesCount, productsCount])\n }}\n </span>\n <span v-else-if=\"familiesCount\">\n {{ $dict.get('search.Families-Count', [familiesCount]) }}\n </span>\n <span v-else-if=\"productsCount\">\n {{ $dict.get('search.Variants-Count', [productsCount]) }}\n </span>\n </div>\n\n <div class=\"search-fact-finder-fi__items\">\n <template\n v-for=\"(record, recordIdx) in searchFactFinderNg?.masters?.hits\n ? searchFactFinderNg.masters.hits\n : []\"\n :key=\"record?.idString\"\n >\n <fact-finder-item-fi\n v-if=\"record\"\n :record=\"record\"\n :record-idx=\"recordIdx\"\n :filter-url=\"filterUrlParamsNoQuery\"\n :show-description=\"includeClaim\"\n type=\"family\"\n @click=\"masterClicked(record)\"\n />\n </template>\n\n <fact-finder-item-fi\n v-for=\"(record, recordIdx) in variantHits\"\n :key=\"record.variantValuesObject[0].ID\"\n :record=\"record\"\n :record-idx=\"recordIdx + (searchFactFinderNg.masters?.hits?.length || 0)\"\n :best-price=\"getBestPrice(record)\"\n :filter-url=\"filterUrlParamsNoQuery\"\n :show-description=\"includeClaim\"\n :type=\"isWebsiteSearch ? 'page' : 'product'\"\n />\n\n <template v-if=\"!isCategory\">\n <infinite-loading\n v-if=\"infiniteLoadingAvailable && !IS_SSR\"\n ref=\"infiniteLoading\"\n class=\"search-fact-finder-fi__spinner\"\n @infinite=\"fetchMore\"\n >\n <template #spinner>\n <div class=\"search-fact-finder-fi__spinner-tile\">\n <loading-indicator variant=\"spinnerLocal\" />\n </div>\n </template>\n <template #no-more><span /></template>\n <template #no-results><span /></template>\n <template #error><span /></template>\n </infinite-loading>\n\n <div\n v-for=\"(item, idx) in placeholders\"\n :key=\"idx\"\n class=\"search-fact-finder-fi__spinner\"\n >\n <div class=\"search-fact-finder-fi__spinner-tile\" />\n </div>\n </template>\n </div>\n\n <div\n v-if=\"!isCategory\"\n class=\"search-fact-finder-fi__pagination\"\n >\n <a\n v-if=\"previousPageUrlParam\"\n v-show=\"false\"\n :href=\"previousPageUrlParam\"\n >\n {{ $dict.get('search.Previous-Results') }}\n </a>\n <pagination-progress-bar\n v-if=\"searchFactFinderNg?.totalHits\"\n :pagination-page=\"page\"\n :pagination-total=\"totalItems || 0\"\n :progressbar-value=\"pagingPercentage\"\n :disabled-state=\"Boolean($apolloData.loading)\"\n :show-more-button=\"displayedItems < totalItems\"\n :query-params=\"filterUrlParams\"\n @loadmore=\"fetchMore\"\n >\n <template v-if=\"page * pageSize <= totalItems\">\n <span>{{ getPaginationString([page * pageSize, totalItems]) }}</span>\n </template>\n\n <template v-else>\n <span>{{ getPaginationString([totalItems, totalItems]) }}</span>\n </template>\n </pagination-progress-bar>\n </div>\n </div>\n </div>\n </div>\n </grid-container-fi>\n </div>\n <!-- slot: -->\n <slot\n name=\"withResults\"\n :search-fact-finder-ng=\"searchFactFinderNg\"\n />\n <!-- /slot -->\n </div>\n</template>\n\n<script>\nimport { LoadingIndicator, PaginationProgressBar } from 'atoms';\nimport FacetsMenuFi from 'components/facets/facets-menu-fi/FacetsMenuFi';\nimport GridContainerFi from 'components/grid-fi/GridContainerFi';\nimport factFinderNgNameCleaner from 'components/search-fact-finder-fi/factFinderNgNameCleaner';\nimport SEARCH_FACT_FINDER_NG from 'gql/searchFactFinderNg.gql';\nimport SEARCH_FACT_FINDER_NG_WEBSITE from 'gql/searchFactFinderNgWebsite.gql';\nimport InfiniteLoading from 'infinite-loading-vue3-ts';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport eventHubMixin from 'mixins/eventHubMixin';\nimport localizedValueMixin from 'mixins/localizedValueMixin.vue';\nimport multiBestPriceMixin from 'mixins/multiBestPriceMixin';\nimport trackingMixin from 'mixins/trackingMixin';\nimport { mapGetters } from 'vuex';\n\nimport getEventHubSessionId from '@/lib/getEventHubSessionId';\n\nimport autoFiltersMixin from './autoFiltersMixin';\nimport FactFinderCategories from './fact-finder-categories/FactFinderCategories';\nimport FactFinderFacetFi from './fact-finder-facet-fi/FactFinderFacetFi';\nimport FactFinderItemFi from './fact-finder-item-fi/FactFinderItemFi';\nimport FactFinderNoResultsFi from './fact-finder-no-results-fi/FactFinderNoResultsFi';\nimport mergeFacets from './mergeFacets';\nimport stringifyFilterValue from './stringifyFilterValue';\nimport technicalFacets from './technicalFacets';\nimport toFilterInput from './toFilterInput';\n\nfunction getSearchQuery() {\n return this.isWebsiteSearch ? SEARCH_FACT_FINDER_NG_WEBSITE : SEARCH_FACT_FINDER_NG;\n}\n\nfunction updateSearchFactFinderNg(data) {\n return this.isWebsiteSearch ? data.searchFactFinderNgWebsite : data.searchFactFinderNg;\n}\n\nexport default {\n name: 'SearchFactFinderFi',\n components: {\n FacetsMenuFi,\n FactFinderCategories,\n FactFinderFacetFi,\n FactFinderItemFi,\n FactFinderNoResultsFi,\n GridContainerFi,\n InfiniteLoading,\n LoadingIndicator,\n PaginationProgressBar,\n },\n mixins: [\n breakpointMixin,\n multiBestPriceMixin,\n autoFiltersMixin,\n trackingMixin,\n eventHubMixin,\n localizedValueMixin,\n ],\n provide() {\n return {\n getSearchData: () => ({\n query: this.queryPrefix ? this.queryPrefix : this.searchFactFinderNg.query,\n pageSize: this.pageSize,\n attachBreadcrumb: this.attachBreadcrumb,\n clickSource: this.clickSource,\n }),\n };\n },\n props: {\n fields: {\n type: Object,\n default: () => ({}),\n },\n categoryPathIdRoot: {\n type: String,\n default: null,\n },\n clickSource: {\n type: String,\n required: true,\n },\n queryPrefix: {\n type: String,\n default: null,\n },\n isSearchPage: {\n type: Boolean,\n default: false,\n },\n isWebsiteSearch: {\n type: Boolean,\n },\n isActive: Boolean,\n attachBreadcrumb: Boolean,\n },\n emits: ['total-hits'],\n data() {\n return {\n searchFactFinderNg: {\n masters: null,\n variants: null,\n facets: null,\n facetDataUnselected: null,\n query: '',\n totalHits: null,\n initializing: true,\n },\n searchFactFinderNgBaseFacets: {\n facets: null,\n },\n filters: [],\n page: 0,\n pageSize: 15,\n loadMorePage: 0,\n categoryOverride: null,\n };\n },\n computed: {\n ...mapGetters({ suggestionsQuery: 'search/suggestionsQuery' }),\n showNoQueryHint() {\n return this.isSearchPage && this.trimmedQuery === '';\n },\n isSuggestionsOpen() {\n return (\n this.$store.getters['navigation/getShowSearchSuggest'] ||\n this.$store.getters['search/getQueryTrimmed'] !==\n this.$store.getters['search/suggestionsQuery']\n );\n },\n termToTrack() {\n if (!this.isSearchPage || !this.isActive) {\n return null;\n }\n return this.searchFactFinderNg?.query || null;\n },\n productIds() {\n const ids = [];\n if (!this.isWebsiteSearch && this.searchFactFinderNg?.variants?.hits) {\n this.searchFactFinderNg.variants.hits.forEach((variant) => {\n const id = variant.variantValuesObject?.[0].ID;\n if (id) {\n ids.push(id);\n }\n });\n }\n return ids;\n },\n includeClaim() {\n return Boolean(this.fields.showProductDescription?.value);\n },\n isShop() {\n return this.$fischer.shop.isClosedShop() || this.$fischer.shop.isOnlineShop();\n },\n variantHits() {\n if (!this.searchFactFinderNg.variants?.hits) {\n return [];\n }\n return this.searchFactFinderNg.variants.hits;\n },\n typeFilter() {\n if (this.isWebsiteSearch) {\n return 'page';\n }\n return 'product';\n },\n trimmedQuery() {\n if (this.isSearchPage) {\n return this.query.trim() || '';\n }\n\n return this.query.trim() || '*';\n },\n noFilters() {\n return this.filters.length === 0;\n },\n totalItems() {\n if (this.isCategory) {\n return this.searchFactFinderNg?.masters?.totalHits;\n }\n return this.searchFactFinderNg?.totalHits || 0;\n },\n infiniteLoadingAvailable() {\n return this.totalItems && this.displayedItems < this.totalItems && !this.previousPageUrlParam;\n },\n placeholders() {\n if (!this.infiniteLoadingAvailable) {\n return [];\n }\n let count = this.totalItems - this.displayedItems;\n count = Math.max(0, count);\n count = Math.min(250, count);\n return Array.from('x'.repeat(count));\n },\n query() {\n if (this.categoryPathIdRoot) {\n return '';\n }\n return this.$store.getters['search/getQuery'];\n },\n categories() {\n if (!this.isCategory) {\n return [];\n }\n const categoryFacetElements = this.searchFactFinderNgBaseFacets?.categoryFacets\n ?.filter((facet) => facet.catalogCategoryData?.CategoryRole === 'INTERMEDIATE')\n .sort((a, b) => a.catalogCategoryData.SortOrder - b.catalogCategoryData.SortOrder);\n if (!categoryFacetElements) {\n return [];\n }\n let currentFacets = this.searchFactFinderNg.categoryFacets?.map((facet) => facet.text);\n if (!currentFacets?.length) {\n const firstMaster = this.searchFactFinderNg?.masters?.hits?.[0]?.masterValuesObject;\n let firstHitPath;\n if (firstMaster?.catalogCategoryData) {\n firstHitPath = firstMaster.catalogCategoryData.CategoryDisplayNamePath;\n } else {\n firstHitPath =\n firstMaster?.masterProductData?.catalogProductData?.CategoryDisplayNamePath;\n }\n if (firstHitPath) {\n currentFacets = categoryFacetElements\n .filter((facet) => firstHitPath.includes(facet.catalogCategoryData.CategoryName))\n .map((facet) => facet.text);\n } else {\n currentFacets = [];\n console.error('Could not find category id');\n }\n }\n return categoryFacetElements.map((filter) => {\n const selected = this.categoryOverride === filter.text;\n return {\n id: filter.text,\n name: filter.catalogCategoryData.CategoryName,\n Slug: filter.catalogCategoryData.Slug,\n imageUrl: filter.catalogCategoryData.imageUrl,\n enabled:\n selected ||\n currentFacets.includes(filter.text) ||\n this.searchFactFinderNg.categoryFacetsUnselected?.includes(filter.text),\n selected,\n };\n });\n },\n facets() {\n const mergedFacets = mergeFacets(\n this.searchFactFinderNg.facetDataUnselected || [],\n this.searchFactFinderNg.facets || [],\n this.searchFactFinderNgBaseFacets.facets || [],\n this.autoFilters || this.filters,\n );\n\n // make it possible to deselect autoFilters, even if no results found\n if (this.autoFilters?.length) {\n this.autoFilters.forEach((autoFilter) => {\n if (\n !mergedFacets.some(\n (facet) => facet.associatedFieldName === autoFilter.associatedFieldName,\n )\n ) {\n mergedFacets.push({\n associatedFieldName: autoFilter.associatedFieldName,\n disabled: false,\n hidden: false,\n type: 'TEXT',\n name: autoFilter.associatedFieldName,\n unit: '',\n elements: [\n {\n disabled: false,\n associatedFieldName: autoFilter.associatedFieldName,\n text: autoFilter.fakeValue,\n name: autoFilter.name,\n selected: true,\n selectedBool: true,\n absoluteMaxValue: null,\n absoluteMinValue: null,\n },\n ],\n });\n }\n });\n }\n\n return mergedFacets;\n },\n menuFacets() {\n return this.facets.map((facet) => ({\n ...facet,\n elements: facet.elements.map((element) => ({\n ...element,\n selected: element.selectedBool,\n name: element.text,\n })),\n }));\n },\n filterUrlParams() {\n const query = this.query.trim();\n if (!query) {\n return this.filterUrlParamsNoQuery;\n }\n const search = this.filterUrlParamsNoQuery ? `${this.filterUrlParamsNoQuery}&` : '?';\n return `${search}query=${encodeURIComponent(query)}`;\n },\n filterUrlParamsNoQuery() {\n if (this.useAutoFilters) {\n return '';\n }\n const search = new URLSearchParams();\n\n const tab = this.$fischer.query('tab');\n if (tab) {\n search.append('tab', tab);\n }\n\n const otherFiltersStart = this.isWebsiteSearch ? 'filter' : 'websitefilter';\n Object.entries(this.$fischer.query()).forEach(([key, value]) => {\n if (key.startsWith(otherFiltersStart)) {\n search.append(key, value);\n }\n });\n\n const prefix = this.isWebsiteSearch ? 'websitefilter' : 'filter';\n this.filters.forEach((filter) => {\n if (!filter.associatedFieldName || filter.associatedFieldName === 'undefined') {\n console.error('filter has no associated field name', filter);\n return;\n }\n search.append(`${prefix}${filter.associatedFieldName}`, stringifyFilterValue(filter));\n });\n\n const searchString = search.toString();\n if (searchString.length === 0) {\n return '';\n }\n\n return `?${searchString}`;\n },\n graphQlVariables() {\n let extraFilters = [\n {\n associatedFieldName: 'Type',\n name: this.typeFilter,\n },\n ];\n\n if (!this.isSearchPage) {\n extraFilters.push({\n associatedFieldName: 'Hidden_K',\n name: '!true',\n });\n }\n\n return {\n baseSiteId: this.$fischer.baseSiteId(),\n brand: this.$fischer.brandId(),\n language: this.$fischer.catalogLocale(),\n filters: (this.autoFilters || this.filters).map(toFilterInput),\n quantity: this.isCategory ? 100000 : this.pageSize, // set to max value for fact finders 'hitsPerPage' param (100000)\n query: this.trimmedQuery,\n navigation: Boolean(this.categoryPathIdRoot),\n extraFilters,\n categoryId: this.categoryPathIdRoot,\n catalogLocale: this.$fischer.catalogLocale(),\n factFinderChannel: this.$fischer.factFinderChannel(),\n categoryFacets: this.isCategory,\n };\n },\n previousPageUrlParam() {\n const pageParam = this.$fischer.query('page');\n if (!pageParam) {\n return null;\n }\n const page = Number(pageParam);\n if (this.page !== page) {\n return null;\n }\n const previous = page - 1;\n if (!previous) {\n return null;\n }\n if (previous === 1) {\n return this.$fischer.uri();\n }\n return `?page=${previous}`;\n },\n displayedItems() {\n return Math.min(this.page * this.pageSize, this.searchFactFinderNg?.totalHits);\n },\n pagingPercentage() {\n return (100 * this.displayedItems) / this.totalItems;\n },\n familiesCount() {\n return this.searchFactFinderNg?.totalFamilyHits || null;\n },\n productsCount() {\n return this.searchFactFinderNg?.variants?.totalHits || null;\n },\n isCategory() {\n return Boolean(this.$fischer.isCategoryPage());\n },\n variantsWithoutFamily() {\n if (IS_SHOWROOM && this.isFite) {\n return true;\n }\n return Boolean(this.fields.variantsWithoutFamily?.value);\n },\n skipSearch() {\n if (!this.isSearchPage) {\n return false;\n }\n\n return this.isSuggestionsOpen || this.showNoQueryHint || this.trimmedQuery === '*';\n },\n },\n watch: {\n query() {\n this.changeFacet();\n },\n 'searchFactFinderNg.totalHits': function watchTotalHits(value) {\n if (value !== undefined) {\n this.$emit('total-hits', value);\n }\n },\n termToTrack(newValue) {\n if (!newValue) {\n return;\n }\n if (this.lastTracked === newValue) {\n return;\n }\n this.lastTracked = newValue;\n\n this.sendEvent('search', {\n searchTerm: newValue,\n searchContext: this.isWebsiteSearch ? 'website' : 'product',\n });\n },\n },\n created() {\n this.parseUrlParams();\n },\n apollo: {\n searchFactFinderNg: {\n query: getSearchQuery,\n variables() {\n this.parseUrlParams(); // this might have been done in the created hook, however in SSR mode it won't\n const masterFilters =\n this.isWebsiteSearch || this.categoryPathIdRoot || !this.isFite\n ? undefined\n : [\n {\n associatedFieldName: 'HasFamily',\n name: 'true',\n },\n ];\n\n return {\n ...this.graphQlVariables,\n categoryId: this.categoryOverride || this.graphQlVariables.categoryId,\n masterFilters,\n page: this.pageNonResponsive,\n noVariants: Boolean(this.categoryPathIdRoot),\n variantsWithoutFamily: this.variantsWithoutFamily,\n noFacets: this.pageNonResponsive > 1,\n includeClaim: this.includeClaim,\n originalCategoryId: this.graphQlVariables.categoryId,\n sid: this.isCategory ? undefined : getEventHubSessionId(),\n };\n },\n result({ data }) {\n if (this.fetchingMore) {\n const loaded = this.fetchingMore;\n this.fetchingMore = false;\n setTimeout(loaded, 1000); // throttle requests\n return;\n }\n if (!this.$fischer.query('page')) {\n this.page = 1;\n this.pageNonResponsive = 1;\n if (this.$refs.infiniteLoadingProducts?.stateChanger) {\n this.$refs.infiniteLoadingProducts.stateChanger.reset();\n }\n }\n\n if (data?.searchFactFinderNg?.masters?.hits) {\n const trackingList = data.searchFactFinderNg.masters.hits.map(\n (hit) =>\n hit.masterValuesObject?.catalogCategoryData ||\n hit.masterValuesObject?.masterProductData?.catalogProductData,\n );\n this.trackViewItemList(trackingList);\n }\n },\n update: updateSearchFactFinderNg,\n skip() {\n return this.skipSearch;\n },\n },\n searchFactFinderNgBaseFacets: {\n query: getSearchQuery,\n variables() {\n return {\n ...this.graphQlVariables,\n filters: [],\n query: this.trimmedQuery,\n includeResults: false,\n noSearch: true,\n variantsWithoutFamily: this.variantsWithoutFamily,\n includeUnselectedFacets: false,\n accessToken: null,\n };\n },\n update: updateSearchFactFinderNg,\n skip() {\n return this.isWebsiteSearch || this.skipSearch;\n },\n },\n },\n methods: {\n onToggleCategory(category, selected) {\n this.categoryOverride = selected ? category.id : null;\n },\n onToggleOpen(_event, toggleOpen, facet) {\n toggleOpen(facet);\n },\n getBestPrice(record) {\n if (!this.isShop) {\n return null;\n }\n const id = record?.variantValuesObject?.[0] && record.variantValuesObject[0].ID;\n const bestPrice = this.bestPrices[id];\n if (bestPrice !== undefined) {\n return bestPrice;\n }\n return {\n price: {\n loading: true,\n },\n };\n },\n cleanName(name) {\n return factFinderNgNameCleaner(name);\n },\n parseUrlParams() {\n if (this.haveParsedUrlParams) {\n return;\n }\n this.haveParsedUrlParams = true;\n\n const isCorrectTab = this.isWebsiteSearch === (this.$fischer.query('tab') === 'website');\n\n const pageParam = isCorrectTab ? this.getPageParam() : 1; // remember NOW, since changeFacet will change it\n\n const technicalFacetsLowerCase = technicalFacets.map((name) => name.toLowerCase());\n const filters = [];\n const search = this.$fischer.query();\n const searchRegExp = this.isWebsiteSearch ? /^websitefilter(.*)/ : /^filter(.*)/;\n Object.keys(search).forEach((key) => {\n const match = searchRegExp.exec(key);\n if (!match) {\n return;\n }\n\n const [, name] = match;\n const nameLowerCase = name.toLowerCase();\n if (!name || technicalFacetsLowerCase.includes(nameLowerCase)) {\n return;\n }\n\n if (/[^~]~~[^~]/.test(name)) {\n const values = /^([0-9.]+)-([0-9.]+)/.exec(search[key]);\n if (values) {\n filters.push({\n element: {\n associatedFieldName: name,\n selectedMinValue: values[1],\n selectedMaxValue: values[2],\n selected: true,\n },\n value: true,\n });\n return;\n }\n }\n filters.push({\n element: {\n associatedFieldName: name,\n name: search[key],\n selected: true,\n },\n value: true,\n });\n });\n\n if (!this.categoryPathIdRoot) {\n const query = this.$fischer.query('query');\n if (query && query !== this.query) {\n this.$store.dispatch('search/setQuery', { value: query, noShowSuggestions: true });\n this.$store.commit('search/SET_SEARCH_SUGGESTIONS', { suggestions: query, query });\n }\n }\n\n this.changeFacet(...filters);\n\n this.page = pageParam;\n this.pageNonResponsive = pageParam;\n },\n getPageParam() {\n const queryParam = this.$fischer.query('page');\n return Number(queryParam) || 1;\n },\n newSearch(search) {\n this.clearAllFacets();\n this.$store.dispatch('search/setQuery', search);\n },\n async fetchMore({ complete, loaded } = {}) {\n if (this.fetchingMore) {\n return;\n }\n if (this.page * this.pageSize > (this.searchFactFinderNg?.totalHits || 0)) {\n if (complete) {\n complete();\n }\n return;\n }\n this.fetchingMore = loaded || (() => null);\n\n this.page += 1;\n const result = await this.$apollo.queries.searchFactFinderNg.fetchMore({\n variables: {\n page: this.page,\n includeUnselectedFacets: false,\n },\n });\n\n if (result?.data?.searchFactFinderNg?.masters?.hits) {\n const trackingList = result.data.searchFactFinderNg.masters.hits\n .map((hit) => hit.masterValuesObject.catalogCategoryData)\n .filter((categoryData) => categoryData);\n this.trackViewItemList(trackingList);\n }\n },\n clearAllFacets() {\n this.enableAutoFilters();\n this.filters = [];\n this.changeFacet();\n },\n changeFacet(...changes) {\n this.applyChanges(...changes);\n\n if (!IS_SSR) {\n let state = this.filterUrlParams;\n\n const page = this.$fischer.query('page');\n if (page) {\n state = state\n ? `${state}&page=${encodeURIComponent(page)}`\n : `?page=${encodeURIComponent(page)}`;\n }\n\n const customQuery = [];\n const query = this.$fischer.query();\n const filterKeys = ['filter', 'query'];\n Object.entries(query).forEach(([key, value]) => {\n if (!filterKeys.some((el) => key.startsWith(el))) {\n customQuery.push(`${key}=${encodeURIComponent(value)}`);\n }\n });\n\n if (customQuery.length) {\n if (this.filterUrlParams) {\n state = `${this.filterUrlParams}&${customQuery.join('&')}`;\n } else {\n state = `?${customQuery.join('&')}`;\n }\n }\n\n if (state !== String(window.location.search)) {\n // we want to remove the page parameter here, because the state changed\n window.history.replaceState('', '', state || '?');\n\n this.page = 1;\n this.pageNonResponsive = 1;\n }\n }\n },\n getPaginationString(obj) {\n return this.$dict.get(\n this.isSearchPage || this.variantsWithoutFamily\n ? 'product-List.Pagination.Show-Sum'\n : 'product-List.Pagination.Show-Families',\n obj,\n );\n },\n masterClicked(record) {\n if (record?.masterValuesObject?.catalogCategoryData) {\n this.trackSelectItem(record.masterValuesObject.catalogCategoryData);\n }\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './search-fact-finder-fi-unscoped';\n</style>\n\n<style scoped lang=\"scss\">\n@import './search-fact-finder-fi';\n</style>\n"],"file":"assets/SearchFactFinderFi-4e5Qkip-.js"}