{"version":3,"file":"component-addToCart.chunk.js","mappings":"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","sources":["webpack:///./assets/src/scripts/base/baseComponent.ts","webpack:///./assets/src/scripts/base/commonInterface.ts","webpack:///./assets/src/scripts/components/addToCart.ts","webpack:///./assets/src/scripts/components/spinner.ts","webpack:///./assets/src/scripts/utils/focusableElementUtils.ts"],"sourcesContent":["import deepFreeze from '../utils/freeze';\nimport CommonInterface from './commonInterface';\nimport Bean from 'bean';\nexport default class BaseComponent extends CommonInterface {\n    /**\n     *\n     * constructor\n     *\n     * @param {Element} element\n     */\n    constructor(element) {\n        super();\n        this.observer = new IntersectionObserver(entries => {\n            if (entries[0].isIntersecting) {\n                const items = [...entries[0].target.querySelectorAll('[data-animated=\"false\"]')];\n                items.forEach((item, i) => {\n                    setTimeout(() => {\n                        item.setAttribute('data-animated', 'true');\n                    }, 300 * i);\n                });\n                this.observer.unobserve(entries[0].target);\n            }\n        }, {\n            threshold: 0.5\n        });\n        this._componentElement = element;\n        this._componentElement.setAttribute('data-component-init', 'true');\n        this.observer.observe(this._componentElement);\n    }\n    /**\n     * @returns {HTMLElement}\n     */\n    get $el() {\n        return this._componentElement;\n    }\n    get $options() {\n        const compOptions = {};\n        const options = Object.assign({}, this.$el.dataset);\n        const optionsEntires = Object.keys(options).filter((entry) => entry.includes('option'));\n        optionsEntires.forEach((entry) => {\n            const cleanEntry = BaseComponent.cleanOptionKey(entry);\n            let optionValue;\n            if (options[entry].includes('{') && options[entry].includes('}')) {\n                optionValue = JSON.parse(options[entry].replace(/'/g, '\"'));\n            }\n            else {\n                optionValue = BaseComponent.convertType(options[entry]);\n            }\n            compOptions[cleanEntry] = optionValue;\n        });\n        return deepFreeze(compOptions);\n    }\n    get COMPONENT_NAME() {\n        return this.__proto__.constructor.name;\n    }\n    static convertType(option) {\n        let optionReturn;\n        switch (option) {\n            case 'false':\n                optionReturn = false;\n                break;\n            case 'true':\n                optionReturn = true;\n                break;\n            case 'null':\n                optionReturn = null;\n                break;\n            default:\n                optionReturn = option;\n                break;\n        }\n        return optionReturn;\n    }\n    static cleanOptionKey(key) {\n        const str = key.replace('option', '');\n        return `${str.charAt(0).toLocaleLowerCase()}${str.slice(1)}`;\n    }\n    /**\n     *\n     * $on\n     *\n     * @param {String} events\n     * @param {Function} cb\n     * @param {Element} [element = this.$el]\n     * @param {Array|String|Element} [elements = null]\n     */\n    $on(events, cb, element = this.$el, elements = null) {\n        if (!element || !events || !cb)\n            return;\n        if (!elements) {\n            Bean.on(element, events, (e) => {\n                if (e)\n                    e.stopPropagation();\n                cb(e);\n            });\n        }\n        else {\n            Bean.on(element, events, elements, (e) => {\n                if (e)\n                    e.stopPropagation();\n                cb(e);\n            });\n        }\n    }\n    /**\n     *\n     * $one\n     *\n     * @param {String} events\n     * @param {Function} cb\n     * @param {Element} [element = this.$el]\n     */\n    $one(events, cb, element = this.$el) {\n        Bean.one(element, events, cb);\n    }\n    /**\n     *\n     * $off\n     *\n     * @param {String} events\n     * @param {Element} [element = this.$el]\n     */\n    $off(events, element = this.$el) {\n        Bean.off(element, events);\n    }\n    /**\n     *\n     * $fire\n     *\n     * @param {String} events\n     * @param {Element} [element = this.$el]\n     */\n    $fire(events, element = this.$el) {\n        Bean.fire(element, events);\n    }\n    /**\n     *\n     * @param {HTMLElement} [container]\n     */\n    loading(container, message = '') {\n        this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.show, {\n            container: container || this.$el,\n            message\n        });\n    }\n    /**\n     *\n     * @param {HTMLElement} [container]\n     * @param {String} [message]\n     * @param {String} [icon]\n     * @param {Boolean} [error=false]\n     */\n    endLoading(container, message, icon, error = false, time) {\n        this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.hide, {\n            container: container || this.$el,\n            message,\n            icon,\n            error,\n            time\n        });\n    }\n}\n","import config from 'gia/config';\nimport EventBus from '../libs/eventBus';\nimport CustomMessages from '../constants/customMessages';\nimport { getFirstFocusable, getAllFocusableElements } from '../utils/focusableElementUtils';\nexport default class CommonInterface {\n    constructor() {\n        config.set('log', true);\n        this._grabMessages();\n    }\n    get CUSTOM_MESSAGES() {\n        return CustomMessages;\n    }\n    get Messages() {\n        return {};\n    }\n    _checkMessages() {\n        for (const message in this.Messages) {\n            if (window.eventQueue.get(message)) {\n                const ref = this.Messages[message].bind(this);\n                window.eventQueue.get(message).map((payload) => {\n                    ref(payload);\n                });\n                window.eventQueue.delete(message);\n            }\n        }\n    }\n    _grabMessages() {\n        this._messages = {};\n        for (const message in this.Messages) {\n            if (this.Messages[message]) {\n                const __ref__ = this.Messages[message].bind(this);\n                this._messages[message] = __ref__;\n                this.GRAB(message, __ref__);\n            }\n        }\n    }\n    _ungrabMessages() {\n        for (const message in this._messages) {\n            this.UNGRAB(message, this._messages[message]);\n        }\n    }\n    objectIsEmpty(object) {\n        for (var key in object) {\n            if (object.hasOwnProperty(key))\n                return false;\n        }\n        return true;\n    }\n    /**\n     *\n     * EMIT\n     *\n     * @param {string} message\n     * @param {Object} payload\n     */\n    EMIT(message, payload) {\n        return EventBus.emit(message, payload);\n    }\n    /**\n     *\n     * GRAB\n     *\n     * @param {string} message\n     * @param {Function} callBack\n     */\n    GRAB(message, callBack) {\n        if (!callBack)\n            return;\n        EventBus.on(message, callBack);\n    }\n    /**\n     *\n     * UNGRAB\n     *\n     * @param {string} message\n     * @param {Function} callBack\n     */\n    UNGRAB(message, callBack) {\n        if (!callBack)\n            return;\n        EventBus.off(message, callBack);\n    }\n    getFirstFocusable(parent) {\n        return getFirstFocusable(parent);\n    }\n    getFocusableElements(parent) {\n        return getAllFocusableElements(parent);\n    }\n    _destroy() {\n        this._ungrabMessages();\n    }\n}\n","import spinner from './spinner';\nimport BaseComponent from '../base/baseComponent';\nimport customEventBus from '../libs/eventBus';\nimport customMessages from '../constants/customMessages';\nexport default class AddToCart extends BaseComponent {\n    constructor(element) {\n        super(element);\n        this.waiting = false;\n        this.toCheckout = false;\n        this.pageType = document.querySelector('.page').getAttribute('data-action') || '';\n        this.status = 'standby';\n        this.context = this.$el.closest(this.SELECTORS.context);\n        if (this.pageType === 'Wishlist-Show') {\n            this.context = this.$el.closest(this.SELECTORS.wishlistCard);\n        }\n        //let ctaLabel = this.$el.getAttribute(\"data-label-placeholder\");\n        customEventBus.on(this.CUSTOM_MESSAGES.ADDTOCART.sizeSelected, (data) => {\n            if (data.pid !== this.pid && data.context === this.context) {\n                this.pid = data.pid;\n                this.stockStatus = data.isPreorderable ? 'preorderable' : 'orderable';\n                this.updateCta(data);\n            }\n        });\n        if (this.$options.mainAdd) {\n            this.listenForForcedClick();\n        }\n        this.handleClick();\n    }\n    get SELECTORS() {\n        return {\n            context: '.product-wrapper',\n            wishlistCard: '.productlistitem',\n            feedback: '.btn-actions-feedback',\n            copy: '.btn-addtocart-label',\n            feedbackModalPartialId: 'modal-addedToCart',\n            notifyMeModalPartialId: 'modal-notifyme',\n        };\n    }\n    listenForForcedClick() {\n        let cta = this.$el;\n        this.GRAB(this.CUSTOM_MESSAGES.ADDTOCART.trigger, (data) => {\n            cta.click();\n        });\n        this.GRAB(this.CUSTOM_MESSAGES.ADDTOCART.triggerAndCheckout, (data) => {\n            if (this.status === 'cartready') {\n                this.toCheckout = true;\n            }\n            cta.click();\n        });\n    }\n    handleClick() {\n        this.$el.addEventListener('click', (event) => {\n            // ADDTOCART\n            if (this.status === 'cartready') {\n                this.addToCartFlow();\n            }\n            else if (this.status === 'notifyme') {\n                this.emitNotifyMeReadyEvent();\n            }\n            else {\n                const comboSize = this.context.querySelector('[data-component=\"comboSize\"] button');\n                if (comboSize) {\n                    comboSize.click();\n                    comboSize.focus();\n                }\n            }\n        });\n    }\n    async addToCartFlow() {\n        if (this.waiting === false) {\n            this.waiting = true;\n            spinner.set();\n            try {\n                const data = await this.addToCart(this.$options.pid);\n                const { error, message } = data;\n                if (error) {\n                    this.emitShowMessageMaxQuantityAddedToCart(message); //NEW\n                }\n                else {\n                    customEventBus.emit('minicart:update', { fromAddToBag: true, pid: this.$options.pid, closeDeelay: 5000 });\n                    customEventBus.emit(customMessages.SFMC.CART.add, { cartItems: data.cart.items });\n                    if (data.dataLayer) {\n                        window.dataLayer.push(data.dataLayer);\n                    }\n                    if (data.pliUUID) {\n                        this.uuid = data.pliUUID;\n                    }\n                    this.emitAddedToCartEvent();\n                    if (this.toCheckout) {\n                        window.location.href = this.$options.checkouturl;\n                    }\n                }\n            }\n            catch (error) {\n                console.error(error);\n            }\n            finally {\n                this.waiting = false;\n                spinner.unset();\n            }\n        }\n    }\n    async addToCart(pid) {\n        const formData = new FormData();\n        formData.append('pid', pid);\n        formData.append('quantity', '1');\n        if (this.context.querySelector('#personalizationText')) {\n            formData.append('personalizationText', this.context.querySelector('#personalizationText').innerHTML);\n        }\n        if (this.context.querySelector('#personalizationColor')) {\n            formData.append('personalizationColor', this.context.querySelector('#personalizationColor').innerHTML);\n        }\n        return fetch(this.$options.endpointAddtocart, {\n            method: 'POST',\n            body: formData,\n            headers: {\n                'X-Requested-With': 'XMLHttpRequest',\n            },\n        }).then(function (response) {\n            return response.json();\n        });\n    }\n    updateCtaLabel() {\n        this.$el.removeAttribute('disabled');\n        this.$el.classList.remove('btn-addtocart--notifyme');\n        const copySpan = this.$el.querySelector(this.SELECTORS.copy);\n        this.$el.dataset.issizeselected = 'true';\n        if (this.status === 'cartready') {\n            if (this.stockStatus === 'preorderable') {\n                copySpan.innerHTML = this.$el.dataset.labelPreorder;\n            }\n            else {\n                copySpan.innerHTML = this.$el.dataset.labelAddtocart;\n            }\n        }\n        else if (this.status === 'standby') {\n            copySpan.innerHTML = this.$el.dataset.labelSelectsize;\n            this.$el.dataset.issizeselected = 'false';\n        }\n        else if (this.status === 'notifyme') {\n            copySpan.innerHTML = this.$el.dataset.labelNotifyme;\n            this.$el.classList.add('btn-addtocart--notifyme');\n        }\n        else if (this.status === 'outofstock') {\n            copySpan.innerHTML = this.$el.dataset.labelOutofstock;\n            this.$el.setAttribute('disabled', '');\n        }\n        this.EMIT(this.CUSTOM_MESSAGES.ADDTOCART.ctaStatusSet, {\n            status: this.status,\n            issinglesize: this.$options.issinglesize,\n            ispreorderable: this.stockStatus === 'preorderable',\n            label: copySpan.innerHTML,\n        });\n    }\n    async updateCta(data) {\n        if (data.pid === '') {\n            this.status = 'standby';\n        }\n        else {\n            if (data.isAvailable) {\n                this.status = 'cartready';\n            }\n            else {\n                if (data.isNotifiable) {\n                    this.status = 'notifyme';\n                }\n                else {\n                    this.status = 'outofstock';\n                }\n            }\n        }\n        this.updateCtaLabel();\n    }\n    // \n    async emitAddedToCartEvent() {\n        let modalData = await this.getDataForModal();\n        if (this.uuid) {\n            modalData.uuid = this.uuid;\n        }\n        modalData.toCheckout = this.toCheckout;\n        this.EMIT(this.CUSTOM_MESSAGES.ADDTOCART.itemAdded, modalData);\n    }\n    async emitShowMessageMaxQuantityAddedToCart(msg = '', status = 'error') {\n        //Faccio la chiamata asincrona per recuperare i dati del prodotto\n        let modalData = await this.getDataForModal();\n        if (this.uuid) {\n            modalData.uuid = this.uuid;\n        }\n        //Lancio l'evento che poi mi aprirà il popup\n        this.EMIT(this.CUSTOM_MESSAGES.ADDTOCART.itemShowMessage, { modalData, msg });\n    }\n    async emitNotifyMeReadyEvent() {\n        this.EMIT(this.CUSTOM_MESSAGES.ADDTOCART.itemNotifyReady, await this.getDataForModal());\n    }\n    async getDataForModal() {\n        let modalData = {};\n        return new Promise((resolve, reject) => {\n            if (this.context.classList.contains('product-wrapper')) {\n                // PDP\n                modalData.pid = this.pid;\n                modalData.name = this.context.querySelector('.product-name').textContent;\n                modalData.imgUrl = this.context.querySelector('.product-item-picture').querySelector('img').getAttribute('src');\n                modalData.renderedPrice = this.context.querySelector('.price').innerHTML;\n                modalData.url = window.location.href;\n                modalData.colorName = this.context.querySelector('.combo--selectcolor').querySelector('[role=\"option\"][aria-selected=\"true\"]').getAttribute('data-displayvalue');\n                modalData.sizeName = this.context.querySelector('.combo--selectsize').querySelector('[role=\"option\"][aria-selected=\"true\"]').getAttribute('data-displayvalue');\n                modalData.categoryUrl = this.context.getAttribute('data-categoryurl');\n                modalData.categoryNameEn = this.context.getAttribute('data-categorynameen');\n            }\n            else if (this.context.classList.contains('productlistitem')) {\n                // WISHLIST\n                modalData.pid = this.pid;\n                modalData.name = this.context.querySelector('.productlistitem-name').textContent;\n                modalData.imgUrl = this.context.querySelector('.productlistitem-figure').querySelector('img').getAttribute('src');\n                modalData.renderedPrice = this.context.querySelector('.price').innerHTML;\n                modalData.url = this.context.querySelector('.productlistitem-name').querySelector('a').getAttribute('href');\n                modalData.colorName = this.context.querySelector('.productlistitem-note--color').querySelector('.productlistitem-note-value').textContent;\n                modalData.sizeName = this.context.querySelector('.combo--selectsize').querySelector('[role=\"option\"][aria-selected=\"true\"]').getAttribute('data-displayvalue');\n                modalData.categoryUrl = this.context.getAttribute('data-categoryurl');\n                modalData.categoryNameEn = this.context.getAttribute('data-categorynameen');\n            }\n            resolve(modalData);\n        });\n    }\n}\n","const spinner = {\n    set: () => {\n        spinner.unset();\n        document.body.insertAdjacentHTML('beforeend', `<div id=\"html-spinner\" class=\"spinner full visible\">\n      <span class=\"spinner__dot spinner__dot--string_light\"></span>\n      <span class=\"spinner__dot spinner__dot--string_dark\"></span>\n    </div>`);\n    },\n    unset: () => {\n        if (document.getElementById('html-spinner') !== null) {\n            document.getElementById('html-spinner').remove();\n        }\n    },\n};\nexport default spinner;\n","const focusableSelectors = 'button, [href]:not([aria-hidden=\"true\"]), input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), [role=\"button\"]';\nexport const getFirstFocusable = (parent) => parent.querySelector(focusableSelectors);\nexport const getAllFocusableElements = (parent) => parent.querySelectorAll(focusableSelectors);\n"],"names":["BaseComponent","constructor","config","this","_grabMessages","CUSTOM_MESSAGES","Messages","_checkMessages","message","window","eventQueue","get","ref","bind","map","payload","delete","_messages","__ref__","GRAB","_ungrabMessages","UNGRAB","objectIsEmpty","object","key","hasOwnProperty","EMIT","callBack","getFirstFocusable","parent","getFocusableElements","_destroy","element","super","observer","IntersectionObserver","entries","isIntersecting","target","querySelectorAll","forEach","item","i","setTimeout","setAttribute","unobserve","threshold","_componentElement","observe","$el","$options","compOptions","options","Object","assign","dataset","keys","filter","entry","includes","cleanEntry","cleanOptionKey","optionValue","JSON","parse","replace","convertType","COMPONENT_NAME","__proto__","name","static","option","optionReturn","str","charAt","toLocaleLowerCase","slice","$on","events","cb","elements","e","stopPropagation","$one","$off","$fire","loading","container","LOADER_EVENTS","show","endLoading","icon","error","time","hide","AddToCart","waiting","toCheckout","pageType","document","querySelector","getAttribute","status","context","closest","SELECTORS","wishlistCard","ADDTOCART","sizeSelected","data","pid","stockStatus","isPreorderable","updateCta","mainAdd","listenForForcedClick","handleClick","feedback","copy","feedbackModalPartialId","notifyMeModalPartialId","cta","trigger","click","triggerAndCheckout","addEventListener","event","addToCartFlow","emitNotifyMeReadyEvent","comboSize","focus","async","addToCart","emitShowMessageMaxQuantityAddedToCart","fromAddToBag","closeDeelay","cartItems","cart","items","dataLayer","push","pliUUID","uuid","emitAddedToCartEvent","location","href","checkouturl","console","formData","FormData","append","innerHTML","fetch","endpointAddtocart","method","body","headers","then","response","json","updateCtaLabel","removeAttribute","classList","remove","copySpan","issizeselected","labelPreorder","labelAddtocart","labelSelectsize","labelNotifyme","add","labelOutofstock","ctaStatusSet","issinglesize","ispreorderable","label","isAvailable","isNotifiable","modalData","getDataForModal","itemAdded","msg","itemShowMessage","itemNotifyReady","Promise","resolve","reject","contains","textContent","imgUrl","renderedPrice","url","colorName","sizeName","categoryUrl","categoryNameEn","spinner","set","unset","insertAdjacentHTML","getElementById","focusableSelectors","getAllFocusableElements"],"sourceRoot":""}