{"version":3,"file":"js/app.ba4096c7cb6c4d829808.js","mappings":"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","sources":["webpack:///./resources/area/web/default/js/components/catalog/ProductList.vue?55bd","webpack:///./resources/area/web/default/js/shared/helpers/enhanced-ecommerce/index.ts","webpack:///./resources/area/web/default/js/components/catalog/ProductList.vue","webpack:///./resources/area/web/default/js/components/catalog/ProductList.vue?d763","webpack:///./resources/area/web/default/js/components/catalog/ProductList.vue?416e"],"sourcesContent":["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Vue, Prop} from 'vue-property-decorator';\nimport ServiceContainer from '@flashpointbv/solar-service-container';\nimport {enhancedEcommerce} from '../../shared/helpers/enhanced-ecommerce';\n\n@Component({\n name: 'catalog-product-list',\n components: ServiceContainer().getComponents()\n})\n\nexport default class extends Vue {\n @Prop({required: true}) readonly dataSource: string;\n @Prop({default: () => []}) private wishlistItems: Array<object>;\n @Prop() private bannerData: object;\n\n private itemsPerRow: number = this.$mobileDetect.mobile() ? 2 : 4;\n private bannerCount: object = {\n 'mobile': 0,\n 'desktop': 0\n };\n\n private get isLoading(): boolean {\n return this.$store.getters[`${this.dataSource}/isLoading`] || false;\n }\n\n private get products(): Array<object> {\n return this.$store.getters[`${this.dataSource}/productList`] || [];\n }\n\n private dataLayerObserver(): void {\n let observerOptions = {\n root: null,\n rootMargin: '0px',\n threshold: 0\n }\n\n let observer = new IntersectionObserver(this.addProductImpressions, observerOptions);\n let observeTargets = document.getElementById('impressions-observable').getElementsByTagName('li');\n\n for (let i = 0; i < observeTargets.length; i++) {\n if (i % this.itemsPerRow === 0) {\n observer.observe(observeTargets[i]);\n }\n }\n }\n\n private addProductImpressions(entries: IntersectionObserverEntry[], observer: IntersectionObserver): void {\n const productsClone = this.products;\n entries.map(entry => {\n if (entry.isIntersecting) {\n const itemIndex = parseInt(entry.target.getAttribute('data-index'));\n enhancedEcommerce.addProductImpressions(productsClone.slice(itemIndex, itemIndex + this.itemsPerRow), 'product-list', itemIndex);\n\n observer.unobserve(entry.target);\n }\n });\n }\n\n private created(): void {\n if (this.bannerData) {\n this.bannerCount = {\n 'mobile': (this.bannerData['row_number'] * 2) + (this.bannerData['right'] && !this.bannerData['full_width'] ? -1 : -2),\n 'desktop': (this.bannerData['row_number'] * 4) + (this.bannerData['right'] && !this.bannerData['full_width'] ? -1 : -4)\n };\n }\n }\n\n private mounted(): void {\n window.addEventListener('load', () => {\n this.dataLayerObserver();\n })\n }\n}\n","class EnhancedEcommerce {\n addProductImpressions(products: Array<object>, listType: string = 'product-list', startIndex: number = 0): void {\n const impressions: Array<object> = [];\n const hasImpressionView = window.dataLayer.filter(e => e['event'] === 'ImpressionView').length;\n\n products.forEach((p, i) => {\n impressions.push({\n 'name': p['name'],\n 'id': p['product_id'],\n 'price': p['final_price_incl_tax'],\n 'sku': p['sku'],\n 'ean': p['erp_ean'] || '',\n 'brand': p['xenos_merk'] || 'Xenos',\n 'category': p.hasOwnProperty('category_names') ? p['category_names'].join(' | ') : '',\n 'variant': p['xen_kleur'] || '',\n 'dimension20': p['gses_durability_score_rating'] || null,\n 'list': listType,\n 'position': ((startIndex + i) + 1)\n });\n });\n\n window.dataLayer.push({\n 'event': startIndex !== 0 && hasImpressionView > 0 ? 'ImpressionsPushed' : 'ImpressionView',\n 'ecommerce': {\n 'currencyCode': 'EUR',\n 'impressions': impressions\n }\n });\n }\n\n addProductClick(product: object, index: string | number | boolean | symbol): void {\n window.dataLayer.push({\n 'event': 'productClick',\n 'ecommerce': {\n 'click': {\n 'actionField': {\n 'list': 'product-list'\n },\n 'products': [{\n 'name': product['name'],\n 'id': product['product_id'],\n 'price': product['final_price_incl_tax'],\n 'sku': product['sku'],\n 'ean': product['erp_ean'] || '',\n 'brand': product['xenos_merk'] || 'Xenos',\n 'category': product.hasOwnProperty('category_names') ? product['category_names'].join(' | ') : '',\n 'variant': product['xen_kleur'] || '',\n 'dimension20': product['gses_durability_score_rating'] || null,\n 'position': (index as number) + 1\n }]\n }\n }\n });\n }\n\n addProductDetail(product: object): void {\n window.dataLayer.push({\n 'ecommerce': {\n 'detail': {\n 'products': [{\n 'name': product['name'],\n 'id': product['product_id'],\n 'price': product['final_price_incl_tax'],\n 'sku': product['sku'],\n 'ean': product['erp_ean'] || '',\n 'brand': product['xenos_merk'] || 'Xenos',\n 'category': product.hasOwnProperty('category_names') ? product['category_names'].join(' | ') : '',\n 'variant': product['xen_kleur'] || '',\n 'dimension20': product['gses_durability_score_rating'] || null,\n }]\n }\n }\n });\n }\n\n addProductAddToCart(product: object, qty: number = 1): void {\n window.dataLayer.push({\n 'event': 'addToCart',\n 'ecommerce': {\n 'currencyCode': 'EUR',\n 'add': {\n 'products': [{\n 'name': product['name'],\n 'id': product['product_id'],\n 'price': product['final_price_incl_tax'],\n 'sku': product['sku'],\n 'ean': product['erp_ean'] || '',\n 'brand': product['xenos_merk'] || 'Xenos',\n 'category': product.hasOwnProperty('category_names') ? product['category_names'].join(' | ') : '',\n 'variant': product['xen_kleur'] || '',\n 'dimension20': product['gses_durability_score_rating'] || null,\n 'quantity': qty\n }]\n }\n }\n });\n }\n\n addCrossSellDatalayer(product: object, qty: number = 1): void {\n window.dataLayer.push({\n 'event': 'addtocart-checkout',\n 'ecommerce': {\n 'currencyCode': 'EUR',\n 'add': {\n 'products': [{\n 'name': product['name'],\n 'id': product['product_id'],\n 'price': product['final_price_incl_tax'],\n 'sku': product['sku'],\n 'ean': product['erp_ean'] || '',\n 'brand': product['xenos_merk'] || 'Xenos',\n 'category': product.hasOwnProperty('category_names') ? product['category_names'].join(' | ') : '',\n 'variant': product['xen_kleur'] || '',\n 'dimension20': product['gses_durability_score_rating'] || null,\n 'quantity': qty\n }]\n }\n }\n });\n }\n\n addCheckout(products: Array<object>, step: number, option: string = ''): void {\n const productList: Array<object> = [];\n\n if (step === 1) {\n window.dataLayer.push({\n 'event': 'checkout',\n 'ecommerce': {\n 'checkout': {\n 'actionField': {'step': step, 'option': option},\n 'products': productList\n }\n }\n });\n\n products.forEach(p => {\n productList.push({\n 'name': p['name'],\n 'id': p['item_id'],\n 'price': p['row_total_incl_tax'],\n 'sku': p['extension_attributes']['sku'] || '',\n 'ean': p['extension_attributes']['ean'] || '',\n 'brand': p['extension_attributes']['brand'] || 'Xenos',\n 'category': '',\n 'variant': p['extension_attributes']['variant'] || '',\n 'dimension20': p['gses_durability_score_rating'] || null,\n 'quantity': p['qty']\n });\n });\n } else {\n window.dataLayer.push({\n 'event': 'checkoutOption',\n 'ecommerce': {\n 'checkout_option': {\n 'actionField': {'step': step, 'option': option}\n }\n }\n });\n }\n }\n\n addShopByLookDatalayer(shopByLook: object, product: object | null = null): void {\n if (typeof window.dataLayer === 'undefined') {\n return;\n }\n\n window.dataLayer.push({\n event: `${shopByLook['title'].toLowerCase()}-click`,\n category: shopByLook['title'],\n action: 'click',\n label: shopByLook['title'],\n price: product ? product['final_price_incl_tax'] : shopByLook['final_price'],\n value: product ? `Add to cart: ${product['name']}` : `Add to cart`\n });\n }\n}\n\nconst enhancedEcommerce = new EnhancedEcommerce();\n\nexport {enhancedEcommerce};\n","import { render, staticRenderFns } from \"./ProductList.vue?vue&type=template&id=6af64e01&\"\nimport script from \"./ProductList.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductList.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductList.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"catalog-category__list\",class:(\"block-\" + (_vm.$parent['blockId'] || 0)),attrs:{\"id\":\"impressions-observable\"}},[(_vm.isLoading)?_c('div',{staticClass:\"--loading\"}):_vm._e(),_vm._v(\" \"),(_vm.products.length === 0 && !_vm.isLoading)?_c('p',{staticClass:\"global__message--bg --warning\"},[_vm._v(_vm._s(_vm.$t('No products were found in this category.')))]):_vm._e(),_vm._v(\" \"),_c('ul',{staticClass:\"grid-x grid-padding-x\"},[_vm._l((_vm.products),function(product,index){return [(_vm.bannerData && (_vm.bannerCount['mobile'] === index || _vm.bannerCount['desktop'] === index))?_c('catalog-product-list-banner',{attrs:{\"index\":index,\"banner-data\":_vm.bannerData,\"banner-count\":_vm.bannerCount}}):_vm._e(),_vm._v(\" \"),_c('catalog-product-list-item',{key:(\"\" + (product['id'])),attrs:{\"data-source\":_vm.dataSource,\"product\":product,\"wishlist-items\":_vm.wishlistItems,\"index\":index}})]})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"],"names":["Vue","itemsPerRow","this","$mobileDetect","mobile","bannerCount","isLoading","$store","getters","dataSource","products","dataLayerObserver","observer","IntersectionObserver","addProductImpressions","root","rootMargin","threshold","observeTargets","document","getElementById","getElementsByTagName","i","length","observe","entries","productsClone","map","entry","isIntersecting","itemIndex","parseInt","target","getAttribute","enhancedEcommerce","slice","unobserve","created","bannerData","mounted","window","addEventListener","Prop","required","default","Array","Component","name","components","getComponents","EnhancedEcommerce","listType","startIndex","impressions","hasImpressionView","dataLayer","filter","e","forEach","p","push","hasOwnProperty","join","addProductClick","product","index","addProductDetail","addProductAddToCart","qty","addCrossSellDatalayer","addCheckout","step","option","productList","addShopByLookDatalayer","shopByLook","event","toLowerCase","category","action","label","price","value","render","_vm","_h","$createElement","_c","_self","staticClass","class","$parent","attrs","_e","_v","_s","$t","_l","key","wishlistItems","staticRenderFns"],"sourceRoot":""}