1const KeenSlider=window.KeenSlider,{breakpoints}=window.BAO.MediaBreakpoints,{setInitialised,addWheelControls}=window.BAO.Carousel.plugins,{getElement}=window.BAO.Utils;class HeaderSearchDropdown extends window.BAO.CustomElement(){constructor(){super(),this.eventBus=window.theme.nosto.eventBus,this.events=window.theme.autocomplete.events,this.config=window.theme.autocomplete.config,this.lastResponse=null,this.initialViewRendered=!1,this.cardCache=new Map}connectedCallback(){super.connectedCallback(),this.initialViewCarousel=this.setInitialViewCarousel(),this.subscribeToEvents(),this.handleResize();const snapshot=window.theme.autocomplete.stateLayer?.state;snapshot&&this.handleResponseUpdated(snapshot)}setupListeners(){super.setupListeners(),this.handleResize=this.handleResize.bind(this),this.debouncedResize=window.BAO.Utils.debounce(event=>{this.handleResize(event)},this.config.debounceMs),this.listeners.add(window,"resize",this.debouncedResize),this.debouncedHandleInput=window.BAO.Utils.debounce(event=>{this.handleInput(event)},this.config.debounceMs),this.listeners.add(this.externalEls.mobileInput.element,"input",this.debouncedHandleInput),this.listeners.add(this.externalEls.desktopInput.element,"input",this.debouncedHandleInput),this.listeners.add(this.externalEls.form.element,"submit",this.handleSubmit.bind(this)),this.listeners.add(this.els.resultsKeywordsTemplate.element,"click",this.handleKeywordClick.bind(this)),this.listeners.add(this.els.resultsProducts.element,"click",this.handleProductCardClick.bind(this)),this.els.toggle?.elements.forEach(toggleEl=>{this.listeners.add(toggleEl,"click",this.handleToggle.bind(this))})}subscribeToEvents(){this.eventBus.subscribe(this.events.STATE.RESPONSE_UPDATED,this.handleResponseUpdated.bind(this)),document.addEventListener("drawer-changed",this.handleDrawerChange.bind(this))}setInitialViewCarousel(){if(this.els.slide?.exists)return new KeenSlider(this.els.slides.element,{selector:this.els.slide.selector,defaultAnimation:{duration:1500},loop:!1,mode:"snap",slides:{perView:1.7,spacing:1},breakpoints:{[`(min-width: ${breakpoints.sm}px)`]:{slides:{perView:2.2,spacing:1}},[`(min-width: ${breakpoints.lg}px)`]:{disabled:!0}}},[setInitialised(),addWheelControls("horizontal")])}handleResize(){if(window.BAO.MediaBreakpoints.isLg){this.externalEls.dialog.element.setAttribute("popover","auto");return}this.externalEls.dialog.element.removeAttribute("popover")}handleInput(event){this.externalEls.mobileInput.element.value=event.target.value,this.externalEls.desktopInput.element.value=event.target.value;const query=event.target.value.trim();query!==this.lastResponse.activeTerm&&(this.query=query,this.eventBus.publish(this.events.UI.QUERY_UPDATED,{query}))}handleSubmit(event){if(this.lastResponse?.fetching||!this.lastResponse?.activeTerm){event.preventDefault();return}this.eventBus.publish(this.events.TRACKING.SUBMIT_SEARCH,{query:this.query}),this.lastResponse.redirect&&(event.preventDefault(),window.location.href=this.lastResponse.redirect)}handleKeywordClick(event){if(!event.target.closest(".hd-SearchDropdown_Link"))return;const response=this.lastResponse;response&&this.eventBus.publish(this.events.TRACKING.KEYWORD_CLICKED,{request:{query:response.activeTerm},results:response.products})}handleProductCardClick(event){const productCard=event.target.closest(".prd-Card"),url=productCard?.dataset.productUrl||!1;!productCard||!url||this.eventBus.publish(this.events.TRACKING.PRODUCT_CLICKED,{productId:productCard.dataset.productId,productUrl:productCard.dataset.productUrl})}handleToggle(event){const type=event.target.dataset.type;this.els.toggle.elements.forEach(toggleEl=>{if(toggleEl.dataset.type===type){toggleEl.setAttribute("aria-expanded",!0);return}toggleEl.setAttribute("aria-expanded",!1)}),this.els.toggleTemplate.elements.forEach(templateEl=>{if(templateEl.dataset.type===type){templateEl.setAttribute("aria-hidden",!1);return}templateEl.setAttribute("aria-hidden",!0)})}handleDrawerChange(){if(window.drawers.activeDrawerKey==="search"){setTimeout(()=>{window.BAO.MediaBreakpoints.isLg?this.externalEls.desktopInput.element.focus():this.externalEls.mobileInput.element.focus()},500);return}setTimeout(()=>{this.externalEls.mobileInput.element.value="",this.externalEls.desktopInput.element.value="",this.query="",this.eventBus.publish(this.events.UI.QUERY_UPDATED,{query:""})},500)}async handleResponseUpdated(response){this.lastResponse=response;const view=this.pickView(response);switch(response.activeTerm&&window.drawers?.activeDrawerKey!=="search"&&getElement("site-drawers").open("search"),view){case"initial":this.renderSearches(response.popularSearches,response.recentSearches);break;case"results":await this.renderProducts(response.products,response.activeTerm),this.renderKeywords(response.keywords),this.renderCategories(response.categories);break;case"no-results":this.renderNoResults(response.activeTerm);break;case"redirect":this.renderRedirect(response.redirect);break}this.setView(view)}pickView(response){if(response.fetching)return"initial";const hasTerm=response.activeTerm?.length>1,hasHits=response.products?.hits?.length>0,hasRedirect=response.redirect;return hasTerm&&hasHits?"results":hasTerm&&hasRedirect&&!hasHits?"redirect":hasTerm&&!hasHits?"no-results":"initial"}setView(view){const views={initial:this.els.initialView.element,results:this.els.resultsView.element,"no-results":this.els.noResultsView.element,redirect:this.els.redirectView.element};
1Object.entries(views).forEach(([name,element])=>{name===view?element.removeAttribute("hidden"):element.setAttribute("hidden","")})}renderSearches(popular,recent){this.initialViewRendered||(popular.length?(this.els.initialPopularSearches.element.removeAttribute("hidden"),this.els.initialPopularSearchesTemplate.element.innerHTML=this.templateKeywords(popular)):(this.els.initialPopularSearches.element.setAttribute("hidden",""),this.els.initialPopularSearchesTemplate.element.innerHTML=""),recent.length?(this.els.initialRecentSearches.element.removeAttribute("hidden"),this.els.initialRecentSearchesTemplate.element.innerHTML=this.templateKeywords(recent)):(this.els.initialRecentSearches.element.setAttribute("hidden",""),this.els.initialRecentSearchesTemplate.element.innerHTML=""),this.initialViewRendered=!0)}renderProducts(products,query){return new Promise(async resolve=>{this.els.resultsProductsLink.element.setAttribute("href",`/search?q=${encodeURIComponent(query)}`);const titleEl=this.els.resultsProductsTitle.element,productsTotal=window.BAO.Utils.formatMoney(products.total*100,"{{amount_no_decimals}}"),string=titleEl.dataset.format.replaceAll("[count]",productsTotal);titleEl.textContent=string;const list=this.els.resultsProductsTemplate.element,htmlList=await Promise.all(products.hits.map(async product=>{if(!product.url)return"";let url=new URL(product.url);url=url.pathname,url.startsWith(window.Shopify.routes.root)||(url=`${window.Shopify.routes.root}${url}`);let articleHtml=this.cardCache.get(product.url);if(!articleHtml)try{const sectionHtml=await window.BAO.sectionRenderer.fetchSingle("nosto-product-card",url),articleElement=window.BAO.sectionRenderer.convertToDOM(sectionHtml).querySelector(".prd-Card");articleElement.setAttribute("data-nosto-type","autocomplete"),articleHtml=articleElement?articleElement.outerHTML:"",this.cardCache.set(url,articleHtml)}catch(error){return console.error("Failed to load product card",error),""}return articleHtml?`
2 <div class="hd-SearchDropdown_ResultsItem"> 3 ${articleHtml} 4 </div> 5 `:""}));list.innerHTML=htmlList.join(""),resolve()})}renderKeywords(keywords){const titleEl=this.els.toggle.elements.find(el=>el.dataset.type==="keywords"),templateEl=this.els.toggleTemplate.elements.find(el=>el.dataset.type==="keywords");if(!keywords.hits?.length){titleEl.setAttribute("hidden",""),templateEl.setAttribute("hidden",""),templateEl.innerHTML="";return}titleEl.removeAttribute("hidden"),templateEl.removeAttribute("hidden"),templateEl.innerHTML=this.templateKeywords(keywords.hits)}renderCategories(categories){const titleEl=this.els.toggle.elements.find(el=>el.dataset.type==="categories"),templateEl=this.els.toggleTemplate.elements.find(el=>el.dataset.type==="categories");if(!categories.length){titleEl.setAttribute("hidden",""),templateEl.setAttribute("hidden",""),templateEl.innerHTML="";return}titleEl.removeAttribute("hidden"),templateEl.removeAttribute("hidden"),templateEl.innerHTML=this.templateCategories(categories)}renderNoResults(query){const titleEl=this.els.noResultsTitle.element,string=titleEl.dataset.format.replaceAll("[query]",query);titleEl.innerHTML=string}renderRedirect(url){this.els.redirectTitle.element.href=url}escapeHtml(str){return String(str??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}templateKeywords(keywords){return keywords.map(object=>{const keyword=object.query||object.keyword;return` 6 <li class="hd-SearchDropdown_ListItem"> 7 <a 8 class="hd-SearchDropdown_Link fz-14_140" 9 href="${window.routes.searchUrl}?q=${encodeURIComponent(keyword)}" 10 > 11 ${this.escapeHtml(keyword)} 12 </a> 13 </li> 14 `}).join("")}templateCategories(categories){return categories.map(category=>` 15 <li class="hd-SearchDropdown_ListItem"> 16 <a 17 class="hd-SearchDropdown_Link fz-14_140" 18 href="${window.routes.collectionsUrl}/${category.urlPath}" 19 > 20 ${this.escapeHtml(category.name)} 21 </a> 22 </li> 23 `).join("")}}customElements.get("header-search-dropdown")||customElements.define("header-search-dropdown",HeaderSearchDropdown); 24//# sourceMappingURL=/cdn/shop/t/1735/assets/header-search-dropdown.js.map?v=165433300396657007041784714320
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.