{"version":3,"mappings":"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","names":["_sfc_main","IconFi","breakpointMixin","accordionItemMixin","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_createElementBlock","$props","_normalizeClass","_ctx","_createElementVNode","$options","args","_renderSlot","_createVNode","_component_icon_fi","_normalizeStyle","setupAccordion","mapGetters","_openBlock","_Fragment","_renderList","attribute","idx","_createBlock","_createCommentVNode","_createTextVNode","ToggleFi","state","_toDisplayString","_component_toggle_fi","_cache","$event","ButtonFi","LoadingIndicatorWrapper","_withModifiers","_component_loading_indicator_wrapper","_withCtx","_component_button_fi","HeadlineFi","CloudImageFi","GridContainerFi","TechnicalDetailsTableFi","_b","_a","_component_headline_fi","_component_grid_container_fi","_component_technical_details_table_fi","_component_cloud_image_fi","LinkFi","PriceSavingsInPercentFi","eventHubMixin","slugLinkMixin","throttle","event","href","productString","item","_component_price_savings_in_percent_fi","_component_link_fi","$data","heading","NoProductsFoundFi","defineAsyncComponent","ProductListClosedShopFi","__vitePreload","PaginationProgressBar","LoadingIndicator","AccordionCustomizableFi","AccordionCustomizableWrapperFi","FacetsMenuFi","FactFinderFacetFi","ProductAttributesFi","ProductAttributesToggleFi","ProductBuyButtonFi","ProductContentFi","ProductIdentifierFi","ProductListHeadFi","ProductListLegendFi","QuantityModificationHintFi","shoppingcartMixin","sellingUnitMixin","multiBestPriceMixin","accessPrivilegesMixin","userMixin","autoFiltersMixin","localizedValueMixin","GET_RETAILER_AVAILABILITY_FOR_IDS","baseSiteId","SEARCH_PRODUCTS_FOR_FAMILY_NG","data","hit","error","GET_FAMILY_BASE_FACETS_NG","variables","products","inputDetails","attributesPerRecord","record","catalogAttributes","attributes","index","seen","categoryAttribute","searchedIndex","catalogAttribute","availability","product","search","filter","stringifyFilterValue","mergeFacets","a","value","activeFilter","baseFilter","baseFacet","firstElement","initialPage","name","factFinderNgNameCleaner","p","changes","key","match","nameShort","values","customQuery","query","filterKeys","el","inCart","id","language","catalogLocale","extraFilters","toFilterInput","previousResult","fetchMoreResult","Attributes","AttributeKey","attributesWithoutApprovals","_hoisted_7","_component_facets_menu_fi","facet","open","change","close","toggleOpen","registerDomElement","_component_fact_finder_facet_fi","element","_component_loading_indicator","_component_product_attributes_toggle_fi","_component_product_list_head_fi","_c","_component_accordion_customizable_wrapper_fi","i","_component_accordion_customizable_fi","_component_product_identifier_fi","_component_product_attributes_fi","_component_product_list_closed_shop_fi","productDetails","_component_product_buy_button_fi","_component_quantity_modification_hint_fi","_component_product_content_fi","_component_product_list_legend_fi","_d","_component_pagination_progress_bar","_hoisted_8","_hoisted_9","_component_no_products_found_fi","ProductListViewFi","ComponentWrapper","shopType","type","_component_component_wrapper","_component_product_list_view_fi"],"ignoreList":[],"sources":["../../src/components/atoms/accordion/AccordionCustomizableFi.vue","../../src/components/atoms/accordion/AccordionCustomizableWrapperFi.vue","../../src/components/shop-modules/product-list-view/product-attributes-fi/ProductAttributesFi.vue","../../src/components/shop-modules/product-list-view/product-attributes-toggle-fi/ProductAttributesToggleFi.vue","../../src/components/shop-modules/product-list-view/product-buy-button-fi/ProductBuyButtonFi.vue","../../src/components/shop-modules/product-list-view/product-content-fi/ProductContentFi.vue","../../src/components/shop-modules/product-list-view/product-identifier-fi/ProductIdentifierFi.vue","../../src/components/shop-modules/product-list-view/product-list-head-fi/ProductListHeadFi.vue","../../src/components/shop-modules/product-list-view/product-list-legend-fi/ProductListLegendFi.vue","../../src/components/shop-modules/product-list-view/ProductListViewFi.vue","../../src/pages/product-family/ProductFamilyFi.vue"],"sourcesContent":["<template>\n <div\n :id=\"id\"\n class=\"accordion-customizable-fi-panel\"\n :class=\"isOpen ? 'accordion-customizable-fi-panel--active' : ''\"\n :data-index=\"itemIndex\"\n >\n <div\n :id=\"`${id}_button`\"\n ref=\"accordionItemHeader\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"`${id}_content`\"\n class=\"accordion-customizable-fi-panel__header\"\n type=\"button\"\n @click=\"toggleContent\"\n >\n <slot name=\"headline\" />\n\n <div class=\"accordion-customizable-fi-panel__icon-wrapper\">\n <div\n :class=\"`accordion-customizable-fi-panel__icon accordion-customizable-fi-panel__icon--${shopType}`\"\n >\n <icon-fi\n :rotate=\"rotate\"\n :size=\"getToggleIconSize()\"\n :icon=\"icon\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n </div>\n\n <div\n :id=\"`${id}_content`\"\n ref=\"content\"\n :style=\"{\n gridTemplateRows: isOpen ? '1fr' : '0fr',\n }\"\n :label=\"label\"\n :aria-hidden=\"!isOpen\"\n role=\"region\"\n class=\"accordion-customizable-fi-panel__content\"\n >\n <div class=\"accordion-customizable-fi-panel__content__wrapper\">\n <div class=\"accordion-customizable-fi-panel__card\">\n <slot name=\"content\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport IconFi from 'atoms/icon-fi/IconFi';\nimport accordionItemMixin from 'components/atoms/accordion-item-fi/AccordionItemMixin';\nimport breakpointMixin from 'mixins/breakpointMixin';\n\nexport default {\n name: 'AccordionCustomizableFi',\n components: {\n IconFi,\n },\n mixins: [breakpointMixin, accordionItemMixin],\n props: {\n id: {\n type: String,\n default: () => `accordion_${Math.random()}`,\n },\n label: {\n type: String,\n default: null,\n },\n color: {\n type: String,\n default: null,\n },\n icon: {\n type: String,\n default: 'chevron-down',\n },\n lazyContent: {\n type: Boolean,\n },\n itemIndex: {\n type: Number,\n default: null,\n required: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n defaultOpenPanels: {\n type: Array,\n default: () => [],\n },\n shopType: {\n type: String,\n default: 'default',\n },\n ignoreOthers: {\n type: Boolean,\n default: false,\n },\n scrollTo: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n isDefaultOpen: false,\n innerPadding: 60,\n };\n },\n computed: {\n rotate() {\n return this.isOpen ? '180' : '0';\n },\n },\n methods: {\n toggleContent() {\n this.toggleAccordion();\n },\n getToggleIconSize() {\n if (!this.isMD) {\n if (this.shopType === 'retailConnect' || this.shopType === 'retailConnectCart') {\n return '2';\n }\n }\n\n return '0_8';\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './accordion-customizable-fi';\n</style>\n","<template>\n <div :class=\"['accordion-customizable-fi', themeClass, colorSchema]\">\n <div\n class=\"accordion-customizable-fi__panels\"\n data-test=\"accordion-customizable-panels\"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nimport setupAccordion from 'components/atoms/accordion/setupAccordion';\n\nexport default {\n name: 'AccordionCustomizableWrapperFi',\n props: {\n theme: {\n type: String,\n default: '',\n },\n color: {\n type: String,\n default: null,\n },\n },\n setup() {\n setupAccordion();\n },\n computed: {\n colorSchema() {\n return this.color ? `accordion--${this.color}` : '';\n },\n themeClass() {\n return `accordion--${this.theme}-theme`;\n },\n },\n};\n</script>\n\n<style lang=\"scss\">\n@import './accordion-customizable-fi';\n</style>\n","<template>\n <div\n v-if=\"attributes\"\n class=\"product-attributes-fi\"\n >\n <div\n v-for=\"(attribute, idx) in attributes\"\n :key=\"attribute.AttributeKey\"\n :class=\"{\n [`attribute--${idx}`]: true,\n 'product-attributes-fi__item': true,\n 'product-attributes-fi__item--icon': attribute.Value === 'relevant',\n }\"\n >\n <template v-if=\"attribute?.Value\">\n <template v-if=\"attribute.Value === 'relevant'\">\n <icon-fi\n class=\"product-attributes-fi__icon\"\n icon=\"check\"\n />\n </template>\n <template v-else>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"attribute.Value\" />\n </template>\n <template v-if=\"attribute.Unit\">\n <!-- eslint-disable vue/no-v-html -->\n <span\n class=\"product-attributes-fi__item__unit\"\n v-html=\"attribute.Unit\"\n />\n <!-- eslint-enable vue/no-v-html -->\n </template>\n </template>\n <template v-else> — </template>\n </div>\n </div>\n</template>\n\n<script>\nimport { IconFi } from 'atoms';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ProductAttributesFi',\n components: {\n IconFi,\n },\n mixins: [breakpointMixin],\n props: {\n attributes: {\n type: Array,\n required: true,\n },\n },\n computed: {\n ...mapGetters({\n approvalsEnabled: 'productList/getApprovalsEnabled',\n }),\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-attributes-fi';\n</style>\n","<template>\n <div\n :class=\"[\n 'product-attributes-toggle-fi',\n isBlock ? 'product-attributes-toggle-fi--is-block' : '',\n shopType ? `product-attributes-toggle-fi--${shopType}` : '',\n ]\"\n >\n <span class=\"product-attributes-toggle-fi__label\">\n {{ $dict.get('product-List.General.Approvals-Switch') }}\n </span>\n <toggle-fi\n v-model=\"approvalsEnabled\"\n class=\"product-attributes-toggle-fi__switch\"\n @click=\"$emit('toggle-approvals')\"\n />\n </div>\n</template>\n\n<script>\nimport { ToggleFi } from 'atoms';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ProductAttributesToggleFi',\n components: {\n ToggleFi,\n },\n props: {\n isBlock: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['toggle-approvals'],\n computed: {\n ...mapGetters({\n shopType: 'productList/getShopType',\n }),\n approvalsEnabled: {\n get() {\n return this.$store.getters['productList/getApprovalsEnabled'];\n },\n set(state) {\n this.$store.dispatch('productList/setApprovalsEnabled', state);\n },\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-attributes-toggle-fi';\n</style>\n","<template>\n <div\n class=\"product-buy-button-fi\"\n @click.stop\n >\n <loading-indicator-wrapper\n :loading=\"isInProgress\"\n dark\n variant=\"spinnerLocal\"\n spinoff=\"in-relative-centered\"\n :class=\"[\n 'product-buy-button-fi__loader-wrapper',\n shopType ? `product-buy-button-fi__loader-wrapper--${shopType}` : '',\n ]\"\n >\n <button-fi\n v-if=\"!isButtonHidden\"\n :disabled=\"isButtonDisabled\"\n :data-productid=\"item ? item.ID : null\"\n :data-productname=\"item ? `${item.ID} - ${item.catalogProductData.ProductName}` : null\"\n :aria-label=\"$dict.get('checkout.Cart.Add-Basket')\"\n type=\"button\"\n :class=\"[\n 'button-fi__icon',\n 'button-fi__primary',\n 'product-buy-button-fi__cart-button',\n shopType ? `product-buy-button-fi__cart-button--${shopType}` : '',\n ]\"\n data-test=\"product-buy-button\"\n :data-test-2=\"isButtonDisabled ? 'product-buy-button-disabled' : null\"\n @click.stop=\"$emit('add-product', productDetails)\"\n >\n <icon-fi\n icon=\"shopping-cart\"\n color=\"white\"\n />\n </button-fi>\n </loading-indicator-wrapper>\n </div>\n</template>\n\n<script>\nimport { ButtonFi, IconFi, LoadingIndicatorWrapper } from 'atoms';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ProductBuyButtonFi',\n components: {\n ButtonFi,\n IconFi,\n LoadingIndicatorWrapper,\n },\n props: {\n item: {\n type: Object,\n default: null,\n },\n productDetails: {\n type: Object,\n default: () => ({}),\n },\n isInProgress: {\n type: Boolean,\n default: false,\n },\n isButtonDisabled: {\n type: Boolean,\n default: false,\n },\n isButtonHidden: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['add-product'],\n computed: {\n ...mapGetters({\n shopType: 'productList/getShopType',\n }),\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-buy-button-fi';\n</style>\n","<template>\n <div class=\"product-content-fi\">\n <headline-fi\n v-if=\"isLG\"\n class=\"product-content-fi__headline\"\n tag=\"div\"\n :size=\"21\"\n >\n {{ $dict.get('product-List.Table.Attribute-Content') }}\n </headline-fi>\n\n <grid-container-fi :container=\"false\">\n <div class=\"product-content-fi__table-container\">\n <technical-details-table-fi\n :item=\"item\"\n :attributes=\"attributes\"\n />\n </div>\n\n <div\n v-if=\"productLineDrawing\"\n class=\"product-content-fi__media-container\"\n >\n <cloud-image-fi\n :src=\"productLineDrawing\"\n class=\"product-content-fi__image\"\n alt=\"\"\n width=\"400\"\n do-not-replace-url\n />\n </div>\n </grid-container-fi>\n </div>\n</template>\n\n<script>\nimport { CloudImageFi, HeadlineFi } from 'atoms';\nimport GridContainerFi from 'components/grid-fi/GridContainerFi';\nimport TechnicalDetailsTableFi from 'components/shop-modules/technical-details-table-fi/TechnicalDetailsTableFi';\nimport breakpointMixin from 'mixins/breakpointMixin';\n\nexport default {\n name: 'ProductContentFi',\n components: {\n HeadlineFi,\n CloudImageFi,\n GridContainerFi,\n TechnicalDetailsTableFi,\n },\n mixins: [breakpointMixin],\n inject: ['fields'],\n props: {\n item: {\n type: Object,\n default: null,\n },\n attributes: {\n type: Array,\n required: true,\n },\n familyLineDrawing: {\n type: [String, null],\n default: null,\n },\n bestPrice: {\n type: Object,\n default: null,\n },\n },\n computed: {\n productLineDrawing() {\n return this.item?.catalogProductData?.productLineDrawing || this.familyLineDrawing;\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-content-fi';\n</style>\n","<template>\n <div\n :class=\"[\n 'product-identifier-fi',\n `product-identifier-fi--${shopType}`,\n showVariantImage ? `product-identifier-fi--with-image` : '',\n ]\"\n @click.stop\n >\n <div\n v-if=\"showVariantImage\"\n class=\"product-identifier-fi__product-image\"\n >\n <a\n class=\"product-identifier-fi__product-image__link\"\n :href=\"getSlugLink(item.catalogProductData)\"\n :title=\"item.catalogProductData.ProductName\"\n @link-click=\"onClick\"\n >\n <cloud-image-fi\n v-if=\"previewImage\"\n :src=\"previewImage\"\n :alt=\"item.name\"\n :width=\"isLG ? '90' : '67'\"\n :height=\"isLG ? '90' : '67'\"\n trim\n params=\"func=fit&bg_colour=FFF\"\n class=\"product-identifier-fi__product-image__image\"\n />\n </a>\n </div>\n\n <div class=\"product-identifier-fi__data\">\n <price-savings-in-percent-fi\n class=\"product-identifier-fi__price-savings\"\n :best-price=\"bestPrice\"\n theme=\"product-list-view\"\n />\n\n <link-fi\n ref=\"productName\"\n class=\"product-identifier-fi__title\"\n primary\n :theme=\"hasLongTitle ? 'product-list-view' : ''\"\n :href=\"getSlugLink(item.catalogProductData)\"\n :title=\"item.catalogProductData.ProductName\"\n :size=\"16\"\n @link-click=\"onClick\"\n >\n <span ref=\"productNameFull\">\n {{ item.catalogProductData.ProductName }}\n </span>\n </link-fi>\n\n <div\n v-if=\"item.catalogProductData.ProductId\"\n class=\"product-identifier-fi__article-number\"\n data-test=\"article-number\"\n >\n {{ $dict.get('product-List.Table.Article-Number') }} {{ item.catalogProductData.ProductId }}\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { CloudImageFi, LinkFi, PriceSavingsInPercentFi } from 'atoms';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport eventHubMixin from 'mixins/eventHubMixin';\nimport slugLinkMixin from 'mixins/slugLinkMixin';\nimport { throttle } from 'throttle-debounce';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ProductIdentifierFi',\n components: {\n CloudImageFi,\n LinkFi,\n PriceSavingsInPercentFi,\n },\n mixins: [breakpointMixin, eventHubMixin, slugLinkMixin],\n props: {\n item: {\n type: Object,\n default: null,\n },\n bestPrice: {\n type: Object,\n default: () => ({}),\n },\n clickSource: {\n type: String,\n default: null,\n },\n showVariantImage: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n hasLongTitle: false,\n };\n },\n computed: {\n ...mapGetters({\n shopType: 'productList/getShopType',\n windowDimensions: 'layout/getWindowDimensions',\n }),\n previewImage() {\n return this.item.catalogProductData?.packagingImage || this.item.ImageURL;\n },\n },\n watch: {\n windowDimensions: {\n deep: true,\n handler() {\n this.throttledUpdateProductLink();\n },\n },\n },\n mounted() {\n if (IS_SSR) {\n return;\n }\n this.updateProductLink();\n this.throttledUpdateProductLink = throttle(200, this.updateProductLink);\n },\n methods: {\n onClick(event, href) {\n if (!this.clickSource) {\n return;\n }\n const productBreadcrumb = this.$store.getters['navigation/productBreadcrumb'];\n const productString = productBreadcrumb.map((item) => item.title).join('/');\n this.sendClickToEventHub(\n {\n clickSource: this.clickSource,\n pageTitle: this.item.catalogProductData.ProductName,\n productId: this.item.catalogProductData.ProductId,\n productTitle: this.item.catalogProductData.ProductName,\n query: `[${this.clickSource}]:/${productString}/${this.item.catalogProductData.ProductName}`,\n },\n event,\n href,\n );\n },\n updateProductLink() {\n if (\n IS_SSR ||\n !this.$refs.productName ||\n !this.$refs.productName.$el ||\n !this.$refs.productNameFull\n ) {\n return;\n }\n\n this.hasLongTitle =\n this.$refs.productNameFull.offsetHeight > this.$refs.productName.$el.offsetHeight || false;\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-identifier-fi';\n</style>\n","<template>\n <grid-container-fi\n :class=\"[\n 'product-list-head-fi',\n `product-list-head-fi--${shopType}`,\n showVariantImage ? `product-list-head-fi--with-image` : '',\n ]\"\n :container=\"false\"\n >\n <div\n class=\"product-list-head-fi__item product-list-head-fi__item--totals\"\n data-test=\"product-list-totals\"\n :data-test-2=\"totalHits\"\n >\n {{ totalHits ? $dict.get('product-List.Table.Product-Variants', [totalHits]) : '' }}\n </div>\n\n <div class=\"product-list-head-fi__group\">\n <div\n v-for=\"(heading, idx) in categoryAttributes\"\n :key=\"heading.AttributeKey\"\n :class=\"[\n 'product-list-head-fi__group-item',\n `product-list-head-fi__group-item--1-${maxHeadings}`,\n `attribute--${idx}`,\n ]\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <span\n class=\"product-list-head-fi__attribute-name\"\n v-html=\"heading.AttributeName\"\n />\n <p\n v-if=\"heading.technicalName\"\n class=\"product-list-head-fi__technical-name--head-item\"\n v-html=\"heading.technicalName\"\n />\n <!-- eslint-disable vue/no-v-html -->\n </div>\n </div>\n </grid-container-fi>\n</template>\n\n<script>\nimport GridContainerFi from 'components/grid-fi/GridContainerFi';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ProductListHeadFi',\n components: {\n GridContainerFi,\n },\n props: {\n categoryAttributes: {\n type: Array,\n required: true,\n },\n totalHits: {\n type: Number,\n default: 0,\n },\n showVariantImage: {\n type: Boolean,\n default: false,\n },\n },\n computed: {\n ...mapGetters({\n shopType: 'productList/getShopType',\n maxHeadings: 'productList/getMaxHeadings',\n }),\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-list-head-fi';\n</style>\n","<template>\n <div class=\"product-list-legend-fi\">\n {{ $dict.get('product-Catalog.Block-Labels.Descendant-Variants.Legend') }}\n <span class=\"product-list-legend-fi__item\">\n <icon-fi icon=\"check\" /> =\n <span class=\"product-list-legend-fi__item-value\">\n {{ $dict.get('product-Catalog.Block-Labels.Descendant-Variants.Permission-Available') }}\n </span>\n </span>\n <span class=\"product-list-legend-fi__item\">\n <span class=\"product-list-legend-fi__item-key\">—</span> =\n <span class=\"product-list-legend-fi__item-value\">\n {{ $dict.get('product-Catalog.Block-Labels.Descendant-Variants.Permission-not-Available') }}\n </span>\n </span>\n </div>\n</template>\n\n<script>\nimport { IconFi } from 'atoms';\n\nexport default {\n name: 'ProductListLegendFi',\n components: {\n IconFi,\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-list-legend-fi';\n</style>\n","<template>\n <div\n :class=\"{\n 'product-list-view-fi': true,\n [`product-list-view-fi--${shopType}`]: true,\n [`product-list-view-fi--max-${maxHeadings}`]: true,\n [`product-list-view-fi--with-variant-image`]: showVariantImage,\n }\"\n >\n <facets-menu-fi\n v-if=\"facetsTransformed?.length\"\n :facets=\"facetsTransformed\"\n :allow-clear-all=\"!autoFilters\"\n class=\"product-list-view-fi__facets\"\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=\"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 <template v-if=\"searchProductsForFamilyNg?.totalHits !== 0\">\n <div\n class=\"product-list-view-fi__wrapper\"\n :class=\"`shop-type-${shopType}`\"\n data-test=\"product-list-view-wrapper\"\n :data-test-2=\"shopType === 'retailConnect' ? 'product-list-view-retail-connect' : null\"\n >\n <div v-if=\"isLoading || isProductIsLoading\">\n <loading-indicator\n variant=\"spinnerLocal\"\n class=\"spinner-local--rebrush\"\n :dark=\"true\"\n />\n </div>\n\n <template v-else>\n <div class=\"product-list-view-fi__attribute-toggle\">\n <product-attributes-toggle-fi\n v-if=\"hasApprovalAttributes\"\n is-block\n />\n </div>\n\n <product-list-head-fi\n :total-hits=\"searchProductsForFamilyNg.totalHits\"\n :category-attributes=\"getAttributes(paddedAttributes[products[0]?.ID])\"\n :show-variant-image=\"showVariantImage\"\n />\n </template>\n\n <accordion-customizable-wrapper-fi theme=\"plist\">\n <accordion-customizable-fi\n v-for=\"(item, i) in products\"\n :id=\"`accordion_${item.ID}`\"\n :key=\"item.ID\"\n :item-index=\"i\"\n :shop-type=\"shopType ? shopType : 'default'\"\n :label=\"item.catalogProductData.ProductName\"\n :scroll-to=\"!isLG\"\n theme=\"plist\"\n data-test=\"accordion-customizable-item\"\n >\n <template #headline>\n <div class=\"product-list-view-fi__header\">\n <grid-container-fi\n :container=\"false\"\n class=\"product-list-view-fi__header-main\"\n :grid-class=\"shopType !== 'closedShop' ? 'md:fi-gap-y-zero md:fi-gap-y-zero' : ''\"\n >\n <product-identifier-fi\n :item=\"item\"\n :best-price=\"bestPrices[item.ID]\"\n :click-source=\"clickSource\"\n :show-variant-image=\"showVariantImage\"\n />\n\n <product-attributes-fi\n class=\"fi-hidden sm:fi-block\"\n :attributes=\"getAttributes(paddedAttributes[item.ID])\"\n />\n\n <product-list-closed-shop-fi\n v-if=\"isMounted && shopType === 'closedShop'\"\n :best-price=\"bestPrices[item.ID]\"\n :item=\"item\"\n :loading-prices=\"loadingPrices\"\n :is-adding-to-cart=\"isAddingItemToCart[item.ID]\"\n @remove-quantity-hints=\"removeQuantityHints\"\n @logout-if-token-invalid=\"logoutIfTokenInvalid\"\n @add-product=\"(productDetails) => addProduct(productDetails)\"\n />\n\n <!-- RetailConnectCart -->\n <template v-else-if=\"shopType === 'retailConnectCart'\">\n <product-buy-button-fi\n :item=\"item\"\n :product-details=\"{\n productID: item.ID,\n productName: `${item.ID} - ${item.catalogProductData.ProductName}`,\n productInitialQuantity: 1,\n }\"\n :is-in-progress=\"\n isAddingItemToCart[item.ID] ||\n $apolloData.queries.getRetailerAvailabilityForIds.loading\n \"\n :is-button-disabled=\"\n productInCart(item) ||\n isAddingItemToCart[item.ID] ||\n retailerOutOfStock[i] ||\n false\n \"\n :is-button-hidden=\"hasAvailabilityStatusOnlyPermission\"\n @add-product=\"(productDetails) => addProduct(productDetails)\"\n />\n </template>\n </grid-container-fi>\n\n <grid-container-fi\n v-if=\"item.quantityIncreasedMessage\"\n :container=\"false\"\n class=\"product-list-view-fi__header-hint\"\n >\n <quantity-modification-hint-fi\n class=\"product-list-view-fi__quantity-modification-hint\"\n :hint=\"item.quantityIncreasedMessage\"\n icon=\"info\"\n theme=\"product-list-view\"\n />\n </grid-container-fi>\n </div>\n </template>\n\n <template #content>\n <product-content-fi\n :item=\"item\"\n :attributes=\"paddedAttributes[item.ID]\"\n :family-line-drawing=\"familyLineDrawing\"\n :best-price=\"bestPrices[item.ID]\"\n />\n </template>\n </accordion-customizable-fi>\n </accordion-customizable-wrapper-fi>\n\n <div class=\"fi-hidden md:fi-block\">\n <product-list-legend-fi v-if=\"showLegend\" />\n </div>\n </div>\n\n <pagination-progress-bar\n v-if=\"searchProductsForFamilyNg?.totalHits\"\n :pagination-page=\"pagination.page\"\n :pagination-total=\"searchProductsForFamilyNg.totalHits || 0\"\n :progressbar-value=\"pagingPercentage\"\n :show-more-button=\"displayedItems < searchProductsForFamilyNg.totalHits\"\n :query-params=\"filterUrlParams\"\n :disabled-state=\"\n isProductIsLoading ||\n pagination.page * pagination.pageSize >= searchProductsForFamilyNg.totalHits\n \"\n @loadmore=\"fetchMoreProducts\"\n >\n <template\n v-if=\"pagination.page * pagination.pageSize <= searchProductsForFamilyNg.totalHits\"\n >\n <span>{{\n $dict.get('product-List.Pagination.Show-Variants', [\n pagination.page * pagination.pageSize,\n searchProductsForFamilyNg.totalHits,\n ])\n }}</span>\n </template>\n\n <template\n v-else-if=\"pagination.page * pagination.pageSize > searchProductsForFamilyNg.totalHits\"\n >\n <span>{{\n $dict.get('product-List.Pagination.Show-Variants', [\n searchProductsForFamilyNg.totalHits,\n searchProductsForFamilyNg.totalHits,\n ])\n }}</span>\n </template>\n </pagination-progress-bar>\n </template>\n\n <no-products-found-fi v-else />\n </div>\n</template>\n\n<script>\nimport {\n AccordionCustomizableFi,\n AccordionCustomizableWrapperFi,\n LoadingIndicator,\n PaginationProgressBar,\n QuantityModificationHintFi,\n} from 'atoms';\nimport FacetsMenuFi from 'components/facets/facets-menu-fi/FacetsMenuFi';\nimport GridContainerFi from 'components/grid-fi/GridContainerFi';\nimport autoFiltersMixin from 'components/search-fact-finder-fi/autoFiltersMixin';\nimport FactFinderFacetFi from 'components/search-fact-finder-fi/fact-finder-facet-fi/FactFinderFacetFi';\nimport factFinderNgNameCleaner from 'components/search-fact-finder-fi/factFinderNgNameCleaner';\nimport mergeFacets from 'components/search-fact-finder-fi/mergeFacets';\nimport stringifyFilterValue from 'components/search-fact-finder-fi/stringifyFilterValue';\nimport toFilterInput from 'components/search-fact-finder-fi/toFilterInput';\nimport GET_FAMILY_BASE_FACETS_NG from 'gql/getFamilyBaseFacetsNg.gql';\nimport GET_RETAILER_AVAILABILITY_FOR_IDS from 'gql/getRetailerAvailabilityForIds.gql';\nimport SEARCH_PRODUCTS_FOR_FAMILY_NG from 'gql/searchProductsForFamilyNg.gql';\nimport accessPrivilegesMixin from 'mixins/accessPrivilegesMixin';\nimport breakpointMixin from 'mixins/breakpointMixin';\nimport localizedValueMixin from 'mixins/localizedValueMixin.vue';\nimport multiBestPriceMixin from 'mixins/multiBestPriceMixin';\nimport sellingUnitMixin from 'mixins/sellingUnitMixin';\nimport shoppingcartMixin from 'mixins/shoppingcartMixin';\nimport userMixin from 'mixins/userMixin';\nimport { defineAsyncComponent } from 'vue';\nimport { mapGetters } from 'vuex';\n\nimport ProductAttributesFi from './product-attributes-fi/ProductAttributesFi';\nimport ProductAttributesToggleFi from './product-attributes-toggle-fi/ProductAttributesToggleFi';\nimport ProductBuyButtonFi from './product-buy-button-fi/ProductBuyButtonFi';\nimport ProductContentFi from './product-content-fi/ProductContentFi';\nimport ProductIdentifierFi from './product-identifier-fi/ProductIdentifierFi';\nimport ProductListHeadFi from './product-list-head-fi/ProductListHeadFi';\nimport ProductListLegendFi from './product-list-legend-fi/ProductListLegendFi';\n\nconst NoProductsFoundFi = defineAsyncComponent(() => import('./NoProductsFoundFi.vue'));\n\nconst ProductListClosedShopFi = defineAsyncComponent(\n () => import('./product-list-closed-shop-fi/ProductListClosedShopFi'),\n);\n\nexport default {\n name: 'ProductListViewFi',\n components: {\n PaginationProgressBar,\n LoadingIndicator,\n GridContainerFi,\n AccordionCustomizableFi,\n AccordionCustomizableWrapperFi,\n FacetsMenuFi,\n FactFinderFacetFi,\n NoProductsFoundFi,\n ProductAttributesFi,\n ProductAttributesToggleFi,\n ProductBuyButtonFi,\n ProductContentFi,\n ProductIdentifierFi,\n ProductListClosedShopFi,\n ProductListHeadFi,\n ProductListLegendFi,\n QuantityModificationHintFi,\n },\n mixins: [\n shoppingcartMixin,\n sellingUnitMixin,\n multiBestPriceMixin,\n accessPrivilegesMixin,\n userMixin,\n autoFiltersMixin,\n localizedValueMixin,\n breakpointMixin,\n ],\n inject: ['fields'],\n props: {\n shopType: {\n type: String,\n default: '',\n },\n devData: {\n type: Object,\n default: null,\n },\n familyLineDrawing: {\n type: [String, null],\n default: null,\n },\n categoryAttributes: {\n type: Array,\n required: true,\n },\n approvals: {\n type: Array,\n default: () => [],\n },\n clickSource: {\n type: String,\n default: null,\n },\n },\n emits: ['ready'],\n data() {\n return {\n pagination: {\n page: 1, // current page of the \"load more\" button\n pageSize: 18,\n total: 0,\n initial: 1, // page set via url-param\n },\n isLoading: true,\n count: 0,\n showLegend: false,\n searchProductsForFamilyNg: null,\n getRetailerAvailabilityForIds: [],\n getFamilyBaseFacetsNg: null,\n filters: [],\n createdHook: true,\n isMounted: false,\n };\n },\n apollo: {\n getRetailerAvailabilityForIds: {\n query: GET_RETAILER_AVAILABILITY_FOR_IDS,\n variables() {\n const { baseSiteId } = this;\n\n return {\n baseSiteId,\n productIds: this.productIds,\n useGtins: this.$fischer.useGtins(),\n };\n },\n skip() {\n return !this.isMounted || !this.isRetailConnectCart || this.productIds.length === 0;\n },\n },\n searchProductsForFamilyNg: {\n query: SEARCH_PRODUCTS_FOR_FAMILY_NG,\n variables() {\n return this.createApolloVariables();\n },\n skip() {\n this.onCreated();\n if (IS_SHOWROOM) {\n return false;\n }\n return !this.baseSiteId || !this.$fischer.catalogId();\n },\n result({ data }) {\n if (data?.searchProductsForFamilyNg) {\n this.unselectedFacets = data.searchProductsForFamilyNg.facetDataUnselected;\n // shallow clone so we can modify the bestPrice\n this.products = data.searchProductsForFamilyNg.hits.map((hit) => ({\n ...(hit.variantValuesObject ? hit.variantValuesObject[0] : hit),\n }));\n this.pagination.total = data.searchProductsForFamilyNg.totalHits;\n this.setLegend();\n }\n this.isLoading = false;\n this.loadingQuantityInputs = {};\n this.isAddingItemToCart = {};\n\n this.$emit('ready');\n },\n error(error) {\n console.error(error);\n },\n },\n getFamilyBaseFacetsNg: {\n query: GET_FAMILY_BASE_FACETS_NG,\n variables() {\n const variables = this.createApolloVariables();\n return {\n factFinderChannel: variables.factFinderChannel,\n language: variables.language,\n id: variables.id,\n baseSiteId: variables.baseSiteId,\n };\n },\n skip() {\n return !this.baseSiteId || !this.$fischer.catalogId();\n },\n },\n },\n computed: {\n ...mapGetters({\n maxHeadings: 'productList/getMaxHeadings',\n }),\n products: {\n get() {\n return this.$store.getters['productList/getProducts'];\n },\n set(products) {\n this.$store.dispatch('productList/setProducts', products);\n },\n },\n loadingQuantityInputs: {\n get() {\n return this.$store.getters['productList/getLoadingQuantityInputs'];\n },\n set(inputDetails) {\n this.$store.dispatch('productList/setLoadingQuantityInputs', inputDetails);\n },\n },\n approvalsEnabled: {\n get() {\n return this.$store.getters['productList/getApprovalsEnabled'];\n },\n set(state) {\n this.$store.dispatch('productList/setApprovalsEnabled', state);\n },\n },\n baseSiteId() {\n if (IS_SHOWROOM && this.devData) {\n return this.devData.baseSiteId;\n }\n return this.$fischer.baseSiteId();\n },\n showVariantImage() {\n return Boolean(this.fields.showVariantImages?.value);\n },\n facetsLoaded() {\n return this.createdHook === false && this.getFamilyBaseFacetsNg;\n },\n // make sure every attribute of the category is present for each article\n // if it is missing, pad with empty string\n paddedAttributes() {\n const attributesPerRecord = {};\n this.searchProductsForFamilyNg.hits.forEach((record) => {\n if (!record || !record.variantValuesObject[0]) {\n console.error('ignoring record', record, JSON.stringify(this.searchProductsForFamilyNg));\n return;\n }\n const catalogAttributes = record.variantValuesObject[0].catalogProductData.Attributes || [];\n const attributes = [];\n let index = 0;\n const seen = new Set();\n this.categoryAttributes.forEach((categoryAttribute) => {\n seen.add(categoryAttribute.AttributeKey);\n if (catalogAttributes[index]?.AttributeKey === categoryAttribute.AttributeKey) {\n attributes.push(catalogAttributes[index]);\n index += 1;\n } else {\n const searchedIndex = catalogAttributes.indexOf(\n (attribute) => attribute.AttributeKey === categoryAttribute.AttributeKey,\n );\n if (searchedIndex >= 0) {\n attributes.push(catalogAttributes[searchedIndex]);\n index = searchedIndex + 1;\n } else {\n attributes.push({\n AttributeKey: categoryAttribute.AttributeKey,\n AttributeName: categoryAttribute.AttributeName,\n Value: '',\n });\n }\n }\n });\n catalogAttributes.forEach((catalogAttribute) => {\n if (!seen.has(catalogAttribute.AttributeKey)) {\n attributes.push(catalogAttribute);\n }\n });\n attributesPerRecord[record.variantValuesObject[0].ID] = attributes;\n });\n return attributesPerRecord;\n },\n displayedItems() {\n if (!this.searchProductsForFamilyNg) {\n return 0;\n }\n return Math.min(\n this.pagination.page * this.pagination.pageSize,\n this.searchProductsForFamilyNg.totalHits,\n );\n },\n pagingPercentage() {\n if (!this.searchProductsForFamilyNg) {\n return 0;\n }\n return (100 * this.displayedItems) / this.searchProductsForFamilyNg.totalHits;\n },\n isProductIsLoading() {\n if (!this.isMounted) {\n return false;\n }\n if (\n !this.$apollo.queries.searchProductsForFamilyNg ||\n this.$apollo.queries.searchProductsForFamilyNg.loading\n ) {\n return true;\n }\n return false;\n },\n isRetailConnect() {\n return this.$fischer.shop.isRetailConnect();\n },\n isRetailConnectCart() {\n return this.$fischer.shop.isRetailConnectCart();\n },\n retailerOutOfStock() {\n return (this.getRetailerAvailabilityForIds || []).map((availability) => {\n if (!availability) {\n // something went wrong, default to 'can search for retailers'\n return false;\n }\n return availability.stock === 'empty' || availability.stock === null;\n });\n },\n productIds() {\n const products = this.searchProductsForFamilyNg?.hits || [];\n return products.map((product) =>\n product.variantValuesObject ? product.variantValuesObject[0].ID : product.ID,\n );\n },\n filterUrlParams() {\n const search = [];\n\n this.filters.forEach((filter) => {\n search.push(\n `filter${encodeURIComponent(filter.associatedFieldName)}=${encodeURIComponent(\n stringifyFilterValue(filter),\n )}`,\n );\n });\n\n if (search.length === 0) {\n return '';\n }\n\n return `?${search.sort().join('&')}`;\n },\n facetsTransformed() {\n if (!this.searchProductsForFamilyNg) {\n return [];\n }\n return mergeFacets(\n this.searchProductsForFamilyNg.facetDataUnselected,\n this.searchProductsForFamilyNg.facets,\n this.getFamilyBaseFacetsNg || [],\n this.autoFilters || this.filters,\n );\n },\n paginationPageIndex() {\n return this.pagination.pageSize * this.pagination.page;\n },\n hasApprovalAttributes() {\n if (!this.products?.length) {\n return false;\n }\n const attributes = this.paddedAttributes[this.products[0]?.ID];\n\n if (!attributes || !this.approvals) {\n return false;\n }\n\n return attributes.some((a) => this.approvals.includes(a.AttributeKey));\n },\n },\n watch: {\n facetsLoaded(value) {\n if (!value) {\n return;\n }\n // clear filters set via url-param but not in base-facets\n this.filters.forEach((activeFilter) => {\n const baseFilter = this.getFamilyBaseFacetsNg.find(\n (baseFacet) => baseFacet.associatedFieldName === activeFilter.associatedFieldName,\n );\n const firstElement = baseFilter?.elements?.[0];\n if (\n !firstElement ||\n (firstElement.absoluteMinValue !== null &&\n firstElement.absoluteMinValue !== undefined &&\n firstElement.absoluteMinValue === firstElement.absoluteMaxValue)\n ) {\n this.changeFacet({\n value: false,\n element: {\n selected: false,\n name: activeFilter.name,\n associatedFieldName: activeFilter.associatedFieldName,\n },\n });\n }\n });\n },\n },\n created() {\n this.onCreated();\n },\n mounted() {\n const storedApprovalsEnabled = localStorage.getItem('productList:approvalsEnabled');\n if (storedApprovalsEnabled === 'true') {\n this.approvalsEnabled = true;\n }\n\n if (this.$fischer.cartId() && (this.$fischer.shop.isClosedShop() || this.isRetailConnectCart)) {\n this.getCart(false, true);\n }\n this.isMounted = true;\n },\n methods: {\n onCreated() {\n if (this.createdHook === 'onCreated' || this.createdHook === false) {\n return;\n }\n this.createdHook = 'onCreated';\n\n const initialPage = Number(this.$fischer.query('page')) || 1;\n this.pagination.initial = initialPage;\n this.pagination.page = initialPage;\n\n this.parseQueryParams();\n\n this.createdHook = false;\n },\n cleanName(name) {\n return factFinderNgNameCleaner(name);\n },\n factFinderNgNameCleaner(name) {\n return factFinderNgNameCleaner(name);\n },\n async addProduct(data) {\n const product = this.products.find((p) => p.ID === data.productID);\n if (product) {\n delete product.quantityIncreasedMessage;\n }\n\n this.addProductToCart(data);\n },\n parseQueryParams() {\n const changes = [];\n const search = this.$fischer.query();\n Object.keys(search).forEach((key) => {\n const match = /filter(.*)/.exec(key);\n if (!match) {\n return;\n }\n\n const [, name] = match;\n\n if (/[^~]~~[^~]/.test(name)) {\n const [nameShort] = name.split('~~');\n const values = /^([0-9.]+)-([0-9.]+)/.exec(search[key]);\n if (values) {\n changes.push({\n element: {\n name: nameShort,\n associatedFieldName: name,\n selectedMinValue: values[1],\n selectedMaxValue: values[2],\n selected: true,\n },\n value: true,\n });\n return;\n }\n }\n changes.push({\n element: {\n associatedFieldName: name,\n name: search[key],\n selected: true,\n },\n value: true,\n });\n });\n this.changeFacet(...changes);\n },\n changeFacet(...changes) {\n this.applyChanges(...changes);\n if (!this.useAutoFilters) {\n this.updateQueries();\n this.pushUriState();\n }\n },\n pushUriState() {\n if (IS_SSR) {\n return;\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 (!this.filterUrlParams && !customQuery.length && !window.location.search) {\n return;\n }\n\n let state = this.filterUrlParams;\n if (customQuery.length) {\n if (this.filterUrlParams) {\n state = `${this.filterUrlParams}&${customQuery.join('&')}`;\n } else {\n state = `?${customQuery.join('&')}`;\n }\n }\n\n window.history.replaceState('', '', state || '?');\n },\n clearAllFacets() {\n this.enableAutoFilters();\n this.filters = [];\n if (!this.createdHook) {\n this.updateQueries();\n this.pushUriState();\n }\n },\n productInCart(item) {\n let inCart = false;\n if (this.cart?.products) {\n inCart = this.cart.products.some(\n (product) => product.articleNo === item.catalogProductData.ProductId,\n );\n }\n return inCart;\n },\n createApolloVariables() {\n let id = this.$fischer.catalogId('1001340182');\n let language = this.$fischer.catalogLocale();\n let catalogLocale = this.$fischer.catalogLocale();\n\n // Use development data in development environment\n if (IS_SHOWROOM && this.devData) {\n id = this.devData.id;\n language = this.devData.language;\n catalogLocale = this.devData.language.replace('_', '-');\n }\n\n const extraFilters = [\n {\n associatedFieldName: 'Hidden_K',\n name: '!true',\n },\n ];\n\n return {\n id,\n factFinderChannel: this.$fischer.factFinderChannel(),\n channel: this.$fischer.brandId(),\n brand: this.$fischer.brandId(),\n baseSiteId: this.$fischer.baseSiteId(),\n language,\n hostname: this.$fischer.hostname(),\n page: this.pagination.initial,\n quantity: this.pagination.pageSize,\n accessToken: this.$fischer.user.accessToken(),\n userId: this.$fischer.user.id(),\n filters: (this.autoFilters || this.filters).map(toFilterInput),\n extraFilters,\n siteSecure: this.$fischer.isSecureConnection(),\n catalogLocale,\n maxHeadings: this.maxHeadings,\n noSitecoreLinks: true,\n useGtins: this.$fischer.useGtins(),\n };\n },\n updateQueries() {\n if (this.createdHook) {\n return;\n }\n this.pagination.initial = 1;\n this.pagination.page = 1;\n this.count += 1;\n },\n fetchMoreProducts() {\n this.pagination.page = this.pagination.page + 1;\n\n this.$apollo.queries.searchProductsForFamilyNg.fetchMore({\n variables: {\n ...this.createApolloVariables(),\n page: this.pagination.page,\n includeUnselectedFacets: false,\n },\n updateQuery: (previousResult, { fetchMoreResult }) => {\n const ret = {\n searchProductsForFamilyNg: {\n ...previousResult.searchProductsForFamilyNg,\n hits: [\n ...previousResult.searchProductsForFamilyNg.hits,\n ...fetchMoreResult.searchProductsForFamilyNg.hits,\n ],\n },\n };\n return ret;\n },\n });\n },\n getBestPriceForItem(item) {\n return this.bestPrices[item?.ID] || null;\n },\n setLegend() {\n this.showLegend = false;\n this.products.forEach(({ catalogProductData: { Attributes } = {} }) => {\n (Attributes || []).forEach(({ AttributeKey }) => {\n if (this.approvals.includes(AttributeKey)) {\n this.showLegend = true;\n }\n });\n });\n },\n removeQuantityHints() {\n this.products.forEach((p) => {\n delete p.quantityIncreasedMessage;\n });\n },\n getAttributes(attributes) {\n if (!attributes) {\n return [];\n }\n const attributesWithoutApprovals = attributes.filter(\n (a) => !this.approvals.includes(a.AttributeKey),\n );\n const allAttributes = this.approvalsEnabled ? attributes : attributesWithoutApprovals;\n const reducedAttributes = allAttributes.slice(0, this.maxHeadings);\n return reducedAttributes;\n },\n },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import './product-list-view-fi';\n</style>\n","<template>\n <component-wrapper class=\"product-family-fi\">\n <div class=\"product-family-fi__scroll-target\" />\n <headline-fi\n class=\"fi-hidden md:fi-block\"\n tag=\"h2\"\n :size=\"24\"\n >\n {{ $dict.get('product-Family.Anchor-Link-Text') }}\n </headline-fi>\n <product-list-view-fi\n :key=\"key\"\n :shop-type=\"shopType\"\n :dev-data=\"devData\"\n :family-line-drawing=\"familyLineDrawing\"\n :category-attributes=\"categoryAttributes\"\n :approvals=\"approvals\"\n click-source=\"product-family\"\n class=\"product-family-fi__container\"\n @ready=\"onReady\"\n />\n </component-wrapper>\n</template>\n\n<script>\nimport { HeadlineFi } from 'atoms';\nimport ComponentWrapper from 'components/component-wrapper/ComponentWrapper';\nimport ProductListViewFi from 'components/shop-modules/product-list-view/ProductListViewFi';\nimport accessPrivilegesMixin from 'mixins/accessPrivilegesMixin';\n\nexport default {\n name: 'ProductFamilyFi',\n components: {\n ProductListViewFi,\n ComponentWrapper,\n HeadlineFi,\n },\n mixins: [accessPrivilegesMixin],\n props: {\n devData: {\n type: Object,\n default: null,\n },\n familyLineDrawing: {\n type: [String, null],\n default: null,\n },\n categoryAttributes: {\n type: Array,\n default: () => [],\n },\n approvals: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['scrollToVariants'],\n data() {\n return {\n scrolledToProductList: false,\n };\n },\n computed: {\n shopType: {\n get() {\n return this.$store.getters['productList/getShopType'];\n },\n set(shopType) {\n this.$store.dispatch('productList/setShopType', shopType);\n },\n },\n key() {\n if (IS_SHOWROOM && this.devData) {\n return `${this.shopType}-${this.devData.id}-${this.devData.baseSiteId}-${this.devData.language}`;\n }\n\n return 'product-list-key';\n },\n },\n created() {\n this.setShopType();\n },\n mounted() {\n // we do this as soon as possible and again after results are loaded, which hopefully will happen in transit\n this.scrollToProductList();\n },\n methods: {\n setShopType() {\n let type;\n\n if (this.$fischer.shop.isRetailConnect()) {\n type = 'retailConnect';\n }\n if (this.$fischer.shop.isRetailConnectCart()) {\n type = 'retailConnectCart';\n }\n if (this.$fischer.shop.isClosedShop()) {\n type = 'closedShop';\n }\n\n if (this.hasAvailabilityStatusOnlyPermission) {\n type = 'retailConnect';\n }\n\n this.shopType = type || 'default';\n },\n async scrollToProductList() {\n if (IS_SSR) {\n return;\n }\n if (/\\bproductList\\b/.test(window.location.hash)) {\n await this.$nextTick();\n this.$emit('scrollToVariants');\n }\n },\n onReady() {\n if (this.scrolledToProductList) {\n return;\n }\n this.scrolledToProductList = true;\n this.scrollToProductList();\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\">\n@import './product-family-fi';\n</style>\n"],"file":"assets/ProductFamilyFi-BLzdPezd.js"}