{"version":3,"file":"MiniCart.js","names":["MiniCart","a","setters","Event","SlidingPanel","default","deepMerge","on","off","mediaQuery","getData","execute","constructor","element","options","arguments","length","showOnProductAdded","showBreakpoint","skipMiniCartOnClick","confirmationModal","keepOverlayOpened","url","pagesExcluded","classNames","overlaid","isMediaChange","initState","state","isOverlaid","isLink","is","bindEvents","selectors","content","onMiniCartSubmitSuccess","bind","onProductAdded","onMiniCartShow","onMiniCartUpdate","onModalOpen","onModalClose","afterInit","updateButtonRole","onMediaQueryChange","emit","event","detail","setContent","hide","e","showMiniCart","show","isActive","loadContent","onTriggerClick","indexOf","page","id","window","location","href","cart","togglePanel","setTimeout","category","action","label","extraData","event_name","cta_name","preventDefault","target","classList","add","remove","onBeforeOverlayClose","dataset","jsButtonRole","destroy","removeListener"],"sources":["components/cart/MiniCart.js"],"sourcesContent":["import { Event } from 'services/EventEmitter';\nimport SlidingPanel from 'components/global/SlidingPanel';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { on, off } from 'toolbox/event';\nimport { mediaQuery } from 'toolbox/mediaQuery';\nimport { getData } from 'services/DataLayer';\n\n/**\n * This is a description of the MiniCart constructor function.\n * @class\n * @classdesc This is a description of the MiniCart class.\n * @extends SlidingPanel\n */\nexport default class MiniCart extends SlidingPanel {\n /**\n * Constructor of the class that mainly merge the options of the components\n *\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 showOnProductAdded: true,\n showBreakpoint: 'xlarge',\n skipMiniCartOnClick: false,\n confirmationModal: {\n keepOverlayOpened: true,\n },\n url: {},\n pagesExcluded: ['cart'],\n classNames: {\n overlaid: 'm-overlaid',\n },\n isMediaChange: true,\n }, options));\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n super.initState();\n this.state.isOverlaid = false;\n // Check if the minicart works as a link to Cart page\n // true - the click/tap redirects a user to cart page\n // false - the click/tap opens the minicart\n this.state.isLink = !mediaQuery.is(this.options.showBreakpoint) || this.options.skipMiniCartOnClick;\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 anonymous function\n */\n bindEvents() {\n super.bindEvents();\n on('minicart.submit.success', this.selectors.content, this.onMiniCartSubmitSuccess.bind(this));\n Event.on('cart.product.added', this.onProductAdded, this);\n Event.on('minicart.show', this.onMiniCartShow, this);\n Event.on('minicart.update', this.onMiniCartUpdate, this);\n Event.on('modal.open.before', this.onModalOpen, this);\n Event.on('modal.close.after', this.onModalClose, this);\n }\n\n /**\n * After init\n * Run any script after the component is fully initialized\n */\n afterInit() {\n super.afterInit();\n\n this.updateButtonRole();\n }\n\n /**\n * Update state if breakpoint is changed\n */\n onMediaQueryChange() {\n this.state.isLink = !mediaQuery.is(this.options.showBreakpoint) || this.options.skipMiniCartOnClick;\n this.updateButtonRole();\n Event.emit('carticon.update');\n }\n\n /**\n * Minicart submit success callback\n * @param {Object} event Event object\n */\n onMiniCartSubmitSuccess(event) {\n const content = event.detail && event.detail.content;\n\n if (!content) {\n return;\n }\n\n if (typeof content === 'string') {\n this.setContent(content);\n this.hide();\n Event.emit('overlay.close');\n }\n }\n\n /**\n * Products added event handler\n *\n * @param {Object} e Event object\n */\n onProductAdded(e) {\n if (e.showMiniCart && this.options.showOnProductAdded && mediaQuery.is(this.options.showBreakpoint)) {\n // show mini cart if required after product is added to basket\n this.show();\n } else if (this.state.isActive) {\n // update mini cart if it is opened\n this.loadContent();\n }\n }\n\n /**\n * Mini Cart Update event handler\n */\n onMiniCartUpdate() {\n if (this.state.isActive) {\n // update mini cart if it is opened\n this.loadContent();\n }\n }\n\n /**\n * Mini Cart Open event handler\n */\n onMiniCartShow() {\n if (this.state.isActive || !mediaQuery.is(this.options.showBreakpoint)) {\n return;\n }\n\n this.show();\n }\n\n /**\n * Trigger click event handler\n * @param {Object} event Event object\n */\n onTriggerClick(event) {\n if (this.options.pagesExcluded.indexOf(getData().page.id) !== -1) {\n event.preventDefault();\n return;\n }\n\n if (this.state.isLink) {\n window.location.href = this.options.url.cart;\n } else {\n Event.emit('simplesearch.close');\n this.togglePanel();\n }\n\n setTimeout(() => {\n Event.emit('analytics.event', {\n category: 'header',\n action: 'select',\n label: 'cart',\n extraData: {\n event_name: 'header_click',\n cta_name: 'cart',\n },\n });\n }, 0);\n }\n\n /**\n * Modal open event handler\n */\n onModalOpen() {\n if (!this.state.isActive) {\n return;\n }\n\n this.state.isOverlaid = true;\n this.selectors.target.classList.add(this.options.classNames.overlaid);\n }\n\n /**\n * Modal close event handler\n */\n onModalClose() {\n if (!this.state.isActive) {\n return;\n }\n\n if (this.state.isOverlaid) {\n Event.emit('page.scroll.disabled', true);\n }\n this.state.isOverlaid = false;\n this.selectors.target.classList.remove(this.options.classNames.overlaid);\n }\n\n /**\n * Before overlay close event handler\n */\n onBeforeOverlayClose() {\n if (this.state.isOverlaid) {\n return;\n }\n\n super.onBeforeOverlayClose();\n }\n\n /**\n * Update button attributes based on the click action (redirect to cart or minicart open)\n */\n updateButtonRole() {\n if (this.state.isLink) {\n this.element.dataset.jsButtonRole = 'link';\n } else {\n this.element.dataset.jsButtonRole = 'button';\n }\n }\n\n /**\n * Show panel\n * @param {Object} options options\n */\n show(options) {\n Event.emit('remindertooltip.hidetooltip');\n super.show(options);\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 super.destroy();\n off('minicart.submit.success', this.selectors.content);\n Event.removeListener('cart.product.added', this.onProductAdded, this);\n Event.removeListener('minicart.show', this.onMiniCartShow, this);\n Event.removeListener('modal.open.before', this.onModalOpen, this);\n Event.removeListener('modal.close.after', this.onModalClose, this);\n }\n}\n"],"mappings":"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","ignoreList":[]}