1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[30218],{218:(t,e,i)=>{i.r(e),i.d(e,{default:()=>l});var r=i(139),s=i(127);class n extends s.A{static createFromString(t){return new this(JSON.parse(decodeURIComponent(t)))}toString(){return encodeURIComponent(JSON.stringify(this._configuration))}static _transformUuid(t){if(32!==t.length)throw Error(`Invalid UUID: ${t}`);return t.slice(0,8)}}var a=i(896);class l extends window.PluginBaseClass{static #t=this.options={setId:null,productId:null,productMinPurchase:null,productMaxPurchase:null,productPurchaseStep:null,productPackUnit:null,productPackUnitPlural:null,url:null,optionUrl:null,uploadUrl:null,uploadFileUrl:null,updateSetConfigurationHash:!1,redirectTo:"frontend.cart.offcanvas",listPriceMode:null,currency:null,priceRounding:null,locale:null};constructor(){super(...arguments),this.initPriceElement(),this.initSubmitSetButton(),this.initQuantitySelect(),this.initProductSet(),this.setUpdated(this._set)}init(){}initPriceElement(){this._priceElements=document.querySelectorAll(`[data-swkweb-product-set-bundle-price="${this.options.setId}"]`),this._multipliedPriceElements=document.querySelectorAll(`[data-swkweb-product-set-multiplied-price="${this.options.setId}"]`),this._mainProductPriceElements=document.querySelectorAll(`[data-swkweb-product-set-main-product-price="${this.options.setId}"]`),this._metaPriceElement=this.el.querySelector("meta.meta-product-set-price"),this._priceFormatter=new Intl.NumberFormat(this.options.locale,{style:"currency",currency:this.options.currency,maximumFractionDigits:this.options.priceRounding}),this._percentageFormatter=new Intl.NumberFormat(this.options.locale,{minimumFractionDigits:0,maximumFractionDigits:2})}initProductSet(){let t;let e=this.el.querySelector("[data-swkweb-product-set]");if(!1===e)throw Error("Cannot find set element node");if(window.location.hash){let e=window.location.hash.slice(1);try{t=e.startsWith("%7B")?n.createFromString(e):a.A.createFromString(e)}catch{console.warn("Could not parse hash set configuration - Starting with an empty configuration")}}t=t||new a.A({}),this._set=new r.A(e,this,t),this._set.quantity=parseInt(this._quantitySelect?.value??this.options.productMinPurchase,10)}initQuantitySelect(){this._quantitySelect=this.el.querySelector('[name="productSetQuantity"]')||document.querySelector('[name="productSetQuantity"]'),this._quantitySelectGroup=this._quantitySelect?.closest(".product-detail-quantity-group"),this._quantitySelect&&this._quantitySelect.addEventListener("change",this._onChangeQuantitySelect.bind(this))}initSubmitSetButton(){this._submitElements=[...new Set([this.el.querySelector("[data-swkweb-product-set-submit]"),...document.querySelectorAll(`[data-swkweb-product-set-submit="${this.options.setId}"]`)].filter(t=>t))],this._submitElements.forEach(t=>{t.addEventListener("click",this._onClickSubmit.bind(this))})}get maxPurchase(){return this.options.productMaxPurchase}_onChangeQuantitySelect(t){let e=parseInt(t.target.value,10);this._set.quantity=e,this.setUpdated(this._set)}_onClickSubmit(t){t.preventDefault(),this.submitSet()}setUpdated(t){this.updateSetPrice(t.totalPrice),this.updateQuantitySelect(t.maxPurchase),this.updateBuyable(),this.updateSetUrl(),this.$emitter.publish("swkwebProductSet/onSetUpdated",{set:t})}updateSetUrl(){if(!this._set)return;let t=a.A.createFromSet(this._set).toString();this._currentConfiguration!==t&&(this._currentConfiguration=t,this.options.updateSetConfigurationHash&&history.replaceState(void 0,void 0,`#${t}`))}updateSetPrice(t){this._metaPriceElement&&this._metaPriceElement.setAttribute("content",t.unitPrice),this.updateBundlePriceDisplay(t),this.updateMultipliedPriceDisplay(t)}updateBundlePriceDisplay(t){this._priceElements.forEach(e=>{let i=e.querySelector(".product-detail-price span");if(!i)return;i.innerHTML=this._priceFormatter.format(t.unitPrice);let r=e.querySelector("[data-reference-price-multiplicator]",!1);if(r){let e=parseFloat(r.dataset.referencePriceMultiplicator);r.innerHTML=this._priceFormatter.format(t.unitPrice*e)}this._updateListPriceDisplay(e,t,i.parentElement)})}updateMultipliedPriceDisplay(t){let e=this._set?.quantity||1;
1this._multipliedPriceElements.forEach(i=>{let r=i.querySelector("[data-multiplied-quantity]");r&&(r.textContent=e);let s=i.querySelector("[data-multiplied-unit-price]");s&&(s.textContent=this._priceFormatter.format(t.unitPrice));let n=i.querySelector("[data-multiplied-total-price]"),a=n?.querySelector("span");a&&(a.innerHTML=this._priceFormatter.format(t.unitPrice*e)),n&&this._updateListPriceDisplay(i,t,n,e)})}_updateListPriceDisplay(t,e,i){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,s=t.querySelector(".swkweb-product-set-list-price-container");s&&(e.listPrice>e.unitPrice?(s.querySelector(".list-price-price").innerHTML=this._priceFormatter.format(e.listPrice*r),s.querySelector(".list-price-percentage").innerHTML=this._percentageFormatter.format((1-e.unitPrice/e.listPrice)*100),i.classList.add("with-list-price"),s.style.display=null):(i.classList.remove("with-list-price"),s.style.display="none"))}updateQuantitySelect(t){if(!this._quantitySelect||!this._quantitySelectGroup)return;let e=this._quantitySelect.dataset.swkwebProductSetMaxPurchase;if(void 0!==e&&e===t)return;this._quantitySelect.dataset.swkwebProductSetMaxPurchase=t,t=Math.max(t,this.options.productMinPurchase),this._quantitySelect.max=t;let i=Math.min(this._set?.quantity||parseInt(this._quantitySelect.value,10),t);this._quantitySelect.value=i,this._set&&this._set.quantity!==i&&(this._set.quantity=i,this.setUpdated(this._set))}updateBuyable(){let t=!this._set||!this._set.isValid,e=t||this._set.quantity>this._set.maxPurchase;if(this._submitElements.forEach(t=>{t.disabled=e}),this._quantitySelectGroup)for(let e of(this._quantitySelectGroup.classList.toggle("is-disabled",t),this._quantitySelectGroup.querySelectorAll("input, button")))e.disabled=t}loadOption(t,e){return e=Object.fromEntries(Object.entries(e).map(t=>{let[e,i]=t;return[e,"object"==typeof i&&null!==i?JSON.stringify(i):i]})),fetch(this.options.optionUrl+"?"+new URLSearchParams({path:t,...e}).toString()).then(t=>t.json())}uploadFile(t,e,i){let r=new FormData;return r.append("path",t),r.append("fieldId",e),r.append("file",i),fetch(this.options.uploadFileUrl,{method:"POST",body:r}).then(t=>t.json().then(e=>({success:t.ok,...e})))}getUpload(t){return fetch(this.options.uploadUrl+"?"+new URLSearchParams({uploadId:t}).toString()).then(t=>t.json())}getConfigurator(){return this}submitSet(){this._set.isValid||console.error("Product set configuration is NOT valid.");let t=window.PluginManager.getPluginInstances("OffCanvasCart")[0],e=new FormData;e.append("productId",this.options.productId),e.append("configuration",JSON.stringify(this._set)),e.append("quantity",this._set.quantity),e.append("redirectTo",this.options.redirectTo),t.openOffCanvas(this.options.url,e),this.$emitter.publish("swkwebProductSet/onSetAddToCart",{set:this._set,data:e})}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.