{"version":3,"mappings":";yLAcA,MAAMA,EAAgB,UAAM,OAAO,4BAAsB,0BAM1CC,EAAA,CACb,OAAQ,CAACC,CAAa,EACtB,SAAU,CACR,QAAkB,CACT,OAAAC,EAAe,KAAK,QAAQ,CACrC,EACA,WAAoB,CACX,YAAK,SAAS,WACvB,EACA,gBAA0B,CACjB,OAAAC,EAAuB,KAAK,QAAQ,CAC7C,EACA,oBAA8B,CACrB,OAAAC,EAA2B,KAAK,QAAQ,CACjD,EACA,UAAmB,CACjB,OAAO,OAAO,SAAS,QACzB,CACF,EACA,QAAS,CACP,kBAAkBC,EAAoBC,EAAsB,CACtD,IACE,IAAC,KAAK,eACR,OAGF,MAAMC,EAA6B,GACvBF,EAAA,QAAQ,CAACG,EAAcC,IAAkB,CACnD,GAAI,CAACD,EACH,OAGI,MAAAE,EAAWF,EAAQ,eAAiB,cACpCG,EAA0B,CAC9B,UAAWH,EAAQ,MAAQA,EAAQ,aAAeA,EAAQ,aAC1D,QAASE,EAAWF,EAAQ,IAAM,KAAOA,EAAQ,WAAaA,EAAQ,GACtE,WAAY,KAAK,UACjB,eAAgBF,EAAQ,cAAgB,iBACxC,aAAcA,EAAQ,QAAU,KAAK,SACrC,MAAOG,EAAQ,EACf,GAAG,KAAK,cAAcD,EAAQ,uBAAuB,GAGvDD,EAAM,KAAKI,CAAI,EAChB,EAEGJ,EAAM,QACH,oBAAe,iBAAkBA,CAAK,QAEtCK,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,MAAM,cAAcE,EAAWJ,EAAkC,SAC3D,IACE,IAAC,KAAK,eACR,OAGI,MAAAK,EAAWL,GACbM,EAAAF,EAAK,SAAS,KAAMG,GAAYA,EAAG,MAAQ,aAAa,IAAxD,YAAAD,EAA2D,OAC3DE,EAAAJ,EAAK,SAAS,KAAMG,GAAYA,EAAG,MAAQ,UAAU,IAArD,YAAAC,EAAwD,MACtDC,EAAST,EAAWI,EAAK,WAAaA,EAAK,UAEjD,IAAIH,EAA0B,CAC5B,UAAWI,EACX,QAASI,EACT,WAAY,KAAK,UACjB,GAAG,KAAK,cAAcL,EAAK,uBAAuB,GAG/CJ,IACHC,EAAK,aAAeG,EAAK,aAG3B,KAAM,CAAE,MAAAM,EAAO,SAAAC,EAAU,SAAAC,EAAU,WAAAC,CAAW,EAAI,MAAM,KAAK,oBAC3DT,EAAK,WAEHM,IACFT,EAAK,MAAQS,EACbT,EAAK,SAAWU,GAGd,IAAAG,EACAD,IACUC,EAAA,CACV,SAAAF,EACA,MAAOC,CAAA,GAIX,KAAK,eAAe,YAAa,CAACZ,CAAI,EAAGa,CAAS,QAC3CZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,MAAM,gBAAgBJ,EAAcF,EAA+B,CAC7D,IACE,IAAC,KAAK,eACR,OAGI,MAAAI,EAAWF,EAAQ,eAAiB,cACtC,IAACA,EAAQ,cAAgBE,EAAU,CACrC,MAAMC,EAA0B,CAC9B,UAAWH,EAAQ,MAAQA,EAAQ,aACnC,QAASE,EAAWF,EAAQ,IAAM,KAAOA,EAAQ,GACjD,WAAY,KAAK,UACjB,eAAgBF,EAAQ,cAAgB,iBACxC,aAAcA,EAAQ,QAAU,KAAK,SACrC,MAAO,EACP,GAAG,KAAK,cAAcE,EAAQ,uBAAuB,GAEvD,KAAK,eAAe,cAAe,CAACG,CAAI,CAAC,CAC3C,QACOC,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,MAAM,0BAA0BJ,EAA6B,OACvD,IACF,GAAI,EAAE,KAAK,gBAAkB,KAAK,oBAChC,OAKF,MAAMG,EAA0B,CAC9B,WAHeK,EAAAR,EAAQ,SAAS,KAAMS,GAAYA,EAAG,MAAQ,UAAU,IAAxD,YAAAD,EAA2D,MAI1E,QAASR,EAAQ,UACjB,WAAY,KAAK,UACjB,aAAcA,EAAQ,YACtB,GAAG,KAAK,cAAcA,EAAQ,uBAAuB,GAGjD,CAAE,MAAAY,EAAO,SAAAC,EAAU,SAAAC,EAAU,WAAAC,CAAW,EAAI,MAAM,KAAK,oBAC3Df,EAAQ,WAENY,IACFT,EAAK,MAAQS,EACbT,EAAK,SAAWU,GAGd,IAAAG,EACAD,IACUC,EAAA,CACV,SAAAF,EACA,MAAOC,CAAA,GAIX,KAAK,eAAe,kBAAmB,CAACZ,CAAI,EAAGa,CAAS,QACjDZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,uBAAuBa,EAAiB,SAClC,IACF,GAAI,EAAE,KAAK,gBAAkB,KAAK,oBAChC,OAGI,MAAAlB,EAA6B,KAAK,aAAakB,CAAI,EACnDD,EAAY,CAChB,UAAUR,EAAAS,EAAK,WAAL,YAAAT,EAAe,YACzB,OAAOE,EAAAO,EAAK,WAAL,YAAAP,EAAe,OAEpBX,EAAM,QACH,oBAAe,kBAAmBA,EAAOiB,CAAS,QAElDZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,cAAca,EAAiB,SACzB,IACF,GAAI,EAAE,KAAK,gBAAkB,KAAK,oBAChC,OAGI,MAAAlB,EAA6B,KAAK,aAAakB,CAAI,EAEnDD,EAAY,CAChB,UAAUR,EAAAS,EAAK,WAAL,YAAAT,EAAe,YACzB,OAAOE,EAAAO,EAAK,WAAL,YAAAP,EAAe,OAGpBX,EAAM,QACH,oBAAe,YAAaA,EAAOiB,CAAS,QAE5CZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,MAAM,eACJc,EACAC,EACAC,EACAC,EACe,SACX,IACF,GAAI,EAAE,KAAK,gBAAkB,KAAK,oBAChC,OAGF,MAAMC,EAAYH,EAAkB,SAAS,EAAG,GAAG,EAC7CnB,EAAU,MAAM,KAAK,eAAesB,CAAS,EACnD,GAAI,CAACtB,EAAS,CACJ,aAAK,8BAA8BsB,CAAS,EAAE,EACtD,MACF,CAIA,IAAInB,EAA0B,CAC5B,WAHeO,GAAAF,EAAAR,EAAQ,WAAR,YAAAQ,EAAkB,KAAMC,GAAYA,EAAG,MAAQ,cAA/C,YAAAC,EAA4D,MAI3E,QAASY,EACT,WAAY,KAAK,UACjB,aAActB,EAAQ,YACtB,SAAUoB,EACV,GAAG,KAAK,cAAcpB,EAAQ,uBAAuB,GAGjD,MAAE,MAAAY,EAAO,SAAAE,EAAU,WAAAC,GAAe,MAAM,KAAK,oBAAoBO,EAAWF,CAAG,EACjFR,IACFT,EAAK,MAAQS,GAGX,IAAAI,EACAD,IACUC,EAAA,CACV,SAAAF,EACA,MAAOC,CAAA,GAGX,KAAK,eAAe,cAAe,CAACZ,CAAI,EAAGa,CAAS,EACpD,MAAMjB,EAA6B,KAAK,SAAS,KAAK,eAClD,CACE,CACE,UAAAuB,EACA,SAAUF,EACV,aAAcL,EACd,SAAAD,CACF,GAEF,CACE,CACE,UAAAQ,CACF,GAGD,eAAUD,EAAe,wBAA0B,cAAe,CACrE,OAAAH,EACA,MAAAnB,CAAA,CACD,QACMK,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,MAAM,uBACJc,EACAK,EAIe,CACT,MAAAC,GAAS,MAAMjC,EAAA,GAAiB,QAC/B,OAAAkC,EACLP,EACAK,EACA,KAAK,SACJG,GACC,KAAK,QAAQ,MAAM,CACjB,MAAAF,EACA,YAAa,MACb,UAAAE,CAAA,CACD,EACH,CAACC,EAAMrB,IAAS,KAAK,UAAUqB,EAAMrB,CAAI,EAE7C,EACA,MAAM,oBAAoBT,EAAiC,CACrD,IACF,GAAI,EAAE,KAAK,gBAAkB,KAAK,oBAChC,OAGF,MAAME,EAA6B,GACvBF,EAAA,QAASG,GAAiB,SACpC,IAAIG,EAA0B,CAC5B,UAAWH,EAAQ,KACnB,QAASA,EAAQ,UACjB,WAAY,KAAK,UACjB,cAAcQ,EAAAR,EAAQ,qBAAR,YAAAQ,EAA4B,YAC1C,SAAUR,EAAQ,SAClB,GAAG,KAAK,eAAcU,EAAAV,EAAQ,qBAAR,YAAAU,EAA4B,uBAAuB,GAGvEV,EAAQ,YAAcA,EAAQ,kBAC3BG,EAAA,MAAQH,EAAQ,WAAaA,EAAQ,iBAG5CD,EAAM,KAAKI,CAAI,EAChB,EAEI,oBAAe,mBAAoBJ,CAAK,QACtCK,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,mBAAmBa,EAAiB,SAC9B,IACF,GAAI,EAAE,KAAK,gBAAkB,KAAK,oBAChC,OAGI,MAAAlB,EAA6B,KAAK,aAAakB,CAAI,EACnDD,EAAY,CAChB,UAAUR,EAAAS,EAAK,WAAL,YAAAT,EAAe,YACzB,OAAOE,EAAAO,EAAK,WAAL,YAAAP,EAAe,OAGpBX,EAAM,QACH,oBAAe,iBAAkBA,EAAOiB,CAAS,QAEjDZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,cAAca,EAAiB,aACzB,IACF,GAAI,CAAC,KAAK,gBAAkB,CAAC,KAAK,mBAChC,OAGF,MAAMW,EAAc,GAAG,KAAK,SAAS,SAAS,CAAC,IAAI,KAAK,SACrD,eACA,YAAa,KACV7B,EAA6B,KAAK,aAAakB,CAAI,EACnDD,EAAY,CAChB,YAAAY,EACA,UAAUpB,EAAAS,EAAK,WAAL,YAAAT,EAAe,YACzB,OAAOE,EAAAO,EAAK,WAAL,YAAAP,EAAe,MACtB,KAAKmB,EAAAZ,EAAK,WAAL,YAAAY,EAAe,MACpB,UAAUC,EAAAb,EAAK,eAAL,YAAAa,EAAmB,MAC7B,eAAgBb,EAAK,KACrB,cAAe,KAAK,UAAY,uBAAyB,oBAGvDlB,EAAM,QACH,oBAAe,WAAYA,EAAOiB,CAAS,QAE3CZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,2BAA2Ba,EAAWc,EAA4B,CAC5D,IACF,GAAI,CAAC,KAAK,gBAAkB,CAAC,KAAK,mBAChC,OAGI,MAAAhC,EAA6B,KAAK,aAAakB,CAAI,EACnDD,EAAY,CAChB,aAAAe,EACA,UAAWhC,GAAA,YAAAA,EAAO,QAGf,oBAAe,sBAAuBA,EAAOiB,CAAS,QACpDZ,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBC,EAAiBD,CAAK,CACxB,CACF,EACA,aAAaa,EAAgC,OAC3C,MAAMlB,EAA6B,GAC/B,OAAAS,EAAAS,GAAA,YAAAA,EAAM,WAAN,MAAAT,EAAgB,QACbS,EAAA,SAAS,QAASjB,GAAiB,CAChC,MAAAgC,EAAchC,EAAQ,oBAAsB,GAC5CG,EAA0B,CAC9B,QAASH,EAAQ,UACjB,UAAWA,EAAQ,KACnB,WAAY,KAAK,UACjB,aAAcgC,EAAY,YAC1B,GAAG,KAAK,cAAcA,EAAY,uBAAuB,GAGvD,KAAK,SACF7B,EAAA,MAAQH,EAAQ,WAAaA,EAAQ,gBAC1CG,EAAK,SAAWH,EAAQ,UAG1BD,EAAM,KAAKI,CAAI,EAChB,EAGIJ,CACT,EACA,cAAckC,EAAyC,CACrD,MAAMC,EAAgC,GACtC,OAAID,GAAA,MAAAA,EAAO,QACHA,EAAA,QAAQ,CAACxB,EAAS0B,IAAgB,CACtCD,EAAWC,IAAQ,EAAI,gBAAkB,gBAAgBA,EAAM,CAAC,EAAE,EAAI1B,CAAA,CACvE,EAEIyB,CACT,EACA,MAAM,oBACJf,EACAC,EAAc,EAMb,CACK,MAAAI,GAAS,MAAMjC,EAAA,GAAiB,QAC/B,OAAA6C,EAA4BjB,EAAmBC,EAAK,KAAK,SAAWM,GACzE,KAAK,QAAQ,MAAM,CACjB,MAAAF,EACA,YAAa,MACb,UAAAE,CAAA,CACD,EAEL,EACA,MAAM,eAAeJ,EAAwC,CACvD,IACF,KAAM,CAAE,KAAAhB,CAAK,EAAI,MAAM,KAAK,QAAQ,MAAM,CACxC,MAAO+B,EACP,YAAa,MACb,UAAW,CACT,WAAY,KAAK,SAAS,WAAW,EACrC,QAAS,KAAK,SAAS,cAAc,EACrC,GAAIf,CACN,EACD,EAED,OAAOhB,EAAK,2BAA6B,WAClCF,EAAO,CACN,qBAAM,6BAA8BkB,EAAWlB,CAAK,EACrD,IACT,CACF,EACA,eAAekC,EAAevC,EAA4BiB,EAA0B,CAK9E,OAAO,OAAO,MAAS,WAClB,YAAK,QAASsB,EAAO,CAC1B,GAAGtB,EACH,MAAAjB,CAAA,CACD,GAEM,iBAAY,OAAO,WAAa,GACvC,OAAO,UAAU,KAAK,CACpB,MAAAuC,EACA,UAAW,CACT,GAAGtB,EACH,MAAAjB,CACF,EACD,EAEL,CACF,CACF","names":["GET_BESTPRICE","_sfc_main","eventHubMixin","isShopFunction","enableTrackingFunction","enableTrackingShopFunction","productList","isPDP","items","product","index","isFamily","item","error","captureException","data","ecomLang","_a","el","_b","itemId","price","quantity","currency","totalPrice","ecommerce","cart","cartId","productIdUnpadded","qty","fromMemoList","productId","productsWithQuantity","query","trackAddMultipleToCartFunction","variables","type","affiliation","_c","_d","retailerName","productData","paths","categories","idx","getPriceForTrackingFunction","GET_CATALOG_PRODUCT_DATA_BY_ID","event"],"ignoreList":[],"sources":["../../src/mixins/trackingMixin.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { captureException } from '@sentry/browser';\nimport {\n  enableTrackingFunction,\n  enableTrackingShopFunction,\n  getPriceForTrackingFunction,\n  isShopFunction,\n  trackAddMultipleToCartFunction,\n  type TrackingEventItem,\n} from 'composables/tracking';\nimport GET_CATALOG_PRODUCT_DATA_BY_ID from 'gql/getCatalogProductDataById.gql';\nimport eventHubMixin from 'mixins/eventHubMixin.vue';\n\n// @ts-ignore\nconst GET_BESTPRICE = () => import('gql/getBestPrice.gql');\n\ntype StringKeyedObject = {\n  [key: string]: any;\n};\n\nexport default {\n  mixins: [eventHubMixin],\n  computed: {\n    isShop(): boolean {\n      return isShopFunction(this.$fischer);\n    },\n    brandName(): string {\n      return this.$fischer.brandName();\n    },\n    enableTracking(): boolean {\n      return enableTrackingFunction(this.$fischer);\n    },\n    enableTrackingShop(): boolean {\n      return enableTrackingShopFunction(this.$fischer);\n    },\n    pageType(): string {\n      return window.location.pathname;\n    },\n  },\n  methods: {\n    trackViewItemList(productList: any[], isPDP: boolean): void {\n      try {\n        if (!this.enableTracking) {\n          return;\n        }\n\n        const items: TrackingEventItem[] = [];\n        productList.forEach((product: any, index: number) => {\n          if (!product) {\n            return;\n          }\n\n          const isFamily = product.CategoryRole === 'FAMILY_PAGE';\n          const item: TrackingEventItem = {\n            item_name: product.name || product.ProductName || product.CategoryName,\n            item_id: isFamily ? product.id || 'FP' : product.ProductId || product.id,\n            item_brand: this.brandName,\n            item_list_name: isPDP ? 'accessories' : 'Featured Items',\n            item_list_id: isPDP ? 'A-PDP' : this.pageType,\n            index: index + 1,\n            ...this.getCategories(product.CategoryDisplayNamePath),\n          };\n\n          items.push(item);\n        });\n\n        if (items.length) {\n          this.addToDataLayer('view_item_list', items);\n        }\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    async trackViewItem(data: any, isFamily: boolean): Promise<void> {\n      try {\n        if (!this.enableTracking) {\n          return;\n        }\n\n        const ecomLang = isFamily\n          ? data.TextList.find((el: any) => el.Key === 'BEZEICHNUNG')?.Value\n          : data.TextList.find((el: any) => el.Key === 'ECOMLANG')?.Value;\n        const itemId = isFamily ? data.CategoryId : data.ProductId;\n\n        let item: TrackingEventItem = {\n          item_name: ecomLang,\n          item_id: itemId,\n          item_brand: this.brandName,\n          ...this.getCategories(data.CategoryDisplayNamePath),\n        };\n\n        if (!isFamily) {\n          item.item_variant = data.ProductName;\n        }\n\n        const { price, quantity, currency, totalPrice } = await this.getPriceForTracking(\n          data.ProductId,\n        );\n        if (price) {\n          item.price = price;\n          item.quantity = quantity;\n        }\n\n        let ecommerce;\n        if (totalPrice) {\n          ecommerce = {\n            currency: currency,\n            value: totalPrice,\n          };\n        }\n\n        this.addToDataLayer('view_item', [item], ecommerce);\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    async trackSelectItem(product: any, isPDP: boolean): Promise<void> {\n      try {\n        if (!this.enableTracking) {\n          return;\n        }\n\n        const isFamily = product.CategoryRole === 'FAMILY_PAGE';\n        if (!product.CategoryRole || isFamily) {\n          const item: TrackingEventItem = {\n            item_name: product.name || product.CategoryName,\n            item_id: isFamily ? product.id || 'FP' : product.id,\n            item_brand: this.brandName,\n            item_list_name: isPDP ? 'accessories' : 'Featured Items',\n            item_list_id: isPDP ? 'A-PDP' : this.pageType,\n            index: 1,\n            ...this.getCategories(product.CategoryDisplayNamePath),\n          };\n          this.addToDataLayer('select_item', [item]);\n        }\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    async trackAddProductToWishlist(product: any): Promise<void> {\n      try {\n        if (!(this.enableTracking && this.enableTrackingShop)) {\n          return;\n        }\n\n        const ecomLang = product.TextList.find((el: any) => el.Key === 'ECOMLANG')?.Value;\n\n        const item: TrackingEventItem = {\n          item_name: ecomLang,\n          item_id: product.ProductId,\n          item_brand: this.brandName,\n          item_variant: product.ProductName,\n          ...this.getCategories(product.CategoryDisplayNamePath),\n        };\n\n        const { price, quantity, currency, totalPrice } = await this.getPriceForTracking(\n          product.ProductId,\n        );\n        if (price) {\n          item.price = price;\n          item.quantity = quantity;\n        }\n\n        let ecommerce;\n        if (totalPrice) {\n          ecommerce = {\n            currency: currency,\n            value: totalPrice,\n          };\n        }\n\n        this.addToDataLayer('add_to_wishlist', [item], ecommerce);\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    trackAddCartToWishlist(cart: any): void {\n      try {\n        if (!(this.enableTracking && this.enableTrackingShop)) {\n          return;\n        }\n\n        const items: TrackingEventItem[] = this.getCartItems(cart);\n        const ecommerce = {\n          currency: cart.subTotal?.currencyIso,\n          value: cart.subTotal?.value,\n        };\n        if (items.length) {\n          this.addToDataLayer('add_to_wishlist', items, ecommerce);\n        }\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    trackViewCart(cart: any): void {\n      try {\n        if (!(this.enableTracking && this.enableTrackingShop)) {\n          return;\n        }\n\n        const items: TrackingEventItem[] = this.getCartItems(cart);\n\n        const ecommerce = {\n          currency: cart.subTotal?.currencyIso,\n          value: cart.subTotal?.value,\n        };\n\n        if (items.length) {\n          this.addToDataLayer('view_cart', items, ecommerce);\n        }\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    async trackAddToCart(\n      cartId: number | string,\n      productIdUnpadded: string,\n      qty: number,\n      fromMemoList: boolean,\n    ): Promise<void> {\n      try {\n        if (!(this.enableTracking && this.enableTrackingShop)) {\n          return;\n        }\n\n        const productId = productIdUnpadded.padStart(6, '0');\n        const product = await this.getProductById(productId);\n        if (!product) {\n          console.info(`product not found with id: ${productId}`);\n          return;\n        }\n\n        const ecomLang = product.TextList?.find((el: any) => el.Key === 'ECOMLANG')?.Value;\n\n        let item: TrackingEventItem = {\n          item_name: ecomLang,\n          item_id: productId,\n          item_brand: this.brandName,\n          item_variant: product.ProductName,\n          quantity: qty,\n          ...this.getCategories(product.CategoryDisplayNamePath),\n        };\n\n        const { price, currency, totalPrice } = await this.getPriceForTracking(productId, qty);\n        if (price) {\n          item.price = price;\n        }\n\n        let ecommerce;\n        if (totalPrice) {\n          ecommerce = {\n            currency: currency,\n            value: totalPrice,\n          };\n        }\n        this.addToDataLayer('add_to_cart', [item], ecommerce);\n        const items: TrackingEventItem[] = this.$fischer.shop.isClosedShop()\n          ? [\n              {\n                productId: productId,\n                quantity: qty,\n                productPrice: totalPrice,\n                currency,\n              },\n            ]\n          : [\n              {\n                productId: productId,\n              },\n            ];\n\n        this.sendEvent(fromMemoList ? 'memo_list_cart_single' : 'add_to_cart', {\n          cartId,\n          items,\n        });\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    async trackAddMultipleToCart(\n      cartId: number | string,\n      productsWithQuantity: {\n        id: string;\n        quantity: number;\n      }[],\n    ): Promise<void> {\n      const query = (await GET_BESTPRICE()).default;\n      return trackAddMultipleToCartFunction(\n        cartId,\n        productsWithQuantity,\n        this.$fischer,\n        (variables) =>\n          this.$apollo.query({\n            query,\n            errorPolicy: 'all',\n            variables,\n          }),\n        (type, data) => this.sendEvent(type, data),\n      );\n    },\n    async trackRemoveFromCart(productList: any): Promise<void> {\n      try {\n        if (!(this.enableTracking && this.enableTrackingShop)) {\n          return;\n        }\n\n        const items: TrackingEventItem[] = [];\n        productList.forEach((product: any) => {\n          let item: TrackingEventItem = {\n            item_name: product.name,\n            item_id: product.articleNo,\n            item_brand: this.brandName,\n            item_variant: product.catalogProductData?.ProductName,\n            quantity: product.quantity,\n            ...this.getCategories(product.catalogProductData?.CategoryDisplayNamePath),\n          };\n\n          if (product.priceValue && product.initialQuantity) {\n            item.price = product.priceValue / product.initialQuantity;\n          }\n\n          items.push(item);\n        });\n\n        this.addToDataLayer('remove_from_cart', items);\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    trackBeginCheckout(cart: any): void {\n      try {\n        if (!(this.enableTracking && this.enableTrackingShop)) {\n          return;\n        }\n\n        const items: TrackingEventItem[] = this.getCartItems(cart);\n        const ecommerce = {\n          currency: cart.subTotal?.currencyIso,\n          value: cart.subTotal?.value,\n        };\n\n        if (items.length) {\n          this.addToDataLayer('begin_checkout', items, ecommerce);\n        }\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    trackPurchase(cart: any): void {\n      try {\n        if (!this.enableTracking && !this.enableTrackingShop) {\n          return;\n        }\n\n        const affiliation = `${this.$fischer.hostname()}/${this.$fischer\n          .siteLanguage()\n          .toLowerCase()}/`;\n        const items: TrackingEventItem[] = this.getCartItems(cart);\n        const ecommerce = {\n          affiliation,\n          currency: cart.subTotal?.currencyIso,\n          value: cart.subTotal?.value,\n          tax: cart.totalTax?.value,\n          shipping: cart.deliveryCost?.value,\n          transaction_id: cart.code,\n          order_channel: this.isAppView ? 'myfischer online APP' : 'myfischer online',\n        };\n\n        if (items.length) {\n          this.addToDataLayer('purchase', items, ecommerce);\n        }\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    trackOnlineRetailerClicked(cart: any, retailerName: string): void {\n      try {\n        if (!this.enableTracking && !this.enableTrackingShop) {\n          return;\n        }\n\n        const items: TrackingEventItem[] = this.getCartItems(cart);\n        const ecommerce = {\n          retailerName,\n          cartItems: items?.length,\n        };\n\n        this.addToDataLayer('RCClickedOnRetailer', items, ecommerce);\n      } catch (error) {\n        console.error(error);\n        captureException(error);\n      }\n    },\n    getCartItems(cart: any): TrackingEventItem[] {\n      const items: TrackingEventItem[] = [];\n      if (cart?.products?.length) {\n        cart.products.forEach((product: any) => {\n          const productData = product.catalogProductData || {};\n          const item: TrackingEventItem = {\n            item_id: product.articleNo,\n            item_name: product.name,\n            item_brand: this.brandName,\n            item_variant: productData.ProductName,\n            ...this.getCategories(productData.CategoryDisplayNamePath),\n          };\n\n          if (this.isShop) {\n            item.price = product.priceValue / product.initialQuantity;\n            item.quantity = product.quantity;\n          }\n\n          items.push(item);\n        });\n      }\n\n      return items;\n    },\n    getCategories(paths: string[]): Record<string, string> {\n      const categories: StringKeyedObject = {};\n      if (paths?.length) {\n        paths.forEach((el: any, idx: number) => {\n          categories[idx === 0 ? 'item_category' : `item_category${idx + 1}`] = el;\n        });\n      }\n      return categories;\n    },\n    async getPriceForTracking(\n      productIdUnpadded: string,\n      qty: number = 0,\n    ): Promise<{\n      price: number | undefined;\n      quantity: number;\n      currency: string;\n      totalPrice: number | undefined;\n    }> {\n      const query = (await GET_BESTPRICE()).default;\n      return getPriceForTrackingFunction(productIdUnpadded, qty, this.$fischer, (variables) =>\n        this.$apollo.query({\n          query,\n          errorPolicy: 'all',\n          variables,\n        }),\n      );\n    },\n    async getProductById(productId: string): Promise<any | null> {\n      try {\n        const { data } = await this.$apollo.query({\n          query: GET_CATALOG_PRODUCT_DATA_BY_ID,\n          errorPolicy: 'all',\n          variables: {\n            baseSiteId: this.$fischer.baseSiteId(),\n            apiLang: this.$fischer.catalogLocale(),\n            id: productId,\n          },\n        });\n\n        return data.getCatalogProductDataById || null;\n      } catch (error) {\n        console.error('error getting product data', productId, error);\n        return null;\n      }\n    },\n    addToDataLayer(event: string, items: TrackingEventItem[], ecommerce?: object): void {\n      if (IS_SSR) {\n        return;\n      }\n\n      if (typeof window.gtag === 'function') {\n        window.gtag('event', event, {\n          ...ecommerce,\n          items,\n        });\n      } else {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: event,\n          ecommerce: {\n            ...ecommerce,\n            items,\n          },\n        });\n      }\n    },\n  },\n};\n</script>\n"],"file":"assets/trackingMixin.vue_vue_type_script_lang-CdbAbS-V.js"}