{"version":3,"file":"basketTrackingService-Ci5PVtKE.js","sources":["../../../../Coloplast.UI/src/shared/services/tracking/utils.ts","../../../../Coloplast.UI/src/shared/services/tracking/basketTrackingService.ts"],"sourcesContent":["import { IHasTrackingParameters } from \"./interfaces/IHasTrackingParameters\";\r\nimport { IBasket } from \"./interfaces/IBasket\";\r\nimport { IBasketChanges } from \"./interfaces/IBasketChanges\";\r\nimport { IItemTrackingParameters } from \"./interfaces/IItemTrackingParameters\";\r\nimport IListNameAndId from \"./interfaces/IListNameAndId\";\r\n\r\nexport function extractTrackingInfoFromItemList(\r\n\titems: Array\r\n): Array {\r\n\treturn items.map((item) => item?.globalTrackingParameters);\r\n}\r\n\r\nexport function buildEcommerceSectionFromBasketDto(\r\n\tbasketDto: IBasket,\r\n\tadditionalEcommerceData: any = {}\r\n): any {\r\n\treturn {\r\n\t\tecommerce: {\r\n\t\t\t...basketDto.globalTrackingParameters,\r\n\t\t\t...additionalEcommerceData,\r\n\t\t\titems: [\r\n\t\t\t\t...extractTrackingInfoFromItemList(basketDto?.paid || []),\r\n\t\t\t\t...extractTrackingInfoFromItemList(basketDto?.samples || []),\r\n\t\t\t],\r\n\t\t},\r\n\t};\r\n}\r\n\r\nexport function buildEcommerceSectionFromBasketChangeDto(\r\n\tbasketChangeDto: IBasketChanges,\r\n\tadditionalEcommerceData: any = {}\r\n) {\r\n\treturn {\r\n\t\tecommerce: {\r\n\t\t\t...basketChangeDto.globalTrackingParameters,\r\n\t\t\t...additionalEcommerceData,\r\n\t\t\titems: [...extractTrackingInfoFromItemList(basketChangeDto?.items || [])],\r\n\t\t},\r\n\t};\r\n}\r\n\r\nexport function createEcommerceSectionFromItemTrackingParameters(\r\n\titemTrackinParameters: IItemTrackingParameters,\r\n\tadditionalEcommerceData: any = {}\r\n) {\r\n\treturn {\r\n\t\tecommerce: {\r\n\t\t\t...itemTrackinParameters?.globalTrackingParameters,\r\n\t\t\t...additionalEcommerceData,\r\n\t\t\titems: [...itemTrackinParameters?.items],\r\n\t\t},\r\n\t};\r\n}\r\n\r\nexport function buildEcommerceSectionFromItemListTrackingParameters({\r\n\tproductsDto,\r\n\tobservedProducts,\r\n\titemListIdAndName,\r\n}: {\r\n\tproductsDto: IHasTrackingParameters;\r\n\tobservedProducts: Array;\r\n\titemListIdAndName: IListNameAndId;\r\n}) {\r\n\treturn {\r\n\t\tecommerce: {\r\n\t\t\t...productsDto?.globalTrackingParameters,\r\n\t\t\t...itemListIdAndName,\r\n\t\t\titems: extractTrackingInfoFromItemList(observedProducts || []),\r\n\t\t},\r\n\t};\r\n}\r\n\r\n/**\r\n * Function checks if the GTM is enabled/disabled\r\n */\r\nexport function isGtmLoaded() {\r\n\twindow.dataLayer = window.dataLayer || [];\r\n\tconst gtmStartedEvent = window.dataLayer.find((element) => element['gtm.start']);\r\n\r\n\tif (!gtmStartedEvent) {\r\n\t\t// Not even the GTM inline config has executed\r\n\t\treturn false;\r\n\t} else if (!gtmStartedEvent['gtm.uniqueEventId']) {\r\n\t\t// GTM inline config has ran, but main GTM js is not loaded (likely AdBlock, NoScript, URL blocking etc.)\r\n\t\treturn false;\r\n\t}\r\n\treturn true; // GTM is fully loaded and working\r\n}\r\n\r\n/**\r\n * Function implements a guard for a callback, and executes it if the GTM callback is to be\r\n * invoked after the threshold time;\r\n *\r\n * If the GTM is disabled, the `callback` is invoked immediately\r\n *\r\n * @param callback - callback function, which shall be executed after the GTM event is flushed\r\n * @param threshold - threshold in ms; maximum time after which the callback will be executed\r\n * @returns {function} trackingFunction(`trackingFunction`, `...trackingArgs`)\r\n * @param trackingFunction - reference to a tracking function, which accepts callback as a last\r\n * parameter\r\n * @param trackingArgs - arguments of the tracking function\r\n *\r\n * @example\r\n * tryBeforeTimeout(\r\n * \t() => { window.location.href = response.data.redirectTo; },\r\n * \t2000\r\n * )(track_marketing_consent, basket.value, 'opt_in');\r\n */\r\nexport function tryBeforeTimeout(callback: () => void, threshold = 200) {\r\n\tif (!isGtmLoaded()) callback();\r\n\r\n\tlet callbackExecuted = false;\r\n\r\n\tconst lastResort = setTimeout(() => {\r\n\t\tcallback();\r\n\t\tcallbackExecuted = true;\r\n\t}, threshold);\r\n\r\n\treturn (trackingFunction: (...args: any[]) => void, ...trackingArgs: any[]) =>\r\n\t\ttrackingFunction(...trackingArgs, (containerId: string) => {\r\n\t\t\tif (callbackExecuted) return;\r\n\t\t\tif (containerId.startsWith('GTM-')) {\r\n\t\t\t\tclearTimeout(lastResort);\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t});\r\n}\r\n","import { trackEcommerce } from './core';\r\nimport {\r\n\tbuildEcommerceSectionFromBasketDto,\r\n\tbuildEcommerceSectionFromBasketChangeDto,\r\n} from './utils';\r\nimport { trackingEventNames } from '../../settings/constants';\r\n\r\nimport { IBasket } from './interfaces/IBasket';\r\nimport IPaymentType from './interfaces/IPaymentType';\r\nimport { IHasBasketChangesTrackingParameters } from './interfaces/IHasBasketChangesTrackingParameters';\r\nimport { IPurchase } from './interfaces/IPurchase';\r\nimport ICheckoutVersion from './interfaces/ICheckoutVersion';\r\n\r\nexport function track_view_basket(basket: IBasket, additionalEcommerceData: object) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.VIEW_CART,\r\n\t\t...buildEcommerceSectionFromBasketDto(basket, additionalEcommerceData),\r\n\t};\r\n\ttrackEcommerce(event);\r\n}\r\n\r\nexport function track_add_to_cart(basket: IHasBasketChangesTrackingParameters) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.ADD_TO_CART,\r\n\t\t...buildEcommerceSectionFromBasketChangeDto(\r\n\t\t\tbasket.basketChangeTrackingParameters\r\n\t\t),\r\n\t};\r\n\ttrackEcommerce(event);\r\n}\r\n\r\nexport function track_begin_checkout(basket: IBasket, additionalEcommerceData: object) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.BEGIN_CHECKOUT,\r\n\t\t...buildEcommerceSectionFromBasketDto(basket, additionalEcommerceData),\r\n\t};\r\n\ttrackEcommerce(event);\r\n}\r\n\r\nexport function track_remove_from_cart(\r\n\tbasket: IHasBasketChangesTrackingParameters\r\n) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.REMOVE_FROM_CART,\r\n\t\t...buildEcommerceSectionFromBasketChangeDto(\r\n\t\t\tbasket.basketChangeTrackingParameters\r\n\t\t),\r\n\t};\r\n\ttrackEcommerce(event);\r\n}\r\n\r\nexport function track_add_payment_info(\r\n\tbasket: IBasket,\r\n\tpaymentType: IPaymentType\r\n) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.ADD_PAYMENT_INFO,\r\n\t\t...buildEcommerceSectionFromBasketDto(basket, {\r\n\t\t\tpayment_type: paymentType,\r\n\t\t}),\r\n\t};\r\n\ttrackEcommerce(event);\r\n}\r\n\r\nexport function track_add_shipping_info(basket: IBasket) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.ADD_SHIPPING_INFO,\r\n\t\t...buildEcommerceSectionFromBasketDto(basket),\r\n\t};\r\n\ttrackEcommerce(event);\r\n}\r\n\r\nexport function track_purchase(\r\n\tpurchseResp: IPurchase,\r\n\tcheckoutVersion: ICheckoutVersion = 'sampling_2'\r\n) {\r\n\tconst event = {\r\n\t\tevent: trackingEventNames.PURCHASE,\r\n\t\tecommerce: {...purchseResp, checkout_version: checkoutVersion}\r\n\t};\r\n\ttrackEcommerce(event);\r\n}"],"names":["extractTrackingInfoFromItemList","items","item","buildEcommerceSectionFromBasketDto","basketDto","additionalEcommerceData","buildEcommerceSectionFromBasketChangeDto","basketChangeDto","createEcommerceSectionFromItemTrackingParameters","itemTrackinParameters","buildEcommerceSectionFromItemListTrackingParameters","productsDto","observedProducts","itemListIdAndName","isGtmLoaded","gtmStartedEvent","element","tryBeforeTimeout","callback","threshold","callbackExecuted","lastResort","trackingFunction","trackingArgs","containerId","track_view_basket","basket","event","trackingEventNames","trackEcommerce","track_add_to_cart","track_begin_checkout","track_remove_from_cart","track_add_payment_info","paymentType","track_add_shipping_info","track_purchase","purchseResp","checkoutVersion"],"mappings":"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"}