{"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"}