1import"@theme/morph";import{Component}from"@theme/component";import{ThemeEvents}from"@theme/events";import{DialogComponent,DialogCloseEvent}from"@theme/dialog";import{getIOSVersion}from"@theme/utilities";export class QuickAddComponent extends Component{#abortController=null;#cachedContent=new Map;get productPageUrl(){const productLink=this.closest("product-card")?.getProductCardLink();if(!productLink?.href)return"";const url=new URL(productLink.href);if(url.searchParams.has("variant"))return url.toString();const selectedVariantId=this.#getSelectedVariantId();return selectedVariantId&&url.searchParams.set("variant",selectedVariantId),url.toString()}#getSelectedVariantId(){return this.closest("product-card")?.getSelectedVariantId()||null}connectedCallback(){super.connectedCallback(),this.quickAddButtonSpinner=this.querySelector(".quick-add__button-spinner"),this.quickAddButton=this.querySelector(".button-choose-options"),document.addEventListener(ThemeEvents.variantSelected,this.#updateQuickAddButtonState.bind(this))}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(ThemeEvents.variantSelected,this.#updateQuickAddButtonState.bind(this)),this.#abortController?.abort()}#updateQuickAddButtonState(event){if(!(event.target instanceof HTMLElement)||this.dataset.quickAddMode==="view"||event.target.closest("product-card")!==this.closest("product-card"))return;const quickAddButton=this.dataset.productOptionsCount==="1"?"add":"choose";this.setAttribute("data-quick-add-button",quickAddButton)}#stayVisibleUntilDialogCloses(dialogComponent){this.toggleAttribute("stay-visible",!0),dialogComponent.addEventListener(DialogCloseEvent.eventName,()=>this.toggleAttribute("stay-visible",!1),{once:!0})}#openQuickAddModal=()=>{const dialogComponent=document.getElementById("quick-add-dialog");console.log(dialogComponent),dialogComponent instanceof QuickAddDialog&&(this.#stayVisibleUntilDialogCloses(dialogComponent),dialogComponent.showDialog())};#closeQuickAddModal=()=>{const dialogComponent=document.getElementById("quick-add-dialog");dialogComponent instanceof QuickAddDialog&&dialogComponent.closeDialog()};handleClick=async event=>{event.preventDefault(),console.log(this.productPageUrl);const currentUrl=`${this.productPageUrl.split("?")[0]}?section_id=${this.quickAddDrawerId}&${this.productPageUrl.split("?")[1]}`;let quickAddContent=this.#cachedContent.get(currentUrl);if(!quickAddContent){this.addLoading();const html=await this.fetchProductPage(currentUrl);if(html){const quickAddContentElement=html.querySelector("[data-quick-add-content]");quickAddContentElement&&(quickAddContent=quickAddContentElement.cloneNode(!0),this.#cachedContent.set(currentUrl,quickAddContent))}this.removeLoading()}if(quickAddContent){const freshContent=quickAddContent.cloneNode(!0);
1await this.updateQuickAddModal(freshContent)}this.#openQuickAddModal()};async fetchProductPage(productPageUrl){if(!productPageUrl)return null;this.#abortController?.abort(),this.#abortController=new AbortController;try{const response=await fetch(productPageUrl,{signal:this.#abortController.signal});if(!response.ok)throw new Error(`Failed to fetch product page: HTTP error ${response.status}`);const responseText=await response.text();return new DOMParser().parseFromString(responseText,"text/html")}catch(error){if(error.name==="AbortError")return null;throw error}finally{this.#abortController=null}}async updateQuickAddModal(quickAddContent){const quickAddDrawerContent=document.getElementById("quick-add-drawer-content");!quickAddContent||!quickAddDrawerContent||(quickAddDrawerContent.innerHTML=quickAddContent.innerHTML,this.#syncVariantSelection(quickAddContent))}#syncVariantSelection(modalContent){const selectedVariantId=this.#getSelectedVariantId();if(!selectedVariantId)return;const modalInputs=modalContent.querySelectorAll('input[type="radio"][data-variant-id]');for(const input of modalInputs)if(input instanceof HTMLInputElement&&input.dataset.variantId===selectedVariantId&&!input.checked){input.checked=!0,input.dispatchEvent(new Event("change",{bubbles:!0}));break}}addLoading(){this.quickAddButton?.classList.add("btn--loading"),this.quickAddButtonSpinner?.classList.remove("hidden")}removeLoading(){this.quickAddButton?.classList.remove("btn--loading"),this.quickAddButtonSpinner?.classList.add("hidden")}get quickAddDrawerId(){return document.getElementById("quick-add-drawer")?.dataset.sectionId}}customElements.get("quick-add-component")||customElements.define("quick-add-component",QuickAddComponent);class QuickAddDialog extends DialogComponent{#abortController=new AbortController;#currentCartItemCount=null;connectedCallback(){super.connectedCallback(),this.#initializeCartCount(),this.addEventListener(ThemeEvents.cartUpdate,this.handleCartUpdate,{signal:this.#abortController.signal}),this.addEventListener(DialogCloseEvent.eventName,this.#handleDialogClose)}disconnectedCallback(){super.disconnectedCallback(),this.#abortController.abort(),this.removeEventListener(DialogCloseEvent.eventName,this.#handleDialogClose)}#initializeCartCount(){const cartCountElement=document.querySelector('cart-count:not([data-context="drawer"])');if(cartCountElement?.refs?.cartBubbleCount){this.#currentCartItemCount=parseInt(cartCountElement.refs.cartBubbleCount.textContent??"0",10);return}const cartBubbleCount=document.querySelector(".cart-bubble__text-count");if(cartBubbleCount){this.#currentCartItemCount=parseInt(cartBubbleCount.textContent??"0",10);return}this.#currentCartItemCount=0}handleCartUpdate=event=>{if(event.detail.data?.didError)return;const itemCount=event.detail.data?.itemCount,isIncremental=event.detail.data?.isIncremental??!1;if(itemCount==null)return;let newCartItemCount;if(isIncremental){const currentCount2=this.#currentCartItemCount??0;newCartItemCount=Math.max(0,currentCount2+itemCount)}else newCartItemCount=Math.max(0,itemCount);const currentCount=this.#currentCartItemCount??0;newCartItemCount>currentCount&&this.closeDialog(),this.#currentCartItemCount=newCartItemCount};#updateProductTitleLink=event=>{const anchorElement=event.detail.data.html?.querySelector(".view-product-title a"),viewMoreDetailsLink=this.querySelector(".view-product-title a"),mobileProductTitle=this.querySelector(".product-header a");anchorElement&&(viewMoreDetailsLink&&(viewMoreDetailsLink.href=anchorElement.href),mobileProductTitle&&(mobileProductTitle.href=anchorElement.href))};#handleDialogClose=()=>{const iosVersion=getIOSVersion();!iosVersion||iosVersion.major>=17||iosVersion.major===16&&iosVersion.minor>=4||requestAnimationFrame(()=>{const grid=document.querySelector("#ResultsList [product-grid-view]");if(grid){const currentWidth=grid.getBoundingClientRect().width;grid.style.width=`${currentWidth-1}px`,requestAnimationFrame(()=>{grid.style.width=""})}})}}customElements.get("quick-add-dialog")||customElements.define("quick-add-dialog",QuickAddDialog); 2//# sourceMappingURL=/cdn/shop/t/43/assets/quick-add.js.map?v=175989212232369696381791381807
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.