1customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.form.querySelector("[name=id]").disabled=!1,this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.submitButton=this.querySelector('[type="submit"]'),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true"}onSubmitHandler(evt){if(evt.preventDefault(),this.submitButton.getAttribute("aria-disabled")==="true")return;this.handleErrorMessage(),this.submitButton.setAttribute("aria-disabled",!0),this.submitButton.classList.add("loading"),this.querySelector(".loading__spinner").classList.remove("hidden");const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData=new FormData(this.form),selectedVariantId=parseInt(formData.get("id"),10);if(!this.validateB2B(selectedVariantId)){alert("You do not have permission to add this product to the cart."),this.submitButton.classList.remove("loading"),this.error||this.submitButton.removeAttribute("aria-disabled"),this.querySelector(".loading__spinner").classList.add("hidden");return}this.cart&&(formData.append("sections",this.cart.getSectionsToRender().map(section=>section.id)),formData.append("sections_url",window.location.pathname),this.cart.setActiveElement(document.activeElement));const customOptionsForm=document.getElementById("product-options__form");if(customOptionsForm){if(!this.validateCustomOptionsForm(customOptionsForm)){const accordionDetails=customOptionsForm.closest("details");accordionDetails&&!accordionDetails.hasAttribute("open")&&(accordionDetails.setAttribute("open",""),setTimeout(()=>{accordionDetails.scrollIntoView({behavior:"smooth",block:"nearest"})},100)),alert("Please fill all required fields"),this.submitButton.classList.remove("loading"),this.error||this.submitButton.removeAttribute("aria-disabled"),this.querySelector(".loading__spinner").classList.add("hidden");return}const formCustomOptionsData=new FormData(customOptionsForm);for(let[key,value]of formCustomOptionsData.entries())formData.append("properties["+key+"]",value)}this.hasAttribute("data-sale-price")&&formData.append("properties[Regular price]",this.getAttribute("data-sale-price")),config.body=formData,fetch(`${routes.cart_add_url}`,config).then(response=>response.json()).then(response=>{if(response.status){publish(PUB_SUB_EVENTS.cartError,{source:"product-form",productVariantId:formData.get("id"),errors:response.errors||response.description,message:response.message}),this.handleErrorMessage(response.description);const productErrorContainer=document.querySelector(".product-form__error-message-wrapper"),productError=document.querySelector(".product-form__error-message");response.status===422&&(productErrorContainer.style.display="flex",productError.innerText=response.description,setTimeout(function(){productErrorContainer.style.display="none"},3e3));const soldOutMessage=this.submitButton.querySelector(".sold-out-message");if(!soldOutMessage)return;this.submitButton.setAttribute("aria-disabled",!0),this.submitButton.querySelector("span").classList.add("hidden"),soldOutMessage.classList.remove("hidden"),this.error=!0;return}else if(!this.cart){window.location=window.routes.cart_url;return}if(!this.error){publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productVariantId:formData.get("id"),cartData:response});const variantId=parseInt(formData.get("id")),quantity=parseInt(formData.get("quantity"))||1,productId=response?.items?.[0]?.product_id||null;if(typeof window.trackEvent=="function"&&window.trackEvent("Add To Cart","WEBSITE: Added product to cart",{product_id:productId,quantity,variant_id:variantId,source:"website"}),typeof sendAddToCartBeacon=="function"){const beaconItems=response?.items?.length?response.items:response?.product_id?[response]:null;beaconItems&&sendAddToCartBeacon(beaconItems)}}document.dispatchEvent(new Event("cart:updated")),this.error=!1;const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{this.cart.renderContents(response)})},{once:!0}),quickAddModal.hide(!0)):this.cart.renderContents(response)}).catch(e=>{console.error(e)}).finally(()=>{this.submitButton.classList.remove("loading"),this.cart&&this.cart.classList.contains("is-empty")&&this.cart.classList.remove("is-empty"),this.error||this.submitButton.removeAttribute("aria-disabled"),this.querySelector(".loading__spinner").classList.add("hidden")})}handleErrorMessage(errorMessage=!1){this.hideErrors||(this.errorMessageWrapper=this.errorMessageWrapper||this.querySelector(".product-form__error-message-wrapper"),this.errorMessageWrapper&&(this.errorMessage=this.errorMessage||this.errorMessageWrapper.querySelector(".product-form__error-message"),this.errorMessageWrapper.toggleAttribute("hidden",!errorMessage),errorMessage&&(this.errorMessage.textContent=errorMessage)))}validateCustomOptionsForm(customOptionsForm){const requiredFields=customOptionsForm.querySelectorAll("[required]"),radioGroups={};let formIsValid=!0;requiredFields.forEach(field=>{field.type==="radio"?(radioGroups[field.name]||(radioGroups[field.name]=!1),field.checked&&(radioGroups[field.name]=!0)):field.type==="checkbox"?field.checked||(formIsValid=!1):field.tagName==="SELECT"?(field.value===""||field.value===field.options[0].value)&&(formIsValid=!1):(field.tagName==="TEXTAREA"||field.type==="text"||field.type==="email"||field.type==="password")&&(field.value.trim()||(formIsValid=!1))});for(const group in radioGroups)radioGroups[group]||(formIsValid=!1);return formIsValid}validateB2B(selectedVariantId){var allowedVariantIds=window.myProducts||[],isOrderingOnly=window.isOrderingOnly;return!(isOrderingOnly&&!allowedVariantIds.includes(selectedVariantId))}}); 2//# sourceMappingURL=/cdn/shop/t/5/assets/product-form.js.map?v=157799089160159132851776752910
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.