{"version":3,"names":["noResultCss","NoResultStyle0","NoResult","this","boundToCommerce","unsubscribe","renderMagnifyingGlassIcon","css","h","id","xmlns","viewBox","width","class","d","handleTabChange","forceRerender","connectedCallback","host","closest","waitForAtomic","commerceBindings","initializeBindings","document","querySelector","commerceSearch","buildSearch","engine","subscribe","productStatusState","summary","state","query","searchBindings","statusController","buildSearchStatus","_d","_c","_b","_a","q","searchStatusState","error","console","remove","disconnectedCallback","renderNoResults","render","params","URLSearchParams","window","location","search","tabValue","get","isSearch","firstRequestExecuted","isLoading","hasProducts","totalNumberOfProducts","classList","firstSearchExecuted","hasResults","add"],"sources":["src/components/no-result/no-result.css?tag=no-result&encapsulation=shadow","src/components/no-result/no-result.tsx"],"sourcesContent":[".no-result-wrapper{\r\n display: flex;\r\n justify-content: center;\r\n flex-direction: column;\r\n align-items: center;\r\n}\r\n\r\n","import { Bindings, CommerceBindings, initializeBindings } from \"@coveo/atomic\";\r\nimport { Component, Element, h, Listen, State } from \"@stencil/core\";\r\nimport {\r\n SearchStatusState,\r\n buildSearchStatus,\r\n Unsubscribe,\r\n} from \"@coveo/headless\";\r\nimport { waitForAtomic } from \"../../utils/atomic\";\r\nimport { buildSearch, SearchSummaryState } from \"@coveo/headless/commerce\";\r\n\r\n@Component({\r\n tag: \"no-result\",\r\n styleUrl: \"no-result.css\",\r\n shadow: true,\r\n})\r\nexport class NoResult {\r\n private searchBindings?: Bindings;\r\n private commerceBindings?: CommerceBindings;\r\n private query?: string;\r\n private boundToCommerce: boolean = false;\r\n\r\n private unsubscribe: Unsubscribe = () => {};\r\n\r\n @Element() private host!: Element;\r\n\r\n @State() private searchStatusState!: SearchStatusState;\r\n @State() private productStatusState!: SearchSummaryState;\r\n\r\n @State() forceRerender = false;\r\n\r\n @Listen('tabManagerChange', { target: 'document' })\r\n handleTabChange() {\r\n this.forceRerender = !this.forceRerender; // Toggling State to force re-render\r\n // Now that we optimized search calls to not trigger on every tab change, when there are no results and we switch tabs we need\r\n // to force a re-render to show the no results message in a case where a new search is not triggered)\r\n }\r\n\r\n public async connectedCallback() {\r\n this.boundToCommerce = this.host.closest('atomic-commerce-interface') != null;\r\n try {\r\n await waitForAtomic();\r\n\r\n if(this.boundToCommerce){\r\n this.commerceBindings = await initializeBindings(\r\n document.querySelector(\"atomic-commerce-interface\") as Element\r\n );\r\n const commerceSearch = buildSearch(this.commerceBindings.engine);\r\n this.unsubscribe = commerceSearch.subscribe(() => {\r\n this.productStatusState = commerceSearch.summary().state;\r\n this.query = this.productStatusState.query;\r\n })\r\n }\r\n else{\r\n this.searchBindings = await initializeBindings(\r\n document.querySelector(\"atomic-search-interface\") as Element\r\n );\r\n const statusController = buildSearchStatus(this.searchBindings.engine);\r\n this.unsubscribe = statusController.subscribe(() => {\r\n this.query = this.searchBindings?.engine?.state?.query?.q;\r\n this.searchStatusState = statusController.state;\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n this.host.remove();\r\n }\r\n }\r\n\r\n public disconnectedCallback() {\r\n this.unsubscribe();\r\n }\r\n\r\n private renderMagnifyingGlassIcon = () => {\r\n const css = `\r\n .cls-1 {\r\n fill: #00aeef;\r\n }\r\n\r\n .cls-1, .cls-2, .cls-3 {\r\n stroke-width: 0px;\r\n }\r\n\r\n .cls-2 {\r\n fill: #005993;\r\n }\r\n\r\n .cls-3 {\r\n fill: #ef592d;\r\n }`;\r\n return ()\r\n }\r\n\r\n private renderNoResults() {\r\n return (\r\n
\r\n {this.renderMagnifyingGlassIcon()}\r\n