{"version":3,"sources":["webpack:///./assets/javascripts/modules/components/NotifyMeComponent.js"],"names":["NotifyMeComponent","compEl","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","parent","$component","closest","SELECTORS","wishlistSelector","pdpProduct","form","querySelector","notifyMeThanks","notifyMeBtn","addToCartBtn","nofityWrapper","sizeHiddenInput","mailInput","mailErrorBox","sizeError","Component","notifyMeThanksText","show","btnHidden","enableNotify","error","loading","payload","arguments","length","undefined","parentEl","classList","add","CLASSES","remove","_this2","ctx","getAttribute","addEventListener","e","preventDefault","uniqueSize","dataset","value","notifySubmit","$emit","$customEvents","PRODUCT_EVENTS","sizerequired","setAttribute","url","doAjax","type","data","$","serialize","success","message","textStatus","xhr","notifymeended","box","log","innerHTML","responseText","enable","productcode","btn","document","substring","disable","removeAttribute","_this3","$on","notifyme","_ref","event","payloadData","button","contains","toggleUnavailableForm","notifySend","toggleAddToCartError","notifymeclose","_ref2","productCode","sizechanged","_ref3","getElementById","_ref4","notifyWrapper","bindEvents"],"mappings":"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","file":"component-NotifyMeComponent.chunks.js","sourcesContent":["import Component from '../abstracts/Component';\nimport {doAjax} from '../utils/ajaxUtil';\n\nexport default class NotifyMeComponent extends Component {\n\n get COMPONENTNAME() {\n return 'NotifyMeComponent';\n }\n\n get SELECTORS() {\n return {\n nofityWrapper: '[data-notify-me-wrapper]',\n form: '[data-notify-me-form-container] form',\n notifyMeBtn : '[data-notifyme=buttons]',\n addToCartBtn: '[data-addtocart=buttons]',\n sizeHiddenInput: '[data-notify-me-size]',\n mailErrorBox: '[data-mail-errors]',\n mailInput: 'input[name=\"email\"]',\n sizeError: '.js-addtocart-notification',\n wishlistSelector: '.p-my-account__wishlist-selector',\n pdpProduct: '.c-pdp__service-column',\n notifyMeThanks: '[data-notify-me-thanks]',\n notifyMeThanksText: '[data-notify-me-thanks-text]',\n };\n }\n\n get CLASSES() {\n return {\n show: 'show',\n btnHidden: 'hidden',\n enableNotify: 'product-sizes-notify',\n error: 'error',\n loading: 'loading'\n }\n }\n\n constructor(compEl) {\n super(compEl);\n this.parent = this.$component.closest(this.SELECTORS.wishlistSelector) || this.$component.closest(this.SELECTORS.pdpProduct);\n // component elements\n this.form = this.$component.querySelector(this.SELECTORS.form);\n this.notifyMeThanks = this.$component.querySelector(this.SELECTORS.notifyMeThanks);\n\n // outside components\n this.notifyMeBtn = this.parent.querySelector(this.SELECTORS.notifyMeBtn);\n this.addToCartBtn = this.parent.querySelector(this.SELECTORS.addToCartBtn);\n this.nofityWrapper = this.parent.querySelector(this.SELECTORS.nofityWrapper);\n this.sizeHiddenInput = this.parent.querySelector(this.SELECTORS.sizeHiddenInput);\n this.mailInput = this.parent.querySelector(this.SELECTORS.mailInput);\n this.mailErrorBox = this.parent.querySelector(this.SELECTORS.mailErrorBox);\n this.sizeError = this.parent.querySelector(this.SELECTORS.sizeError);\n\n }\n\n // FORM FUNCTIONS\n toggleUnavailableForm(payload, show = true) {\n // get product element\n let parentEl = payload.closest(this.SELECTORS.wishlistSelector) || payload.closest(this.SELECTORS.pdpProduct);\n if (show) {\n // show form\n parentEl.querySelector(this.SELECTORS.nofityWrapper).classList.add(this.CLASSES.show);\n // show notify btn\n parentEl.querySelector(this.SELECTORS.notifyMeBtn).classList.remove(this.CLASSES.btnHidden);\n // hide atc\n parentEl.querySelector(this.SELECTORS.addToCartBtn).classList.add(this.CLASSES.btnHidden);\n } else {\n // hide form\n parentEl.querySelector(this.SELECTORS.nofityWrapper).classList.remove(this.CLASSES.show);\n // show atc\n parentEl.querySelector(this.SELECTORS.addToCartBtn).classList.remove(this.CLASSES.btnHidden);\n // hide notify btn\n parentEl.querySelector(this.SELECTORS.notifyMeBtn).classList.add(this.CLASSES.btnHidden);\n }\n // hide thanks\n this.notifyMeThanks.classList.remove(this.CLASSES.show);\n }\n\n notifySend() {\n // global\n let ctx = this;\n // i need a check to bind only once\n if (this.notifyMeBtn.getAttribute('data-bind-notify') !== 'true') {\n // click on notify button\n this.notifyMeBtn.addEventListener('click', (e) => {\n e.preventDefault();\n let uniqueSize = this.notifyMeBtn.dataset.uniqueSize === 'true' ;\n // if there is the selected size and uniquesize is false or if uniquesize is true\n if ( (this.sizeHiddenInput.value !== '' && !uniqueSize ) || uniqueSize ) {\n // trigger sumbit form\n this.notifySubmit(this.form);\n } else {\n // no size selected , let's trigger the size required error\n ctx.$emit(ctx.$customEvents.PRODUCT_EVENTS.sizerequired, this.notifyMeBtn);\n }\n });\n // for the check\n this.notifyMeBtn.setAttribute('data-bind-notify','true');\n }\n }\n\n notifySubmit(form) {\n // check\n if (form == null) return false;\n // global\n let ctx = this;\n // get url for ajax\n let url = form.getAttribute('action');\n // reset errors\n form.classList.remove(this.CLASSES.error);\n // SHOW LOADING\n form.classList.add(this.CLASSES.loading);\n this.notifyMeBtn.classList.add(this.CLASSES.loading);\n // do ajax\n doAjax({\n type: \"POST\",\n url: url,\n data: $(form).serialize(),\n success: function(message, textStatus, xhr){\n // HIDE LOADING\n ctx.notifyMeBtn.classList.remove(ctx.CLASSES.loading);\n form.classList.remove(ctx.CLASSES.loading);\n // end notify\n ctx.$emit(ctx.$customEvents.PRODUCT_EVENTS.notifymeended , {box: ctx.nofityWrapper, message: message });\n },\n error: function(xhr){\n // hide loading\n ctx.notifyMeBtn.classList.remove('loading');\n form.classList.remove(ctx.CLASSES.loading);\n // error\n ctx.log('notifyMe submit error',xhr);\n // insert error\n ctx.mailErrorBox.innerHTML = xhr.responseText;\n ctx.mailErrorBox.classList.remove('hidden');\n // adding class\n form.classList.add(ctx.CLASSES.error);\n }\n });\n }\n\n // ADD TO CART WITH NO FORM\n toggleAddToCartError(enable = true , productcode = false ){\n // find the right atc button\n let btn = document.querySelector('button.jsToBagBtn[data-code='+productcode.substring(5)+']');\n if ( enable ) {\n btn.disable = false;\n btn.setAttribute('disabled','false');\n } else {\n btn.disable = true;\n btn.removeAttribute('disabled');\n }\n }\n\n\n // MAIN EVENTS\n bindEvents() {\n // global\n let ctx = this;\n // intercept the form submit\n this.form.addEventListener(\"submit\", function(e){\n // prevent the default and launch notify\n e.preventDefault();\n ctx.notifySubmit(ctx.form);\n });\n\n // on launch notify me , let's open the form\n this.$on(this.$customEvents.PRODUCT_EVENTS.notifyme, ({event, payload}) => {\n let payloadData = payload.box || payload.button;\n if (payloadData.classList.contains(this.CLASSES.enableNotify)) {\n // show and bind send button\n ctx.toggleUnavailableForm(payloadData);\n ctx.notifySend();\n } else {\n // if there is no notify form , i disable the atc\n let productcode = payloadData.querySelector('[data-sizes-trigger]').getAttribute('data-sizes-trigger');\n ctx.toggleAddToCartError(true,productcode);\n }\n });\n\n // hide form on notifyclose\n this.$on(this.$customEvents.PRODUCT_EVENTS.notifymeclose, ({event, payload}) => {\n // if its the main ATC btn for product\n if (payload.box === false) {\n // let's close\n ctx.toggleUnavailableForm(payload.button, false);\n } else if (payload.box.classList.contains(this.CLASSES.enableNotify)) {\n // close it\n ctx.toggleUnavailableForm(payload.box, false);\n } else {\n // if there is no notify form , i enable the atc\n let productCode = payload.box.querySelector('[data-sizes-trigger]').getAttribute('data-sizes-trigger');\n ctx.toggleAddToCartError(false, productCode );\n }\n });\n\n this.$on(this.$customEvents.PRODUCT_EVENTS.sizechanged, ({event, payload}) => {\n this.sizeHiddenInput.value = payload.button.getAttribute('data-size');\n document.getElementById('size-variant-code').value = payload.button.dataset.productCode;\n });\n\n // on notify me ended reset select\n this.$on(this.$customEvents.PRODUCT_EVENTS.notifymeended, ({event, payload}) => {\n //\n let notifyWrapper = payload.box;\n // hide wrapper\n notifyWrapper.classList.remove(ctx.CLASSES.show);\n // hide atc\n let parentEl = notifyWrapper.closest(this.SELECTORS.wishlistSelector) || notifyWrapper.closest(this.SELECTORS.pdpProduct);\n parentEl.querySelector(this.SELECTORS.notifyMeBtn).classList.add(this.CLASSES.btnHidden);\n // show thanks\n parentEl.querySelector(ctx.SELECTORS.notifyMeThanksText).innerHTML = payload.message;\n parentEl.querySelector(ctx.SELECTORS.notifyMeThanks).classList.add(ctx.CLASSES.show);\n });\n }\n\n render() {\n this.log(\"Rendering...\");\n this.bindEvents();\n // for unavailable products i check if the form is visible\n if (this.nofityWrapper.classList.contains(this.CLASSES.show)) {\n this.notifySend();\n }\n }\n}\n"],"sourceRoot":""}