{"version":3,"file":"PromotionTile.js","names":["PromotionTile","a","setters","Component","default","on","off","Event","DataLayer","mix","AnalyticsMixin","deepMerge","execute","with","afterInit","sendPromoImpressionsToAnalytics","initCache","selectors","links","element","hasAttribute","Array","from","querySelectorAll","bindEvents","forEach","onLinkClick","bind","e","target","analytics","event","index","options","setPosition","getIndex","position","label","extraData","dataLayer","getData","category","replace","page","id","emit","promoObject","data","all","getAnalyticsAttributeData","sendPromoClickToAnalytics","destroy"],"sources":["components/global/PromotionTile.js"],"sourcesContent":["import Component from 'core/Component';\nimport { on, off } from 'toolbox/event';\nimport { Event } from 'services/EventEmitter';\nimport DataLayer from 'services/DataLayer';\nimport { mix } from 'core/mixwith';\nimport AnalyticsMixin from 'mixins/Analytics';\nimport { deepMerge } from 'toolbox/deepMerge';\n\n/**\n * This is a description of the PromotionTile constructor function.\n * @class\n * @classdesc This is a description of the PromotionTile class.\n * @extends Component\n */\nexport default class PromotionTile extends mix(Component).with(AnalyticsMixin) {\n /**\n * Called after component initialization and setup service urls\n */\n afterInit() {\n this.sendPromoImpressionsToAnalytics();\n }\n\n /**\n * All selectors must be cached. Never cache elements that are out of the component scope\n */\n initCache() {\n this.selectors.links = this.element.hasAttribute('data-is-link') ? [this.element] : Array.from(this.element.querySelectorAll('[data-is-link]'));\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n this.selectors.links.forEach(element => on('click.promotiontile', element, this.onLinkClick.bind(this)));\n }\n\n /**\n * Link Click event handler\n * @param {Object} e event object\n */\n onLinkClick(e) {\n const { target } = e;\n if (this.analytics) {\n if (this.analytics.event) {\n const index = this.options.setPosition && this.getIndex();\n if (index) {\n const position = +index + 1;\n this.analytics.label = `${position}::${this.analytics.label}`;\n this.analytics.extraData.position = position;\n }\n\n const dataLayer = DataLayer.getData();\n this.analytics.category = this.analytics.category.replace(/{{pageType}}/i, dataLayer.page && dataLayer.page.id);\n Event.emit('analytics.event', this.analytics);\n } else if (this.analytics.promoObject) {\n const data = deepMerge.all([{}, this.analytics, this.getAnalyticsAttributeData(target) || {}]);\n this.sendPromoClickToAnalytics(data);\n }\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 this.selectors.links.forEach(element => off('click', element));\n }\n}\n"],"mappings":"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","ignoreList":[]}