{"version":3,"file":"js/app.be012c34875f6af24abe.js","mappings":"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","sources":["webpack:///./resources/area/web/default/js/components/catalog/product/ProductAddToCart.vue?78e8","webpack:///./resources/area/web/default/js/shared/helpers/enhanced-ecommerce/index.ts","webpack:///./resources/area/web/default/js/components/catalog/product/ProductAddToCart.vue","webpack:///./resources/area/web/default/js/components/catalog/product/ProductAddToCart.vue?f2b3","webpack:///./resources/area/web/default/js/components/catalog/product/ProductAddToCart.vue?e047"],"sourcesContent":["\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-add-to-cart',\n  components: ServiceContainer().getComponents()\n})\n\nexport default class extends Vue {\n  @Prop({required: true}) private product!: object;\n  @Prop({required: false, default: 1}) private qty: number;\n  @Prop({required: false, default: null}) private type: string | null;\n  @Prop({required: false, default: null}) private shopByLook: object | null;\n  @Prop({required: false, default: false}) private isSaleable: boolean;\n\n  private loadingAddToQuote: boolean = false;\n  private productAdded: boolean = false;\n  private async addToQuoteAction(): Promise<any> {\n    this.loadingAddToQuote = true;\n\n    try {\n      let productPayload = {\n        sku: this.product['sku'],\n        qty: this.qty,\n      };\n\n      await this.$store.dispatch('CheckoutQuote/addProductToQuote', productPayload);\n\n      await this.$store.dispatch('GlobalMessages/addGlobalMessage', {\n        id: `add-${this.product['sku']}`,\n        message: this.$t('{productName} has been added to your shopping cart', { productName: this.product['name'] }),\n        type: '--success'\n      });\n      this.productAdded = true;\n\n      if(this.shopByLook) {\n        enhancedEcommerce.addShopByLookDatalayer(this.shopByLook, this.product);\n        return;\n      }\n      if('crosssell' === this.type) {\n        enhancedEcommerce.addCrossSellDatalayer(this.product);\n        location.reload();\n\n        return;\n      }\n\n      enhancedEcommerce.addProductAddToCart(this.product, this.qty);\n    } catch (e) {\n      const response = e.response.data;\n\n      await this.$store.dispatch('GlobalMessages/addGlobalMessage', {\n        id: `error-${this.product['sku']}`,\n        message: this.$t(JSON.parse(response.exception)['message']),\n        type: '--error'\n      });\n\n      this.loadingAddToQuote = false;\n    } finally {\n      this.loadingAddToQuote = false;\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 \"./ProductAddToCart.vue?vue&type=template&id=fa3a8e5e&\"\nimport script from \"./ProductAddToCart.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductAddToCart.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!./ProductAddToCart.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!./ProductAddToCart.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:{ '--loading-cart': _vm.loadingAddToQuote, '--added': _vm.productAdded && _vm.type == 'upsell' },attrs:{\"disabled\":_vm.loadingAddToQuote || !_vm.isSaleable},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.addToQuoteAction.apply(null, arguments)}}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"],"names":["Vue","loadingAddToQuote","productAdded","addToQuoteAction","this","productPayload","sku","product","qty","$store","dispatch","id","message","$t","productName","type","shopByLook","enhancedEcommerce","addShopByLookDatalayer","addCrossSellDatalayer","location","reload","addProductAddToCart","e","response","data","JSON","parse","exception","Prop","required","default","Component","name","components","getComponents","EnhancedEcommerce","addProductImpressions","products","listType","startIndex","impressions","hasImpressionView","window","dataLayer","filter","length","forEach","p","i","push","hasOwnProperty","join","addProductClick","index","addProductDetail","addCheckout","step","option","productList","event","toLowerCase","category","action","label","price","value","render","_vm","_h","$createElement","_self","_c","class","attrs","isSaleable","on","$event","preventDefault","stopPropagation","apply","arguments","staticRenderFns"],"sourceRoot":""}