class CompareProduct{constructor(){this.storageKey="m-compare-products",this.products=[],this.productNodes={},this.pageTemplate="page.product-compare",this.addedClass="added-to-compare",this.selectors={container:".m-compare-page-content__wrapper",noProducts:".m-compare-no-products",wrapper:".m-compare-card",item:".m-product-card",compareButton:".m-compare-button",compareText:".m-compare-button-text",removeButton:".m-compare-remove-button",count:".m-compare-count"},this.products=Array.from(new Set(Array.from(JSON.parse(localStorage.getItem(this.storageKey))||[]))),this.isComparePage=MinimogSettings.template===this.pageTemplate,this.init()}init=()=>{this.isComparePage&&(this.renderComparePage(),this.addEventToRemoveButtons()),this.setCompareButtonsState(),this.addEventToCompareButtons(),this.updateCompareCount()};saveToStorage=()=>{this.products=Array.from(new Set(this.products)),localStorage.setItem(this.storageKey,JSON.stringify(this.products))};addToCompare(t){t&&-1===this.products.indexOf(t)&&(this.products.push(t),this.saveToStorage())}removeFromCompare(t){this.products=this.products.filter((e=>e!==t)),this.saveToStorage()}setCompareButtonsState=()=>{document.querySelectorAll(this.selectors.compareButton).forEach((t=>{const e=t&&t.dataset.productHandle;this.products.indexOf(e)>=0&&t&&!t.classList.contains(this.addedClass)&&this.toggleButtonState(t,!0)}))};updateCompareCount=()=>{const t=this.products.length;[...document.querySelectorAll(this.selectors.count)].forEach((e=>{e.textContent=t,t<1?e.classList.add("m:hidden"):e.classList.remove("m:hidden")}))};addEventToCompareButtons=()=>{addEventDelegate({selector:this.selectors.compareButton,handler:(t,e)=>{t.preventDefault();const s=e&&e.dataset.productHandle;if(s){const t=!e.classList.contains(this.addedClass);this.toggleButtonState(e,t),this.updateCompareCount(),document.querySelectorAll(this.selectors.compareButton).forEach((t=>{if(t&&t.dataset.productHandle===s&&t!==e){const e=!t.classList.contains(this.addedClass);this.toggleButtonState(t,e)}}))}}})};toggleButtonState=(t,e)=>{const s=t&&t.dataset.productHandle,o=t&&t.querySelector(this.selectors.compareText);if(e?(this.addToCompare(s),t.classList.add(this.addedClass)):(this.removeFromCompare(s),t.classList.remove(this.addedClass)),o){const t=o.dataset.revertText;o.dataset.revertText=o.textContent,o.textContent=t}};addEventToRemoveButtons=()=>{addEventDelegate({selector:this.selectors.removeButton,handler:(t,e)=>{t.preventDefault();const s=e&&e.closest(this.selectors.wrapper);s&&s.remove();const o=e&&e.dataset.productHandle;o&&(this.removeFromCompare(o),this.updateCompareCount(),this.products.length||this.showNoProductsMessage())}})};renderComparePage=async()=>{const t=document.querySelector(this.selectors.container);if(t){let e=!0;if(this.products.length){const s=this.products.map((async t=>{const s=await fetchCache(`/products/${t}?view=compare`),o=document.createElement("DIV");o.classList.add("m:hidden","m:column","m-compare-card"),o.innerHTML=s,o.querySelector(this.selectors.item)&&(e=!1,this.productNodes[t]=o)}));await Promise.all(s),this.products.forEach((e=>{const s=this.productNodes[e];s&&(t.appendChild(s),s.classList.remove("m:hidden"))}))}e&&this.showNoProductsMessage(),t.classList.add("is-visible")}};showNoProductsMessage=()=>{const t=document.querySelector(this.selectors.container),e=document.querySelector(this.selectors.noProducts);t.classList.add("m:hidden"),e.classList.remove("m:hidden")}}MinimogTheme.CompareProduct=new CompareProduct;