{"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":[]}