{"version":3,"names":["coveoSearchScopeDropdownCss","CoveoSearchScopeDropdownStyle0","SearchScopeDropdown","this","getSearchParameters","async","verifyIfPresent","retries","resolve","reject","_a","window","searchParameters","searchPageUrl","setTimeout","Promise","onTabManagerChange","evt","detail","select","PRODUCTS","CONTENT","DOCUMENTS","ENTIRE_SITE","connectedCallback","customElements","whenDefined","then","updateRedirectionUrl","getProductListingDropdownOption","catch","e","console","error","plpOption","currentOption","fetchInitialQueryValue","renderOptions","h","class","id","renderOption","renderPlpOption","document","querySelector","onClick","currentCategory","root","label","productListingDropdownOption","path","searchTab","searchCategory","categoryPathToCategoryFacetValue","log","replace","option","silent","updateInstantResultQueries","scopeDropDownChange","emit","SB","maxWithQuery","maxSBWithQuery","maxWithoutQuery","maxSBWithoutQuery","RQ","maxRRWithQuery","maxRRWithoutQuery","removeTrailingSlash","location","pathname","removeAttribute","url","toLowerCase","split","map","c","encodeURIComponent","join","_b","setAttribute","str","render","key","type"],"sources":["src/components/coveo-search-scope-dropdown/coveo-search-scope-dropdown.css?tag=coveo-search-scope-dropdown","src/components/coveo-search-scope-dropdown/coveo-search-scope-dropdown.tsx"],"sourcesContent":["#searchScope {\r\n height: 100%;\r\n display: flex;\r\n}\r\n\r\n","import { Component, h, State, Event, EventEmitter, Listen } from \"@stencil/core\";\r\n\r\n/**\r\n * Sample custom Atomic component, initializing itself against a parent search interface in order to retrieve the bindings.\r\n *\r\n * This component showcases a custom-made pagination component, for educational purposes.\r\n *\r\n * In a real life scenario, we recommend using either [atomic-pager](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-pager/) or [atomic-load-more-results](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-load-more-results/) instead.\r\n */\r\n\r\ninterface SearchScopeDropdownOption {\r\n label: string,\r\n searchTab: string,\r\n searchCategory?: string\r\n}\r\n\r\n@Component({\r\n tag: \"coveo-search-scope-dropdown\",\r\n styleUrl: \"coveo-search-scope-dropdown.css\",\r\n shadow: false,\r\n})\r\nexport class SearchScopeDropdown {\r\n static ENTIRE_SITE: SearchScopeDropdownOption = {\r\n label: 'Entire Site',\r\n searchTab: 'products'\r\n }\r\n static PRODUCTS: SearchScopeDropdownOption = {\r\n label: 'Products',\r\n searchTab: 'products'\r\n }\r\n static CONTENT: SearchScopeDropdownOption = {\r\n label: 'Content',\r\n searchTab: 'content'\r\n }\r\n static DOCUMENTS: SearchScopeDropdownOption = {\r\n label: 'Documents',\r\n searchTab: 'documents'\r\n }\r\n\r\n @State() private productListingDropdownOption?: SearchScopeDropdownOption;\r\n\r\n private maxSBWithQuery?: number ;\r\n private maxSBWithoutQuery?: number ;\r\n\r\n private maxRRWithQuery?: number ;\r\n private maxRRWithoutQuery?: number ;\r\n\r\n @Event() private scopeDropDownChange!: EventEmitter;\r\n\r\n @State() private currentOption!: SearchScopeDropdownOption;\r\n\r\n @Listen('tabManagerChange', {target: 'document'})\r\n onTabManagerChange(evt: CustomEvent){\r\n switch (evt.detail) {\r\n case 'products':\r\n this.select(SearchScopeDropdown.PRODUCTS, true);\r\n break;\r\n case 'content':\r\n this.select(SearchScopeDropdown.CONTENT, true);\r\n break;\r\n case 'documents':\r\n this.select(SearchScopeDropdown.DOCUMENTS, true);\r\n break;\r\n default:\r\n this.select(SearchScopeDropdown.ENTIRE_SITE, true);\r\n break;\r\n }\r\n }\r\n\r\n private getSearchParameters = async () => {\r\n const verifyIfPresent = (retries: number, resolve: any, reject: any) => {\r\n if(window.searchParameters?.searchPageUrl){\r\n resolve(window.searchParameters)\r\n } else {\r\n if(retries < 1){\r\n reject('timeout 5 seconds without search parameters');\r\n }\r\n setTimeout(() => verifyIfPresent(retries - 1, resolve, reject), 1000);\r\n }\r\n };\r\n return new Promise((resolve, reject) => {\r\n verifyIfPresent(5,resolve, reject)\r\n });\r\n }\r\n\r\n // We recommend initializing the bindings and the Headless controllers\r\n // using the `connectedCallback` lifecycle method with async/await.\r\n // Using `componentWillLoad` will hang the parent atomic-search-interface initialization.\r\n public async connectedCallback() {\r\n try {\r\n // Wait for the Atomic to load and bindings to be resolved.\r\n await customElements.whenDefined('atomic-commerce-search-box');\r\n // Wait for the search parameters to be set on the window object then update url redirection\r\n this.getSearchParameters()\r\n .then(() => {\r\n this.updateRedirectionUrl();\r\n this.getProductListingDropdownOption();\r\n })\r\n .catch(e => console.error(e));\r\n\r\n let plpOption = this.getProductListingDropdownOption()\r\n this.currentOption = plpOption ? plpOption : SearchScopeDropdown.ENTIRE_SITE;\r\n \r\n this.fetchInitialQueryValue();\r\n this.updateRedirectionUrl();\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n private renderOptions(){\r\n return (\r\n
\r\n {this.renderOption(SearchScopeDropdown.ENTIRE_SITE)}\r\n {this.renderOption(SearchScopeDropdown.PRODUCTS)}\r\n {this.renderOption(SearchScopeDropdown.CONTENT)}\r\n {this.renderOption(SearchScopeDropdown.DOCUMENTS)}\r\n {this.renderPlpOption()}\r\n
\r\n )\r\n }\r\n\r\n private renderPlpOption(){\r\n if(!!document.querySelector('#product-listing-interface')){ // if on a plp\r\n const plpOption = this.getProductListingDropdownOption();\r\n if(plpOption) {\r\n return (\r\n
  • {\r\n this.select(plpOption);\r\n }}\r\n >\r\n {window.searchParameters.currentCategory.root.label}\r\n
  • \r\n )\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n \r\n }\r\n\r\n private getProductListingDropdownOption(){\r\n if(!this.productListingDropdownOption){//lazy loading\r\n if(window.searchParameters && window.searchParameters.currentCategory){\r\n const {label, path} = window.searchParameters.currentCategory.root;\r\n if(label && path) {\r\n this.productListingDropdownOption = {\r\n label: label,\r\n searchTab: SearchScopeDropdown.PRODUCTS.searchTab,\r\n searchCategory: this.categoryPathToCategoryFacetValue(path),\r\n }\r\n }\r\n }\r\n }\r\n return this.productListingDropdownOption;\r\n }\r\n\r\n private categoryPathToCategoryFacetValue(path: string){\r\n console.log(\"test\", path);\r\n return path.replace(/\\//g,',');\r\n }\r\n\r\n private renderOption(option: SearchScopeDropdownOption){\r\n return (\r\n
  • (\r\n this.select(option)\r\n )}\r\n >\r\n {option.label}\r\n
  • \r\n )\r\n }\r\n\r\n private select(option: SearchScopeDropdownOption, silent: boolean = false){\r\n this.currentOption = option;\r\n this.updateRedirectionUrl();\r\n this.updateInstantResultQueries();\r\n if(!silent){\r\n this.scopeDropDownChange.emit(option.searchTab);\r\n }\r\n }\r\n\r\n /* stores default page values */\r\n private fetchInitialQueryValue () {\r\n let SB = document.querySelector(\"atomic-commerce-search-box-query-suggestions\")\r\n if (SB) {\r\n if (SB.maxWithQuery && SB.maxWithQuery >= 0) {\r\n this.maxSBWithQuery = SB.maxWithQuery\r\n }\r\n\r\n if (SB.maxWithoutQuery && SB.maxWithoutQuery >= 0) {\r\n this.maxSBWithoutQuery = SB.maxWithoutQuery \r\n }\r\n }\r\n\r\n let RQ = document.querySelector(\"atomic-commerce-search-box-recent-queries\")\r\n if (RQ) {\r\n if (RQ.maxWithQuery && RQ.maxWithQuery >= 0) {\r\n this.maxRRWithQuery = RQ.maxWithQuery\r\n }\r\n\r\n if (RQ.maxWithoutQuery && RQ.maxWithoutQuery >= 0) {\r\n this.maxRRWithoutQuery = RQ.maxWithoutQuery \r\n }\r\n }\r\n }\r\n\r\n private updateInstantResultQueries () {\r\n const {searchTab} = this.currentOption;\r\n\r\n let SB = document.querySelector(\"atomic-commerce-search-box-query-suggestions\")\r\n let RQ = document.querySelector(\"atomic-commerce-search-box-recent-queries\")\r\n\r\n if (searchTab == SearchScopeDropdown.CONTENT.searchTab || searchTab == SearchScopeDropdown.DOCUMENTS.searchTab ) {\r\n if (RQ) {\r\n if (this.maxRRWithQuery) {\r\n RQ.maxWithQuery = 0\r\n }\r\n \r\n if (this.maxRRWithoutQuery ) {\r\n RQ.maxWithoutQuery = 0\r\n }\r\n }\r\n\r\n if (SB) {\r\n if (this.maxSBWithQuery) {\r\n SB.maxWithQuery = 0\r\n }\r\n \r\n if (this.maxSBWithoutQuery) {\r\n SB.maxWithoutQuery = 0\r\n }\r\n }\r\n }\r\n else {\r\n if (RQ) {\r\n if (this.maxRRWithQuery) {\r\n RQ.maxWithQuery = this.maxRRWithQuery\r\n }\r\n\r\n if (this.maxRRWithoutQuery ) {\r\n RQ.maxWithoutQuery = this.maxRRWithoutQuery \r\n }\r\n }\r\n\r\n if (SB) {\r\n if (this.maxSBWithQuery) {\r\n SB.maxWithQuery = this.maxSBWithQuery\r\n }\r\n\r\n if (this.maxSBWithoutQuery) {\r\n SB.maxWithoutQuery = this.maxSBWithoutQuery\r\n }\r\n }\r\n }\r\n }\r\n \r\n private updateRedirectionUrl() {\r\n const {searchTab, searchCategory} = this.currentOption;\r\n if(window.searchParameters && window.searchParameters.searchPageUrl){\r\n //removeTrailingSlash: get rid of trailing slash for comparison - window.location.pathname has it in local dev, causing reload issue in local\r\n if(this.removeTrailingSlash(window.searchParameters.searchPageUrl) === this.removeTrailingSlash(window.location.pathname)){\r\n document.querySelector('atomic-commerce-search-box')?.removeAttribute(\"redirection-url\");\r\n } else {\r\n let url = `${window.searchParameters.searchPageUrl}?tab=${searchTab.toLowerCase()}`;\r\n url += searchCategory ? `&category=${searchCategory.split(',').map(c => encodeURIComponent(c)).join(',')}` : '';\r\n document.querySelector('atomic-commerce-search-box')?.setAttribute(\"redirection-url\", url); \r\n }\r\n }\r\n }\r\n\r\n private removeTrailingSlash(str: string){\r\n return str.replace(/\\/+$/, \"\");\r\n }\r\n\r\n public render() {\r\n if(this.currentOption?.label){\r\n return (\r\n
    \r\n \r\n {this.renderOptions()}\r\n
    \r\n );\r\n }\r\n\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}