{"version":3,"file":"Analytics.js","names":["Mixin","a","Event","deepMerge","mediaQuery","modifaceStore","default","Registry","execute","superclass","constructor","element","options","arguments","length","onViewportAnalytics","analyticsObserverOptions","afterInit","initAnalyticsObserver","analyticsObserver","window","IntersectionObserver","onAnalyticsObserve","bind","observe","entries","forEach","entry","isIntersecting","emit","_initEventAnalytics","target","onlyTarget","dataTarget","getAttribute","analytics","getAnalyticsAttributeData","data","JSON","parse","e","lora","debug","console","error","_setAnalytics","breakpoints","getCurrentViewportAnalytics","responsiveAnalytics","Object","some","mq","mqAnalytics","isCurrentMQ","is","getAnalytics","content","keys","Array","isArray","events","arrayMerge","source","concat","updateVirtualPage","customData","sendAnalytics","eventsData","eventData","eventType","sendProductImpressionToAnalytics","sendProductClickToAnalytics","sendCustomAnalytics","customAnalytics","dataset","getProductAnalytics","waitingPoint","querySelector","dynamicAnalyticsCallback","registerElement","Promise","resolve","dynamicAnalytics","detail","products","product","pid","assign","stopPropagation","getIndex","indexElement","selectors","hasAttribute","parentElement","getPromotionCreative","sourceElt","closest","containerEltAnalytics","promoObject","creative","getPromotionPosition","index","position","sendPromoImpressionsToAnalytics","name","event","action","label","extraData","event_name","id","toLowerCase","ecommerce","tracked","setIndexesForContainer","container","childrenToIndex","querySelectorAll","children","from","setAttribute","sendPromoClickToAnalytics","eventLabel","promoClick","promotions","hasProductAnalytics","uniqueImpression","sfb2ccAnalyticsData","getSfb2cAnalyticsData","allowMultipleImpression","uniqueImpressionPerMaster","getEnrichedProductsData","matches","tilesContainer","tilesContainerAnalytics","getEcommerceEventLabel","placement","category","click","actionField","list","currentTarget","productsType","getProductsType","labelValues","push","join","productsCount","isBundle","isSubProductNotPartOfSet","isProductSet","productSetId","getProductImpressionKey","impressionKeyContainer","isVTOActivated","store","get","mode","vtoActivationHistory","sfb2cc","sku","impressionType","recommenderName","getProductPlacement","getProductPosition","getProductRecommendationProvider","recommendationsProvider","map","vtoState","impressionKey","destroy","unobserve","disconnect"],"sources":["mixins/Analytics.js"],"sourcesContent":["/* eslint max-lines: [\"error\", {\"max\": 400, \"skipBlankLines\": true, \"skipComments\": true }] */\n/* eslint complexity: [\"error\", {\"max\": 10}] */\n\nimport { Mixin } from 'core/mixwith';\nimport { Event } from 'services/EventEmitter';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { mediaQuery } from 'toolbox/mediaQuery';\nimport modifaceStore from 'stores/ModifaceVTO';\nimport Registry from 'core/ComponentRegistry';\n\n/**\n * A mixin that add analytics feature to any component.\n */\nexport default Mixin(superclass => class extends superclass {\n /**\n * @constructor\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options That belongs to the component\n */\n constructor(element, options = {}) {\n super(element, deepMerge({\n onViewportAnalytics: null,\n analyticsObserverOptions: {},\n }, options));\n }\n\n /**\n * After init\n * Run any script after the component is fully initialized\n */\n afterInit() {\n super.afterInit();\n if (this.options.onViewportAnalytics) {\n this.initAnalyticsObserver();\n }\n }\n\n /**\n * Initialize IntersectionObserver for the element\n */\n initAnalyticsObserver() {\n const options = this.options.analyticsObserverOptions;\n this.analyticsObserver = new window.IntersectionObserver(this.onAnalyticsObserve.bind(this), options);\n this.analyticsObserver.observe(this.element);\n }\n\n /**\n * triggered when section appears in view port.\n * @param {Object[]} entries IntersectionObserverEntry objects\n */\n onAnalyticsObserve(entries) {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n Event.emit('analytics.event', this.options.onViewportAnalytics);\n }\n });\n }\n\n /**\n * Changes analytics data dynamically, depending on the element which caused component action.\n * used in onAction handler in Form.js and onTrigger handler in EventTrigger.js\n *\n * @param {HTMLElement} target HTML element to use as a source to set analytics data\n * @param {Boolean} onlyTarget get analytics data only from target\n */\n _initEventAnalytics(target = null, onlyTarget = false) {\n let dataTarget = target || this.element;\n\n if (target && !onlyTarget && !target.getAttribute('data-analytics')) {\n dataTarget = this.element;\n }\n\n this.analytics = this.getAnalyticsAttributeData(dataTarget);\n }\n\n /**\n * Returns analytics data, depending on the target element\n *\n * @param {HTMLElement} target HTML element to use as a source of analytics data\n * @return {Object|null} analytics data\n */\n getAnalyticsAttributeData(target) {\n const analytics = target && target.getAttribute('data-analytics');\n let data;\n\n if (analytics) {\n try {\n data = JSON.parse(analytics);\n } catch (e) {\n if (window.lora.debug) {\n console.error(`Please check that the data-analytics you have passed for \"${target}\" respect JSON format`);\n }\n }\n }\n\n if (data) {\n // set analytics considering the current viewport\n data = this._setAnalytics(data);\n }\n\n return data || null;\n }\n\n /**\n * Set the analytics, depending on the viewport\n * @param {Object} analytics of the component\n * @returns {Object} - set the analytics considering the current viewport\n */\n _setAnalytics(analytics) {\n let data;\n\n if (!analytics) {\n return null;\n }\n\n if (analytics.breakpoints) {\n // check if we have any breakpoint configuration available for the current viewport\n data = this.getCurrentViewportAnalytics(analytics.breakpoints);\n } else {\n data = analytics;\n }\n\n return data;\n }\n\n /**\n * Get contextual analytics specific to a viewport\n * @param {Object} breakpoints - All Breakpoint analytics list\n * @returns {Object} - Get the analytics belonging to the current viewport\n */\n getCurrentViewportAnalytics(breakpoints) {\n let responsiveAnalytics;\n\n Object.entries(breakpoints).some(([mq, mqAnalytics]) => {\n const isCurrentMQ = mediaQuery.is(mq);\n if (isCurrentMQ) {\n responsiveAnalytics = mqAnalytics;\n }\n return isCurrentMQ;\n });\n\n return responsiveAnalytics;\n }\n\n /**\n * Extends current analytics data by analytics from response and return result object\n *\n * @param {Object} content response object\n * @returns {Object} data analytics\n */\n getAnalytics(content) {\n let data = this.analytics;\n\n if (data && Object.keys(data).length) {\n if (content && content.analytics) {\n if (Array.isArray(data.events) || Array.isArray(content.analytics.events)) {\n // eslint-disable-next-line max-depth\n if (!Array.isArray(data.events)) {\n data.events = [data];\n }\n // eslint-disable-next-line max-depth\n if (!Array.isArray(content.analytics.events)) {\n content.analytics.events = [content.analytics];\n }\n data = deepMerge(data, content.analytics, {\n arrayMerge: (target, source) => target.concat(source),\n });\n } else {\n data = deepMerge(data, content.analytics);\n }\n }\n delete data.afterInit;\n } else {\n data = content ? content.analytics : null;\n }\n\n return data;\n }\n\n /**\n * Update virtual page data\n * @param { Object } data - Analytics data of the virtual page\n * @param { Object } customData - Analytics custom data of the virtual page\n */\n updateVirtualPage(data, customData) {\n if (data && Object.keys(data).length) {\n Event.emit('analytics.virtualPage', data, customData);\n }\n }\n\n /**\n * Send Analytics data\n *\n * @param {Object} data analytics data\n */\n sendAnalytics(data) {\n if (!data || !Object.keys(data).length) {\n return;\n }\n\n const eventsData = data.events || [data];\n eventsData.forEach((eventData) => {\n switch (eventData.eventType) {\n // TO DO, move promoImpression, and potentially productClick promotionClick here\n case 'productImpression':\n this.sendProductImpressionToAnalytics();\n break;\n case 'productClick':\n this.sendProductClickToAnalytics();\n break;\n default:\n Event.emit('analytics.event', eventData);\n }\n });\n }\n\n /**\n * Send Custom Analytics data\n *\n * @param {HTMLElement} target HTML element to use as a source of custom analytics data\n */\n sendCustomAnalytics(target) {\n const { customAnalytics } = target.dataset;\n\n if (customAnalytics) {\n Event.emit('analytics.event', JSON.parse(customAnalytics));\n }\n }\n\n /**\n * Merge static and dynamic analytics and return\n * @returns {Object} promice, full analytics on resolve\n */\n getProductAnalytics() {\n const waitingPoint = this.element.querySelector('[data-analytics-wait]');\n if (waitingPoint) {\n this.dynamicAnalyticsCallback = null;\n Registry.registerElement(waitingPoint);\n return new Promise((resolve) => {\n this.dynamicAnalyticsCallback = (e) => {\n const dynamicAnalytics = e.detail.analytics;\n\n if (this.analytics && this.analytics.products\n && dynamicAnalytics && dynamicAnalytics.product\n ) {\n this.analytics.products.forEach((product) => {\n if (dynamicAnalytics.product.pid === product.pid) {\n Object.assign(product, dynamicAnalytics.product);\n }\n });\n }\n\n e.stopPropagation();\n resolve(this.analytics);\n };\n });\n }\n\n return Promise.resolve(this.analytics);\n }\n\n /**\n * Gets index data\n * @return {string} index data\n */\n getIndex() {\n const indexElement = this.selectors.indexElement\n || (this.element.hasAttribute('data-index') && this.element)\n || (this.element.parentElement.hasAttribute('data-index') && this.element.parentElement)\n || null;\n return indexElement && indexElement.getAttribute('data-index');\n }\n\n // --- functions below concerns promotions ----\n\n /**\n * Gets impression creative\n * @return {String} creative value\n */\n getPromotionCreative() {\n const sourceElt = this.element.closest('[data-js-layout]') || this.element.closest('[data-js-container]') || this.element;\n const containerEltAnalytics = this.getAnalyticsAttributeData(sourceElt);\n return (containerEltAnalytics && containerEltAnalytics.promoObject && containerEltAnalytics.promoObject.creative)\n || 'banner';\n }\n\n /**\n * Gets impression position\n * @return {String} position value\n */\n getPromotionPosition() {\n const index = this.getIndex();\n\n return `slot${this.analytics.promoObject.position || (index && index + 1) || 1}`;\n }\n\n /**\n * Sends Promo Impressions to analytics\n */\n sendPromoImpressionsToAnalytics() {\n if (this.analytics && this.analytics.promoObject && !this.element.hasAttribute('data-is-duplicate')) {\n const position = this.getPromotionPosition();\n const creative = this.getPromotionCreative();\n const name = this.analytics.promoObject.name || '';\n Event.emit('analytics.event', {\n eventType: 'promoImpression',\n event: 'nievent',\n action: 'Promotion Impressions',\n label: 'Promotion Impressions',\n extraData: {\n event_name: 'view_promotion',\n },\n promoObject: {\n id: this.analytics.promoObject.id,\n name: this.analytics.promoObject.id === 'video' ? name : name.toLowerCase(),\n creative: creative ? creative.toLowerCase() : '',\n position,\n },\n ecommerce: {},\n });\n this.element.dataset.tracked = true;\n }\n }\n\n /**\n * Sets index data to the child elements\n * @param {Object} container container element\n */\n setIndexesForContainer(container) {\n if (!container) {\n return;\n }\n let childrenToIndex = container.querySelectorAll('[data-js-product-item]');\n if (childrenToIndex.length === 0) {\n childrenToIndex = container.children;\n }\n Array.from(childrenToIndex).forEach((element, index) => {\n if (!element.hasAttribute('data-index')) {\n element.setAttribute('data-index', index);\n }\n });\n }\n\n /**\n * Sends Promo Click data to analytics\n * @param {Object} data analytics data\n */\n sendPromoClickToAnalytics(data = this.analytics) {\n if (data.promoObject) {\n const position = this.getPromotionPosition();\n const creative = this.getPromotionCreative();\n const name = data.promoObject.name || '';\n const eventLabel = `${data.promoObject.id === 'video' ? name : name.toLowerCase()}::${data.promoObject.id}`;\n Event.emit('analytics.event', {\n event: 'promotionClick',\n action: 'Promotion Click',\n label: eventLabel,\n extraData: {\n event_name: 'select_promotion',\n },\n ecommerce: {\n promoClick: {\n promotions: [{\n id: data.promoObject.id,\n name: data.promoObject.id === 'video' ? name : name.toLowerCase(),\n creative: creative ? creative.toLowerCase() : '',\n position,\n }],\n },\n },\n });\n }\n }\n\n // --- functions below concerns products ----\n\n /**\n * check if component has product analytics\n * @returns {boolean} - result\n */\n hasProductAnalytics() {\n return this.analytics && this.analytics.products && this.analytics.products.length > 0 && !this.element.hasAttribute('data-is-duplicated');\n }\n\n /**\n * Send product impression\n */\n sendProductImpressionToAnalytics() {\n if (!this.hasProductAnalytics()) {\n return;\n }\n\n Event.emit('analytics.event', {\n eventType: 'productImpression',\n action: 'Product Impressions',\n extraData: { event_name: 'view_item_list' },\n ecommerce: {},\n uniqueImpression: this.analytics.uniqueImpression,\n sfb2ccAnalyticsData: this.getSfb2cAnalyticsData(),\n allowMultipleImpression: this.options && this.options.allowMultipleImpression,\n uniqueImpressionPerMaster: this.options && this.options.uniqueImpressionPerMaster,\n product: this.getEnrichedProductsData(),\n });\n\n this.element.dataset.tracked = true;\n }\n\n /**\n * Send product click event\n * @param {event} e event data\n */\n sendProductClickToAnalytics(e) {\n if ((!e || !e.target.matches('[data-js-swatch]'))\n && this.analytics\n && this.analytics.products\n && this.analytics.products.length) {\n const tilesContainer = this.element.closest('[data-js-container]');\n const tilesContainerAnalytics = this.getAnalyticsAttributeData(tilesContainer);\n const eventLabel = this.getEcommerceEventLabel(this.analytics.products) || 'Product Click';\n\n this.analytics.products.forEach((product) => {\n delete product.placement;\n });\n\n Event.emit('analytics.event', {\n eventType: 'productClick',\n event: 'productClick',\n category: 'Ecommerce',\n action: 'Product Click',\n label: eventLabel,\n extraData: {\n event_name: 'select_item',\n },\n ecommerce: {\n click: {\n actionField: {\n list: tilesContainerAnalytics ? tilesContainerAnalytics.placement : '',\n },\n products: this.analytics.products,\n },\n },\n });\n\n this.sendCustomAnalytics(e.currentTarget);\n }\n }\n\n /**\n * Gets the Enhanced Ecommerce event label, used in events like Product Click, Product Detail, Add/Remove from Cart\n * @param {Array} products array\n * @return {String} event label value\n */\n getEcommerceEventLabel(products) {\n if (!products || !products.length) {\n return '';\n }\n\n const productsType = this.getProductsType(products);\n const labelValues = [];\n\n if (productsType === 'standardProductType') {\n labelValues.push(products[0].name && products[0].name.toLowerCase());\n labelValues.push(products[0].id);\n } else if (productsType === 'bundleProductType') {\n labelValues.push(products[0].id);\n } else if (productsType === 'setProductType' || productsType === 'nonSetProductType') {\n products.forEach((product) => {\n labelValues.push(product.id);\n });\n }\n\n return labelValues.join('::');\n }\n\n /**\n * Gets the type of products, as in standard type or bundle type or product set type\n * or possibly a different type if conditions are not met\n * @param {Array} products array\n * @return {String} type of the products\n */\n getProductsType(products) {\n const productsCount = products.length;\n\n if (productsCount === 1 && !products[0].isBundle) {\n return 'standardProductType';\n }\n\n if (productsCount === 1 && products[0].isBundle) {\n return 'bundleProductType';\n }\n\n if (productsCount > 1) {\n const isSubProductNotPartOfSet = products.some(product => !product.isProductSet && !product.productSetId);\n\n return (!isSubProductNotPartOfSet && 'setProductType') || 'nonSetProductType';\n }\n\n return '';\n }\n\n /**\n * Gets impression key\n * @return {String} position value\n */\n getProductImpressionKey() {\n const impressionKeyContainer = this.element.closest('[data-js-impression-key]');\n return impressionKeyContainer && impressionKeyContainer.getAttribute('data-js-impression-key');\n }\n\n /**\n * Check is VTO activated for product\n * @param {String} pid product id\n * @returns {Boolean} is VTO activated\n */\n isVTOActivated(pid) {\n const store = modifaceStore.get();\n return !!(store && store.mode !== 'consultation' && (store.isVTOActivated || (store.vtoActivationHistory && store.vtoActivationHistory[pid])));\n }\n\n /**\n * get sfb2ccAnalyticsData\n * @returns {Object} sfb2ccAnalyticsData\n */\n getSfb2cAnalyticsData() {\n const tilesContainer = this.element.closest('[data-js-container]');\n const tilesContainerAnalytics = this.getAnalyticsAttributeData(tilesContainer);\n const placement = tilesContainerAnalytics && tilesContainerAnalytics.placement;\n const sfb2cc = tilesContainerAnalytics && tilesContainerAnalytics.sfb2cc;\n let sfb2ccAnalyticsData = {\n pid: '',\n sku: '',\n impressionType: 'none',\n recommenderName: '',\n placement: placement ? placement.toLowerCase() : '',\n sfb2cc,\n };\n\n if (this.analytics.sfb2cc) {\n sfb2ccAnalyticsData = deepMerge(sfb2ccAnalyticsData, this.analytics.sfb2cc);\n }\n\n return sfb2ccAnalyticsData;\n }\n\n /**\n * get product placement\n * @param {object} product - productAnalytics\n * @param {Object} tilesContainerAnalytics - analytics object recovered container element\n * @returns {string} - placement\n */\n getProductPlacement(product, tilesContainerAnalytics) {\n return product.placement\n || (tilesContainerAnalytics && tilesContainerAnalytics.placement && tilesContainerAnalytics.placement.toLowerCase())\n || '';\n }\n\n /**\n * get position of product in its container\n * @param {HTMLElement} tilesContainer - container element\n * @returns {Number} - position\n */\n getProductPosition(tilesContainer) {\n let index = this.getIndex();\n if (!index) {\n this.setIndexesForContainer(tilesContainer);\n index = this.getIndex();\n }\n return +index + 1;\n }\n\n /**\n * get recommnendationProvider from container element\n * @param {Object} tilesContainerAnalytics - analytics objectr recovered container element\n * @returns {string} recommendation provider\n */\n getProductRecommendationProvider(tilesContainerAnalytics) {\n return (tilesContainerAnalytics && tilesContainerAnalytics.recommendationsProvider\n && tilesContainerAnalytics.recommendationsProvider.toLowerCase())\n || '';\n }\n\n /**\n * get products data enriched with conatiner analtyics\n * @returns {Object} -\n */\n getEnrichedProductsData() {\n const tilesContainer = this.element.closest('[data-js-container]');\n const tilesContainerAnalytics = this.getAnalyticsAttributeData(tilesContainer);\n return this.analytics.products.map((product) => {\n product.placement = this.getProductPlacement(product, tilesContainerAnalytics);\n product.position = this.getProductPosition(tilesContainer);\n product.recommendationsProvider = this.getProductRecommendationProvider(tilesContainerAnalytics);\n if (this.isVTOActivated(this.options && this.options.pid)) {\n product.vtoState = 'activated';\n }\n if (this.getProductImpressionKey()) {\n product.impressionKey = this.getProductImpressionKey();\n }\n return product;\n });\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n if (this.analyticsObserver) {\n this.analyticsObserver.unobserve(this.element);\n this.analyticsObserver.disconnect();\n }\n super.destroy();\n }\n});\n"],"mappings":"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","ignoreList":[]}