1class addToCartComponent extends HTMLElement{constructor(){super(),this.dataset.handle?window.theme.product.loadProduct(this.dataset.handle,!0).then(product=>{product&&(this.initSubmitButton(product),this.initEvents(product),this.updateButtonStateBasedOnSizeSelection(product))}):console.log("Missing product handle",this)}initEvents(product){const form=this.getForm();form&&form.addEventListener("submit",event=>this.onFormSubmit(event,product));const variantSelector=this.querySelector('variant-selector[data-handle="'+this.dataset.handle+'"]')||document.querySelector('variant-selector[data-handle="'+this.dataset.handle+'"]');variantSelector&&(variantSelector.addEventListener("ready",event=>this.OnVariantSelectorReady(event,product)),variantSelector.classList.contains("ready")&&this.OnVariantSelectorChange(variantSelector.querySelector("select"),product),this.querySelectorAll('input[type="radio"][name="Size"]').forEach(radio=>{radio.addEventListener("change",()=>this.updateButtonStateBasedOnSizeSelection(product))}))}toggleButton(select,product){let optionSelected=select.children[select.selectedIndex],outOfStockContent=this.querySelector("[data-outofstock-content]"),btn=this.getSubmitButton(),optionSelectedID="",form=this.querySelector("form");if(optionSelected?optionSelected.dataset.disabled===""?optionSelected=!1:(optionSelectedID=optionSelected.dataset.variantId,optionSelected=!0):optionSelected=!1,optionSelected?(outOfStockContent&&outOfStockContent.classList.remove("active"),btn.disabled=!1):(outOfStockContent&&outOfStockContent.classList.add("active"),btn.disabled=!0),form.dataset.editForm&&form.dataset.editForm==optionSelectedID&&(btn.disabled=!0),optionSelectedID){const quantityInput=this.querySelector(".quantity-selector__quantity");if(quantityInput){let maxQty="";if(product.variants_inventory&&product.variants_inventory[optionSelectedID]){const inv=product.variants_inventory[optionSelectedID];inv.management==="shopify"&&inv.policy==="deny"&&(maxQty=inv.quantity)}else{const currentVariant=product.variants&&product.variants.find(v=>v.id==optionSelectedID);currentVariant&¤tVariant.inventory_management==="shopify"&¤tVariant.inventory_policy==="deny"&&(maxQty=currentVariant.inventory_quantity)}maxQty!==""?(quantityInput.setAttribute("max",maxQty),parseInt(quantityInput.value)>maxQty&&(quantityInput.value=maxQty)):quantityInput.removeAttribute("max")}}this.updateButtonStateBasedOnSizeSelection(product)}getTemplate(){return this.querySelector('button[type="submit"][data-edit-btn]')&&this.querySelector('button[type="submit"][data-edit-btn]').innerHTML?this.querySelector('button[type="submit"]').innerHTML:window.theme.addToCart.template?window.theme.addToCart.template:""}initSubmitButton(product){let html=this.getTemplate(),btn=this.getSubmitButton();html&&btn&&(btn.classList.add("product-addtocart__button"),btn.classList.add("btn-icon"),btn.classList.add("btn-icon-before"),btn.classList.add("btn-loading"),product.available?(btn.classList.add("active"),btn.disabled=!1):btn.disabled=!0,btn.innerHTML=html)}getForm(){return this.querySelector("form")}getSubmitButton(){return this.querySelector('button[type="submit"]')}async onFormSubmit(event,product){event.preventDefault();const form=event.target;let editedCartLineKey=null;const sizeRadios=this.querySelectorAll('input[type="radio"][name="Size"]'),variantOptions=Object.keys(product.options_by_name);let areAllVariantsSelected=!0,missingVariantOptionName="";for(let i=0;i<variantOptions.length;i++){const isVariantOptionPresent=this.querySelectorAll(`input[type="radio"][name="${variantOptions[i]}"]`);let isVariantOptionSelected=!1;if(isVariantOptionPresent&&isVariantOptionPresent?.length>0){if(isVariantOptionPresent.length===1)isVariantOptionSelected=!0;else for(let j=0;j<isVariantOptionPresent.length;j++)if(isVariantOptionPresent[j].checked){isVariantOptionSelected=!0;break}if(!isVariantOptionSelected){form.classList.add("disabled"),areAllVariantsSelected=!1,missingVariantOptionName=variantOptions[i];break}}else isVariantOptionSelected=!0}if(!areAllVariantsSelected){event.preventDefault(),form.classList.add("disabled");let errorMessageContainer=form.querySelector(".product-form__error-message");if(errorMessageContainer)errorMessageContainer.textContent=`Please select a ${missingVariantOptionName}.`,errorMessageContainer.style.display="block";else{errorMessageContainer=document.createElement("div"),errorMessageContainer.className="product-form__error-message",errorMessageContainer.style.color="red",errorMessageContainer.style.marginTop="10px",errorMessageContainer.style.marginBottom="10px",errorMessageContainer.textContent=`Please select a ${missingVariantOptionName}.`;const addToCartButton=this.getSubmitButton();addToCartButton?addToCartButton.parentNode.insertBefore(errorMessageContainer,addToCartButton):form.appendChild(errorMessageContainer)}errorMessageContainer&&errorMessageContainer.scrollIntoView({behavior:"smooth",block:"center"});return}let isSizeOptionPresent=sizeRadios.length>0,isSizeSelected=!1;if(isSizeOptionPresent){for(let i=0;i<sizeRadios.length;i++)if(sizeRadios[i].checked){isSizeSelected=!0;break}}else isSizeSelected=!0;if(isSizeSelected){const selectedProductId=product.id;let selectedProductVariantId=null;const cart=await(await fetch(window.Shopify.routes.root+"cart.js")).json();if(form.dataset.editForm){const editedCartLine=cart.items.find(item=>String(item.id)===String(form.dataset.editForm));editedCartLine&&(editedCartLineKey=editedCartLine.key)}const serializedData=window.theme.serialize.serializeForm(form);selectedProductVariantId=new URLSearchParams(serializedData).get("id"),selectedProductVariantId&&(selectedProductVariantId=parseFloat(selectedProductVariantId));const selectedVariant=product.variants.find(v=>v.id===selectedProductVariantId);if(selectedVariant&&!selectedVariant.available){event.preventDefault(),form.classList.add("disabled");let errorMessageContainer2=form.querySelector(".product-form__error-message");if(errorMessageContainer2)errorMessageContainer2.textContent="This option is out of stock.",errorMessageContainer2.style.display="block";else{errorMessageContainer2=document.createElement("div"),errorMessageContainer2.className="product-form__error-message",errorMessageContainer2.style.color="red",errorMessageContainer2.style.marginTop="10px",errorMessageContainer2.style.marginBottom="10px",errorMessageContainer2.textContent="This option is out of stock.";const addToCartButton=this.getSubmitButton();addToCartButton?addToCartButton.parentNode.insertBefore(errorMessageContainer2,addToCartButton):form.appendChild(errorMessageContainer2)}errorMessageContainer2&&errorMessageContainer2.scrollIntoView({behavior:"smooth",block:"center"});return}const cartItem=cart.items.find(item=>item.variant_id===selectedProductVariantId),selectVariantStockLevel=document.querySelector(`[data-variant-stockId="${selectedProductVariantId}"]`),variantStockLevel=parseInt(selectVariantStockLevel?.dataset?.variantStocklevel)||cartItem?.quantity+1;if(selectedProductVariantId&&selectedProductVariantId===cartItem?.variant_id&&variantStockLevel<=cartItem?.quantity){event.preventDefault(),form.classList.add("disabled");let longErrorText=`You already have the maximum quantity of ${cartItem?.variant_title} in your cart.`,shortErrorText="Maximum quantity in cart already.",message2=form.querySelector("[data-error-message]");message2&&window.screenMode!="mobile"&&(message2.innerHTML="",message2.append(shortErrorText),message2.classList.add("enabled"),message2.style.width="fit-content");let errorMessageContainer2=form.querySelector(".product-form__error-message");if(errorMessageContainer2)errorMessageContainer2.textContent=longErrorText,errorMessageContainer2.style.display="block";else{errorMessageContainer2=document.createElement("div"),errorMessageContainer2.className="product-form__error-message",errorMessageContainer2.style.color="red",errorMessageContainer2.style.marginTop="10px",errorMessageContainer2.style.marginBottom="10px",errorMessageContainer2.textContent=longErrorText;const addToCartButton=this.getSubmitButton();addToCartButton?addToCartButton.parentNode.insertBefore(errorMessageContainer2,addToCartButton):form.appendChild(errorMessageContainer2)}errorMessageContainer2&&errorMessageContainer2.scrollIntoView({behavior:"smooth",block:"center"});return}const errorMessageContainer=form.querySelector(".product-form__error-message");errorMessageContainer&&(errorMessageContainer.style.display="none")}else{event.preventDefault();let errorMessageContainer=form.querySelector(".product-form__error-message");if(errorMessageContainer)errorMessageContainer.textContent="Please select a Size.",errorMessageContainer.style.display="block";else{errorMessageContainer=document.createElement("div"),errorMessageContainer.className="product-form__error-message",errorMessageContainer.style.color="red",errorMessageContainer.style.marginTop="10px",errorMessageContainer.style.marginBottom="10px",errorMessageContainer.textContent="Please select a Size.";const addToCartButton=this.getSubmitButton();addToCartButton?addToCartButton.parentNode.insertBefore(errorMessageContainer,addToCartButton):form.appendChild(errorMessageContainer)}errorMessageContainer&&errorMessageContainer.scrollIntoView({behavior:"smooth",block:"center"});return}if(event.preventDefault(),!product.available){let errorMessageContainer=form.querySelector(".product-form__error-message");if(errorMessageContainer)errorMessageContainer.textContent="Product is out of stock.",errorMessageContainer.style.display="block";else{errorMessageContainer=document.createElement("div"),errorMessageContainer.className="product-form__error-message",errorMessageContainer.style.color="red",errorMessageContainer.style.marginTop="10px",errorMessageContainer.style.marginBottom="10px",errorMessageContainer.textContent="Product is out of stock.";const addToCartButton=this.getSubmitButton();addToCartButton?addToCartButton.parentNode.insertBefore(errorMessageContainer,addToCartButton):form.appendChild(errorMessageContainer)}errorMessageContainer&&errorMessageContainer.scrollIntoView({behavior:"smooth",block:"center"});return}let button=form.querySelector('[type="submit"]'),validate=this.validateFieldRequired(form),message=form.querySelector("[data-error-message]");!validate&&button&&(button.setAttribute("disabled",!0),window.theme.cart.addByForm(form).then(result=>{if(button.removeAttribute("disabled"),message&&(message.innerHTML="",message.classList.remove("enabled")),form.dataset.editForm){const editModal=document.querySelector(`[data-edit-modal="${form.dataset.editForm}"]`);editModal&&editModal.classList.remove("active"),editedCartLineKey&&window.theme.cart.update(editedCartLineKey,0).then(()=>window.theme.mini_cart._updateMinicartData()).catch(error=>console.log(error))}let closeQuickView=new CustomEvent("closeQuickView");window.dispatchEvent(closeQuickView)}).catch(error=>{button.removeAttribute("disabled"),message&&(message.innerHTML="",message.append(error.is
1FromServer?error.message:"Something went wrong. Please try again."),message.classList.add("enabled"),message.style.width="fit-content",window.screenMode=="mobile"&&message.scrollIntoView({behavior:"smooth",block:"center",inline:"nearest"}))}))}OnVariantSelectorReady(event,product){let select=event.target.querySelector("select");this.OnVariantSelectorChange(select,product)}OnVariantSelectorChange(select,product){let outOfStockContent=this.querySelector("[data-outofstock-content]");this.getSubmitButton()&&(product.available?outOfStockContent&&outOfStockContent.classList.remove("active"):outOfStockContent&&outOfStockContent.classList.add("active"),select.addEventListener("change",event=>{this.toggleButton(event.target,product);const sizeErrorMessage=this.querySelector("[data-error-message]");sizeErrorMessage&&(sizeErrorMessage.innerHTML="",sizeErrorMessage.classList.remove("enabled")),this.updateButtonStateBasedOnSizeSelection(product)}),setTimeout(()=>{this.updateButtonStateBasedOnSizeSelection(product)},300),setTimeout(()=>{this.updateButtonStateBasedOnSizeSelection(product)},400),setTimeout(()=>{this.updateButtonStateBasedOnSizeSelection(product)},1e3),this.updateButtonStateBasedOnSizeSelection(product))}validateFieldRequired(form){const fields=form.querySelectorAll("[required]");let foundError=!1;for(let field of fields)foundError=field.validity.valueMissing,foundError&&field.classList.add("invalid");return foundError}updateButtonStateBasedOnSizeSelection(product){const addToCartButton=this.getSubmitButton(),addToCartContent=addToCartButton?addToCartButton.querySelector("[data-add-to-card-content]"):null,soldOutContent=addToCartButton?addToCartButton.querySelector("[data-outofstock-content]"):null,sizeRadios=this.querySelectorAll('input[type="radio"][name="Size"]');if(!addToCartButton||!addToCartContent){console.warn("Add to Bag button or its content div not found within component. Cannot update text.");return}const variantOptions=Object.keys(product.options_by_name);let areAllVariantsSelected=!0,missingVariantOptionName="",currentSelectedOptions=[];for(let i=0;i<variantOptions.length;i++){const isVariantOptionPresent=this.querySelectorAll(`input[type="radio"][name="${variantOptions[i]}"]`);let isVariantOptionSelected=!1,selectedValue=null;if(isVariantOptionPresent&&isVariantOptionPresent?.length>0){if(isVariantOptionPresent.length===1)isVariantOptionSelected=!0,selectedValue=isVariantOptionPresent[0].value;else for(let j=0;j<isVariantOptionPresent.length;j++)if(isVariantOptionPresent[j].checked){isVariantOptionSelected=!0,selectedValue=isVariantOptionPresent[j].value;break}isVariantOptionSelected||(areAllVariantsSelected=!1,missingVariantOptionName||(missingVariantOptionName=variantOptions[i]))}else{isVariantOptionSelected=!0;const optionValues=product.options_by_name[variantOptions[i]];optionValues&&optionValues.length>0&&(selectedValue=optionValues[0])}currentSelectedOptions.push(selectedValue)}let hasAvailableMatchingVariant=!0;product&&product.variants&&(hasAvailableMatchingVariant=product.variants.some(variant=>{let matches=!0;for(let k=0;k<currentSelectedOptions.length;k++)if(currentSelectedOptions[k]!==null&&(variant.options?variant.options[k]:variant[`option${k+1}`])!==currentSelectedOptions[k]){matches=!1;break}return matches&&variant.available}));const isSoldOutByTheme=soldOutContent&&soldOutContent.classList.contains("active");if(!hasAvailableMatchingVariant||areAllVariantsSelected&&isSoldOutByTheme){soldOutContent&&(soldOutContent.style.display="block"),addToCartContent&&(addToCartContent.style.display="none"),addToCartButton.disabled=!0,addToCartButton.classList.remove("active");return}if(!areAllVariantsSelected){addToCartContent.textContent=`Please select ${missingVariantOptionName}`,addToCartContent.style.display="block",soldOutContent&&(soldOutContent.style.display="none"),addToCartButton.disabled=!0,addToCartButton.classList.remove("active");return}addToCartContent.textContent="Add to Bag",addToCartContent.style.display="block",soldOutContent&&(soldOutContent.style.display="none"),addToCartButton.disabled=!1,addToCartButton.classList.add("active")}}customElements.define("component-addtocart",addToCartComponent); 2//# sourceMappingURL=/cdn/shop/t/465/assets/component-addtocart.js.map?v=123037099180893948301789990201
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.