{"version":3,"file":"product.c173bbccfdab13baaf8a.js","mappings":"mgEAWgC,IAE1BA,EAAgB,SAAAC,GAClB,SAAAD,IAAqB,IAAAE,G,4FAAAC,CAAA,KAAAH,GAAA,QAAAI,EAAAC,UAAAC,OAANC,EAAI,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAJF,EAAIE,GAAAJ,UAAAI,GAKb,OAJaC,EAAfR,EAAAS,EAAA,KAAAX,EAAA,GAAAY,OAASL,IAAM,kBAsCF,SAACM,GACdb,EAAiBc,0BAA0BD,GAC3CX,EAAKa,YAAYC,MAAK,WAClBhB,EAAiBiB,2BAA2BJ,EAChD,GACJ,IAACH,EAAAR,EAAA,sBAEoB,SAACgB,GAClBA,EAAEC,iBACFjB,EAAKkB,aACT,IA/CIlB,EAAKmB,MAAQ,CACTC,UAAW,KACXC,YAAY,GACdrB,CACN,CAAC,O,qRAAAsB,CAAAxB,EAAAC,G,EAAAD,E,EAgKA,EAAAyB,IAAA,eAAAC,MA9JD,WACI,MAAO,SACX,GAAC,CAAAD,IAAA,kBAAAC,MAED,WACI,MAAO,CACH,QAER,GAAC,CAAAD,IAAA,4BAAAC,MAwJD,SAAiCC,GACvBA,aAAmBC,aAGzBD,EAAQE,WAAWC,UAAUC,IAAIC,EAAAA,EACrC,GAAC,CAAAP,IAAA,6BAAAC,MAED,SAAkCC,GACxBA,aAAmBC,aAGzBD,EAAQE,WAAWC,UAAUG,OAAOD,EAAAA,EACxC,K,EA9KC,EAAAP,IAAA,SAAAC,MAYD,WAAS,IAAAQ,EAAA,KACDC,KAAKC,KAAKC,SAAW7B,MAAM8B,QAAQH,KAAKC,KAAKC,UAC7CF,KAAKC,KAAKC,OAAS,CAACF,KAAKC,KAAKC,SAG9BF,KAAKC,KAAKC,QACVF,KAAKC,KAAKC,OAAOE,SAAQ,SAACC,GACtBN,EAAKO,YAAYD,EAAW,SAAUN,EAAKQ,eAAeC,KAAKT,EAAMM,GACzE,IAGAL,KAAKC,KAAKQ,WACVT,KAAKU,iBAAmB,IAAIC,EAAAA,EAAkBX,KAAKC,KAAKQ,UACxDT,KAAKU,iBAAiBE,QAGtBZ,KAAKC,KAAKhB,aACVe,KAAKM,YAAYN,KAAKC,KAAKhB,YAAa,QAASe,KAAKa,mBAE9D,GAAC,CAAAvB,IAAA,YAAAC,MAcD,WAAY,IAAAuB,EAAA,KACFC,EAAUf,KAAKC,KAAKC,OAAOc,KAAI,SAACX,GAAS,OAAKA,EAAUd,KAAK,IAC7D0B,EAAc,IAAMC,IAAAA,UAAa,CACnCC,UAAWnB,KAAKoB,QAAQD,UACxBE,UAAWN,IAETO,GAAMC,EAAAA,EAAAA,IAAgBC,EAAAA,GAASC,iBAAmBR,EAEpDjB,KAAK0B,QACL1B,KAAK0B,OAAOC,SAGhB,IAAMC,EAAcC,IAAAA,YAGpB,OAFA7B,KAAK0B,OAASE,EAAYF,SAEnBI,EAAAA,EACFC,IAAIT,EAAK,CACNU,YAAahC,KAAK0B,OAAOO,QAE5BpD,MAAK,SAACqD,GACH,IAAIA,EAAIC,OAAQD,EAAIC,KAAKC,QAIrB,MAAM,IAAIC,MAAMH,EAAIC,KAAKG,SAHzBxB,EAAK5B,MAAMC,UAAY+C,EAAIC,KAAKA,KAAKI,GACrCzB,EAAK0B,WAAWN,EAAIC,KAAKA,KAIjC,IACCM,OAAM,SAACC,GACCb,IAAAA,SAAea,IAChBC,QAAQC,IAAIF,GAGhB5B,EAAK+B,eAAe,GAAG,GACvB/B,EAAKgC,mBAAkB,EAC3B,GACR,GAAC,CAAAxD,IAAA,cAAAC,MAED,WAAc,IAAAwD,EAAA,KACJC,EAAQ,CACV7B,UAAWnB,KAAKoB,QAAQD,UACxB8B,iBAAkBjD,KAAKd,MAAMC,WAAaa,KAAKoB,QAAQ6B,iBACvDxC,SAAUT,KAAKU,iBAAiBwC,aAChCC,oBAAqBnD,KAAKoB,QAAQ+B,qBAGtCnD,KAAK8C,mBAAkB,GAAO,GAE9BM,EAAAA,EACKC,WAAWL,GACXnE,MAAK,SAACsD,GACCA,EAAKmB,kBACLP,EAAKQ,iBAAiBpB,EAAKmB,kBAE/BP,EAAKD,mBAAkB,GAAM,EACjC,IACCL,OAAM,SAACe,GACJT,EAAKD,mBAAkB,GAAM,GAE7BH,QAAQC,IAAIY,EAChB,GACR,GAAC,CAAAlE,IAAA,aAAAC,MAED,SAAW4C,GACFA,IAELnC,KAAKyD,eAAetB,EAAKuB,QAEtB1D,KAAKC,KAAK0D,OACT3D,KAAKC,KAAK0D,KAAKC,YAAczB,EAAK0B,WAGlC7D,KAAKC,KAAK6D,eACV9D,KAAKC,KAAK6D,aAAaF,YAAczB,EAAK4B,yBAG9C/D,KAAK6C,eAAeV,EAAK6B,yBAA0B7B,EAAK8B,kBACxDjE,KAAK8C,kBAAkBX,EAAK8B,kBAChC,GAAC,CAAA3E,IAAA,iBAAAC,MAED,SAAemE,GACX1D,KAAKC,KAAKiE,MAAMC,UAAY,IAC5BC,EAAAA,EAAAA,IAAOC,EAAAA,GAAAA,cAACC,EAAAA,EAAc,CAACC,MAAOb,IAAY1D,KAAKC,KAAKiE,MACxD,GAAC,CAAA5E,IAAA,iBAAAC,MAED,SAAeiF,EAAaC,GACnBzE,KAAKU,mBAEN+D,EACAzE,KAAKU,iBAAiBgE,SAEtB1E,KAAKU,iBAAiBiE,UAG1B3E,KAAKU,iBAAiBkE,OAAOJ,GACjC,GAAC,CAAAlF,IAAA,oBAAAC,MAED,SAAkBsF,EAAoBC,GAC7B9E,KAAKC,KAAKhB,cAEfe,KAAKC,KAAKhB,YAAY8F,UAAYF,OAEdG,IAAhBF,GACA9E,KAAKC,KAAKhB,YAAYU,UAAUmF,EAAc,MAAQ,UAAUjF,EAAAA,GAExE,GAAC,CAAAP,IAAA,mBAAAC,MAED,SAAiB0F,GACR5G,MAAM8B,QAAQ8E,IAEnBA,EAAc7E,SAAQ,SAAC8E,GACnBC,EAAAA,GAAoBC,KAAK,CACrB9C,QAAS4C,EAAa5C,QACtB+C,KAAMC,EAAAA,GAAkBC,OAEhC,GACJ,M,yFAcC,CArLiB,CAASC,EAAAA,IAwL/B,ICjMAC,EAAAA,GAAUC,SAAS7H,E","sources":["webpack://@deleteagency/boilerplate/./Content/assets/components/product/js/product.component.js","webpack://@deleteagency/boilerplate/./Content/assets/components/product/index.js"],"sourcesContent":["import axios from 'axios';\r\nimport qs from 'qs';\r\nimport { baseApi } from 'project/api';\r\nimport { apiNames, notificationTypes, BaseComponent } from 'project/general';\r\nimport { getApiUrlByName } from 'project/helpers';\r\nimport { basketController } from 'project/basket';\r\nimport { QuantityComponent } from 'shared/quantity';\r\nimport { notificationService } from 'project/services';\r\nimport { SPINNER_SHOW_CLASS } from 'shared/spinner';\r\nimport { MemberDiscount } from 'shared/member-discount';\r\nimport React from 'react';\r\nimport { render } from 'preact';\r\n\r\nclass ProductComponent extends BaseComponent {\r\n constructor(...args) {\r\n super(...args);\r\n this.state = {\r\n variantId: null,\r\n isFetching: false,\r\n };\r\n }\r\n\r\n static getNamespace() {\r\n return 'product';\r\n }\r\n\r\n static getRequiredRefs() {\r\n return [\r\n 'price'\r\n ];\r\n }\r\n\r\n onInit() {\r\n if (this.refs.select && !Array.isArray(this.refs.select)) {\r\n this.refs.select = [this.refs.select];\r\n }\r\n\r\n if (this.refs.select) {\r\n this.refs.select.forEach((selectRef) => {\r\n this.addListener(selectRef, 'change', this.onChangeSelect.bind(this, selectRef));\r\n });\r\n }\r\n\r\n if (this.refs.quantity) {\r\n this.quantityInstance = new QuantityComponent(this.refs.quantity);\r\n this.quantityInstance.init();\r\n }\r\n\r\n if (this.refs.addToBasket) {\r\n this.addListener(this.refs.addToBasket, 'click', this.onClickAddToBasket);\r\n }\r\n }\r\n\r\n onChangeSelect = (activeSelect) => {\r\n ProductComponent.turnOnControlLoadingState(activeSelect);\r\n this.fetchData().then(() => {\r\n ProductComponent.turnOffControlLoadingState(activeSelect);\r\n });\r\n };\r\n\r\n onClickAddToBasket = (e) => {\r\n e.preventDefault();\r\n this.addToBasket();\r\n };\r\n\r\n fetchData() {\r\n const filters = this.refs.select.map((selectRef) => selectRef.value);\r\n const queryString = '?' + qs.stringify({\r\n productId: this.options.productId,\r\n optionIds: filters\r\n });\r\n const url = getApiUrlByName(apiNames.PRODUCT_VARIANT) + queryString;\r\n\r\n if (this.source) {\r\n this.source.cancel();\r\n }\r\n\r\n const CancelToken = axios.CancelToken;\r\n this.source = CancelToken.source();\r\n\r\n return baseApi\r\n .get(url, {\r\n cancelToken: this.source.token\r\n })\r\n .then((res) => {\r\n if (res.data && res.data.success) {\r\n this.state.variantId = res.data.data.id;\r\n this.updateView(res.data.data);\r\n } else {\r\n throw new Error(res.data.message);\r\n }\r\n })\r\n .catch((thrown) => {\r\n if (!axios.isCancel(thrown)) {\r\n console.log(thrown);\r\n }\r\n\r\n this.updateQuantity(0, false);\r\n this.updateAddToBasket(false);\r\n });\r\n }\r\n\r\n addToBasket() {\r\n const order = {\r\n productId: this.options.productId,\r\n currentVariantId: this.state.variantId || this.options.currentVariantId,\r\n quantity: this.quantityInstance.getCurrent(),\r\n continueBrowsingUrl: this.options.continueBrowsingUrl\r\n };\r\n\r\n this.updateAddToBasket(false, true);\r\n\r\n basketController\r\n .addProduct(order)\r\n .then((data) => {\r\n if (data.validationErrors) {\r\n this.showNotification(data.validationErrors);\r\n }\r\n this.updateAddToBasket(true, false);\r\n })\r\n .catch((err) => {\r\n this.updateAddToBasket(true, false);\r\n\r\n console.log(err);\r\n });\r\n }\r\n\r\n updateView(data) {\r\n if (!data) return;\r\n\r\n this.reRenderPrices(data.prices);\r\n\r\n if(this.refs.code) {\r\n this.refs.code.textContent = data.skuNumber;\r\n }\r\n\r\n if (this.refs.availability) {\r\n this.refs.availability.textContent = data.availabilityDescription;\r\n }\r\n\r\n this.updateQuantity(data.maximumAvailableQuantity, data.allowAddToBasket);\r\n this.updateAddToBasket(data.allowAddToBasket);\r\n }\r\n\r\n reRenderPrices(prices) {\r\n this.refs.price.innerHTML = '';\r\n render(, this.refs.price);\r\n }\r\n\r\n updateQuantity(maxQuantity, quantityEnabled) {\r\n if (!this.quantityInstance) return;\r\n\r\n if (quantityEnabled) {\r\n this.quantityInstance.enable();\r\n } else {\r\n this.quantityInstance.disable();\r\n }\r\n\r\n this.quantityInstance.setMax(maxQuantity);\r\n }\r\n\r\n updateAddToBasket(addToBasketEnabled, showSpinner) {\r\n if (!this.refs.addToBasket) return;\r\n\r\n this.refs.addToBasket.disabled = !addToBasketEnabled;\r\n\r\n if (showSpinner !== undefined) {\r\n this.refs.addToBasket.classList[showSpinner ? 'add' : 'remove'](SPINNER_SHOW_CLASS);\r\n }\r\n }\r\n\r\n showNotification(notifications) {\r\n if (!Array.isArray(notifications)) return;\r\n\r\n notifications.forEach((notification) => {\r\n notificationService.push({\r\n message: notification.message,\r\n type: notificationTypes.ERROR,\r\n });\r\n });\r\n }\r\n\r\n static turnOnControlLoadingState(element) {\r\n if (!(element instanceof HTMLElement)) {\r\n return;\r\n }\r\n element.parentNode.classList.add(SPINNER_SHOW_CLASS);\r\n }\r\n\r\n static turnOffControlLoadingState(element) {\r\n if (!(element instanceof HTMLElement)) {\r\n return;\r\n }\r\n element.parentNode.classList.remove(SPINNER_SHOW_CLASS);\r\n }\r\n}\r\n\r\nexport default ProductComponent;\r\n","import './scss/index.scss';\r\nimport { dcFactory } from 'dc';\r\nimport ProductComponent from './js/product.component.js';\r\n\r\ndcFactory.register(ProductComponent);\r\n"],"names":["ProductComponent","_BaseComponent","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_defineProperty","_callSuper","concat","activeSelect","turnOnControlLoadingState","fetchData","then","turnOffControlLoadingState","e","preventDefault","addToBasket","state","variantId","isFetching","_inherits","key","value","element","HTMLElement","parentNode","classList","add","SPINNER_SHOW_CLASS","remove","_this2","this","refs","select","isArray","forEach","selectRef","addListener","onChangeSelect","bind","quantity","quantityInstance","QuantityComponent","init","onClickAddToBasket","_this3","filters","map","queryString","qs","productId","options","optionIds","url","getApiUrlByName","apiNames","PRODUCT_VARIANT","source","cancel","CancelToken","axios","baseApi","get","cancelToken","token","res","data","success","Error","message","id","updateView","catch","thrown","console","log","updateQuantity","updateAddToBasket","_this4","order","currentVariantId","getCurrent","continueBrowsingUrl","basketController","addProduct","validationErrors","showNotification","err","reRenderPrices","prices","code","textContent","skuNumber","availability","availabilityDescription","maximumAvailableQuantity","allowAddToBasket","price","innerHTML","render","React","MemberDiscount","model","maxQuantity","quantityEnabled","enable","disable","setMax","addToBasketEnabled","showSpinner","disabled","undefined","notifications","notification","notificationService","push","type","notificationTypes","ERROR","BaseComponent","dcFactory","register"],"sourceRoot":""}