{"version":3,"sources":["webpack:///./assets/javascripts/modules/components/CartComponent.js"],"names":["CartComponent","compEl","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","y","quantityBoxes","$component","querySelectorAll","SELECTORS","qtyBtn","shippingRadios","storeLocator","querySelector","showLoginFormBtn","loginForm","Component","cart","more","less","shippingRadiosBox","proceedBtn","errorMsg","options_checkbox_prefix","storeInput","storeRadio","storeCard","authWrapper","checked","active","updateQtyUrl","document","getAttribute","forEach","quantityBox","addBtn","removeBtn","addEventListener","setAttribute","parseInt","location","href","hide","classList","add","remove","event","_this2","$on","_ref","input","currentTarget","parentElement","submitAjaxCartForm","deliveryMethod","value","selectedStore","fetch","method","credentials","mode","then","res","console","log","_this3","dataset","formResult","scrollIntoView","behavior","block","_this4","quantityManager","showLoginForm","showLoginFormOnError","checkbox","isClickAndCollectCheckbox","id","includes","showOrHideStoreLocator","updateDeliveryMethod","checboxBoxChecked","CLASSES","checboxBox","closest","$customEvents","O2O","ccStoresShowResults","e","clickCollectStoreSelection","_ref2","radioBox","target","contains","className","storeChecked","nodeName","click","bindEvents"],"mappings":"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","file":"component-CartComponent.chunks.js","sourcesContent":["import Component from '../abstracts/Component';\n\nexport default class CartComponent extends Component {\n\n get SELECTORS() {\n return {\n cart: '[data-cart-wrapper]',\n qtyBtn: '.js-qty',\n more: '.more',\n less: '.less',\n shippingRadios: '[data-shipping-method] input[type=radio]',\n shippingRadiosBox: '[data-shipping-method]',\n proceedBtn : '.js-click-and-collect-validation',\n errorMsg : '.js-click-and-collect-validation-error',\n options_checkbox_prefix: \"shipping-\",\n storeLocator: \"[data-storelocator]\",\n storeInput: \".sl__stores-list input[name='deliveryMethod']\",\n storeRadio: \"[data-store-name]\",\n storeCard: \".js-store-item\",\n showLoginFormBtn: \"[data-show-login]\",\n loginForm: \"[data-login-section]\",\n authWrapper: \"#cart-authentication\"\n }\n }\n\n get CLASSES() {\n return {\n checked: 'checked',\n active: 'active',\n };\n }\n\n constructor(compEl) {\n super(compEl);\n this.y = 0;\n this.quantityBoxes = this.$component.querySelectorAll(this.SELECTORS.qtyBtn);\n this.shippingRadios = this.$component.querySelectorAll(this.SELECTORS.shippingRadios);\n this.storeLocator = this.$component.querySelector(this.SELECTORS.storeLocator);\n this.showLoginFormBtn = this.$component.querySelector(this.SELECTORS.showLoginFormBtn);\n this.loginForm = this.$component.querySelector(this.SELECTORS.loginForm);\n }\n\n quantityManager() {\n // update url\n let updateQtyUrl = document.querySelector(this.SELECTORS.cart).getAttribute('data-update-qty-url');\n // quantity box looop\n this.quantityBoxes.forEach(quantityBox => {\n let addBtn = quantityBox.querySelector('.more');\n let removeBtn = quantityBox.querySelector('.less');\n let qty = quantityBox.querySelector('.qty');\n //\n addBtn.addEventListener('click', () => {\n // set attribute data\n quantityBox.setAttribute('data-qty', parseInt(quantityBox.getAttribute('data-qty'),10) + 1);\n // go update quantity\n location.href = updateQtyUrl + \"&entryNumber=\" + quantityBox.getAttribute('data-entry-number') + \"&qty=\" + quantityBox.getAttribute('data-qty');\n });\n //\n removeBtn.addEventListener('click', () => {\n if ( parseInt(quantityBox.getAttribute('data-qty'),10) > 0 ) {\n // set attribute data\n quantityBox.setAttribute('data-qty', parseInt(quantityBox.getAttribute('data-qty'),10) - 1);\n // go update quantity\n location.href = updateQtyUrl + \"&entryNumber=\" + quantityBox.getAttribute('data-entry-number') + \"&qty=\" + quantityBox.getAttribute('data-qty');\n }\n });\n });\n }\n\n // show or hide store locator\n showOrHideStoreLocator(hide){\n if(this.storeLocator !== null) {\n if (hide) {\n this.storeLocator.classList.add(\"d-none\");\n } else {\n this.storeLocator.classList.remove(\"d-none\");\n }\n }\n }\n\n //\n clickCollectStoreSelection(event) {\n // click collect select store\n this.$on('click', ({event}) => {\n // input clicked\n const input = event.currentTarget.parentElement.querySelector('input');\n //\n this.submitAjaxCartForm(input);\n }, 'body', this.SELECTORS.storeInput);\n }\n\n // update delivery method by input\n updateDeliveryMethod(event) {\n // input clicked\n let input = event.currentTarget.parentElement.querySelector('input');\n //\n this.submitAjaxCartForm(input);\n }\n\n // ajax call to update delivery method\n submitAjaxCartForm(input) {\n let deliveryMethod = input.value;\n let selectedStore = '';\n if (input.getAttribute('data-click-collect')) {\n selectedStore = input.getAttribute('id');\n }\n // go ajax\n fetch(\n `${document.location.href}?set-delivery-mode=updateDelivery&code=${deliveryMethod}&selectedStore=${selectedStore}`,\n {\n method: 'GET',\n credentials: 'include',\n mode: 'cors'\n }\n ).then(res => {\n // console.log('[CartController]fetch done res:', res); i have no info about shipping price\n console.log('[CartController]fetch done:', deliveryMethod);\n });\n }\n\n showLoginForm() {\n if(!this.showLoginFormBtn) return;\n this.showLoginFormBtn.addEventListener('click', (event) => {\n this.loginForm.classList.remove('hidden');\n let authWrapper = this.$component.querySelector(this.SELECTORS.authWrapper);\n authWrapper.classList.add(\"expanded\");\n });\n }\n\n showLoginFormOnError() {\n if(this.loginForm && this.loginForm.dataset.formResult == 'error') {\n this.loginForm.classList.remove('hidden');\n let authWrapper = this.$component.querySelector(this.SELECTORS.authWrapper);\n authWrapper.classList.add(\"expanded\");\n this.loginForm.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n }\n\n bindEvents() {\n\n this.quantityManager();\n this.showLoginForm();\n this.showLoginFormOnError();\n // clicks on radio\n this.shippingRadios.forEach(checkbox => {\n // if is\n let isClickAndCollectCheckbox = checkbox.id.includes(\"Click-and-Collect\");\n // listen to the click\n checkbox.addEventListener('change',(event) => {\n // hide/show store locator\n this.showOrHideStoreLocator(!isClickAndCollectCheckbox);\n // update delivery method if not click and collect\n this.updateDeliveryMethod(event);\n // change method class\n let checboxBoxChecked = document.querySelector(this.SELECTORS.shippingRadiosBox+'.'+this.CLASSES.checked);\n let checboxBox = checkbox.closest(this.SELECTORS.shippingRadiosBox);\n // remove class from checked\n checboxBoxChecked.classList.remove(this.CLASSES.checked);\n // add class to selected\n checboxBox.classList.add(this.CLASSES.checked);\n });\n });\n\n // on show results\n this.$on(this.$customEvents.O2O.ccStoresShowResults,(e) => {\n // function to listen radio change\n this.clickCollectStoreSelection(e);\n });\n\n // click and collect selecting store\n this.$on('click', ({event}) => {\n // search parent li\n let radioBox = event.target.closest('li');\n // check if box is active\n if (radioBox.classList.contains(this.CLASSES.active)) {\n return;\n }\n // check click on more details\n if (event.target.className == 'store-card__content__details__actions'\n || event.target.className == 'more'\n || event.target.className == 'less'\n ) return;\n // remove active from actual active\n let storeChecked = document.querySelector(this.SELECTORS.storeCard+'.'+this.CLASSES.active);\n if (storeChecked != null) {\n storeChecked.classList.remove(this.CLASSES.active);\n }\n // add active class\n radioBox.classList.add(this.CLASSES.active);\n // select radio in the box clicked if is not clicked on radio or label\n if (event.target.nodeName != 'INPUT' && event.target.nodeName != 'LABEL') {\n let storeRadio = radioBox.querySelector(this.SELECTORS.storeRadio);\n storeRadio.click();\n }\n },'body', this.SELECTORS.storeCard);\n }\n\n\n\n render() {\n this.bindEvents();\n }\n}\n\n"],"sourceRoot":""}