{"version":3,"file":"Search.js","names":["Search","a","setters","Component","default","ajax","Event","trigger","deepMerge","mobileScrollEnable","mobileScrollDisable","scrollTo","stringify","parse","appendUrl","Seo","Accessibility","mix","execute","with","constructor","element","options","arguments","length","store","scrollTopOnUpdate","scrollToElementOnUpdate","scrollTopOffset","updateUrl","productPageSize","metaTitle","metaDescription","paginatedMetaTitle","paginatedMetaDescription","urlSearchParams","a11y","ariaLiveOpened","ariaLiveClosed","ariaCloseTimeout","isDWToolkitEnvironment","initCache","selectors","refinementsAriaLive","document","querySelector","refinementsPanel","initState","state","insertMode","refinementsPanelOpened","currentRefinementUrl","window","location","href","url","replaceState","bindEvents","on","updateSearch","toggleRefinementsPanel","closeRefinementsPanel","openRefinementsPanel","classList","remove","updateAria","removeAttribute","destroyModalPattern","accordion","expandedItems","Array","from","querySelectorAll","add","setAttribute","initModalPattern","params","headers","urlParams","Object","assign","refinementId","_refinement","emit","getSearchUrl","then","onSearchUpdated","bind","catch","onSearchFailed","isHistoryState","SystemJS","import","History","pushState","pathname","data","processUpdateData","template","rewriteUrlPagingParams","dontUpdateURL","search","refinements","refinementsCount","isCategorySearch","reftype","updateSeo","QueryStr","split","parsedQueryStr","start","parseInt","sz","pagingIndex","Math","floor","Number","isNaN","canicalHref","getCanonicalHref","canonicalBaseUrl","canonicalQueryStr","parsedCanonicalQueryStr","setTitle","replace","setDescription","newCanonicalQuery","setCanonicalHref","getAlternateLinksElts","forEach","alternateLink","baseUrl","newAlternateQuery","searchQuery","parsedQueryString","includes","trim","JSON","e","console","error"],"sources":["components/search/Search.js"],"sourcesContent":["import Component from 'core/Component';\nimport { ajax } from 'toolbox/ajax';\nimport { Event } from 'services/EventEmitter';\nimport { trigger } from 'toolbox/event';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { mobileScrollEnable, mobileScrollDisable, scrollTo } from 'toolbox/scroll';\nimport { stringify, parse, appendUrl } from 'toolbox/queryString';\nimport { Seo } from 'services/Seo';\nimport Accessibility from 'mixins/Accessibility';\nimport { mix } from 'core/mixwith';\n\n/**\n * This is a description of the Search constructor function.\n * @class\n * @classdesc This is a description of the Search class.\n * @extends Component\n */\nexport default class Search extends mix(Component).with(Accessibility) {\n /**\n * Constructor of the class that mainly merge the options of the components\n *\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options That belongs to the component\n * @param {Object} store Store\n */\n constructor(element, options = {}, store) {\n super(element, deepMerge({\n scrollTopOnUpdate: true, // Scroll to top after the result is refreshed.\n scrollToElementOnUpdate: null, // scrollTopOnUpdate needs to be enabled Scroll to element on update.\n scrollTopOffset: 153, // Change the edge offset If you have a fixed navigation bar\n updateUrl: true, // Update the url\n productPageSize: null,\n metaTitle: '',\n metaDescription: '',\n paginatedMetaTitle: '',\n paginatedMetaDescription: '',\n urlSearchParams: null, // object of params that will be sent with search request\n a11y: {\n ariaLiveOpened: '', // Text used for the voice message when refinements panel is opening\n ariaLiveClosed: '', // Text used for the voice message when refinements panel is closing\n },\n ariaCloseTimeout: 5000,\n isDWToolkitEnvironment: false,\n }, options), store);\n }\n\n /**\n * All selectors must be cached. Never cache elements that are out of the component scope\n */\n initCache() {\n this.selectors.refinementsAriaLive = document.querySelector('[data-js-refinements-aria]');\n this.selectors.refinementsPanel = document.querySelector('[data-js-search-refinements-panel]');\n }\n\n /**\n * Init the different state of the component\n * It helps to avoid heavy DOM manipulation\n */\n initState() {\n this.state.insertMode = false;\n this.state.refinementsPanelOpened = false;\n this.state.currentRefinementUrl = window.location.href;\n\n // Store the initial history state so we can retrieve it later on event 'state.changed'\n // We can later load this state when the user browses back to this point\n this.updateUrl({\n url: this.state.currentRefinementUrl,\n insertMode: false,\n replaceState: true,\n });\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonymous function\n */\n bindEvents() {\n Event.on('search.paging.update', this.updateSearch, this);\n Event.on('search.sort.update', this.updateSearch, this);\n Event.on('search.refinementsPanel.toggle', this.toggleRefinementsPanel, this);\n Event.on('state.changed', this.updateSearch, this);\n Event.on('search.refinements.apply', this.updateSearch, this);\n }\n\n /**\n * Toggle Refinements panel.\n * Controls for this functionality are used only for mobile\n */\n toggleRefinementsPanel() {\n if (this.state.refinementsPanelOpened) {\n this.closeRefinementsPanel();\n } else {\n this.openRefinementsPanel();\n }\n }\n\n /**\n * Close Refinements panel\n */\n closeRefinementsPanel() {\n this.state.refinementsPanelOpened = false;\n this.element.classList.remove('m-refinements-panel-active');\n mobileScrollEnable();\n\n if (this.selectors.refinementsAriaLive && this.selectors.refinementsPanel) {\n this.updateAria(this.selectors.refinementsAriaLive, this.options.a11y.ariaLiveClosed);\n this.selectors.refinementsPanel.removeAttribute('role');\n this.selectors.refinementsPanel.removeAttribute('aria-modal');\n this.selectors.refinementsPanel.removeAttribute('aria-labelledby');\n }\n\n this.destroyModalPattern(true);\n }\n\n /**\n * Open Refinements panel\n */\n openRefinementsPanel() {\n const accordion = document.querySelector('[data-js-refinements-accordion]');\n const expandedItems = accordion && Array.from(accordion.querySelectorAll('.m-expanded'));\n this.state.refinementsPanelOpened = true;\n this.element.classList.add('m-refinements-panel-active');\n if (accordion) {\n trigger('accordion.open', accordion, { expandedItems });\n }\n mobileScrollDisable();\n\n if (this.selectors.refinementsAriaLive && this.selectors.refinementsPanel) {\n this.updateAria(this.selectors.refinementsAriaLive, this.options.a11y.ariaLiveOpened);\n this.selectors.refinementsPanel.setAttribute('role', 'dialog');\n this.selectors.refinementsPanel.setAttribute('aria-modal', 'true');\n this.selectors.refinementsPanel.setAttribute('aria-labelledby', 'refinements-navigation-menu');\n }\n\n if (accordion) {\n this.initModalPattern(accordion, null, true);\n }\n }\n\n /**\n * Trigger an update of the search results\n *\n * @param {Object} params incoming for update search\n * @returns {Promise} Ajax request\n */\n updateSearch(params) {\n const headers = {};\n this.state.insertMode = !!params.insertMode;\n\n if (this.options.urlSearchParams) {\n params.url = appendUrl(params.url, this.options.urlSearchParams);\n }\n\n const urlParams = Object.assign({}, params.urlParams);\n\n if (this.state.insertMode) {\n urlParams.insertMode = true;\n }\n\n if (urlParams) {\n params.url = appendUrl(params.url, urlParams);\n }\n\n if (params.refinementId) {\n headers._refinement = params.refinementId;\n }\n\n Event.emit('search.update', params, this.state.insertMode);\n\n const url = this.getSearchUrl(params.url);\n\n return ajax(url, { headers })\n .then(this.onSearchUpdated.bind(this, params))\n .catch(this.onSearchFailed.bind(this));\n }\n\n /**\n * Refresh the URL\n *\n * @param {Object} params incoming for update search\n */\n updateUrl(params) {\n // there is no need to add new history state if the current search state is retrieved from history\n if (params && !params.isHistoryState && params.url) {\n SystemJS.import('services/History').then((History) => {\n params.isHistoryState = true;\n if (!params.replaceState) {\n History.pushState(params, '', params.url);\n } else {\n History.replaceState(params, '', params.url);\n }\n });\n }\n }\n\n /**\n * Get the full Url with all the filter params passed as a query string\n *\n * @param {String} url incoming current url\n * @returns {String} url\n */\n getSearchUrl(url) {\n return url || window.location.pathname;\n }\n\n /**\n * Callback when results of the search has been returned\n *\n * @param {Object} params for search\n * @param {Object} data Data\n */\n onSearchUpdated(params, data) { // eslint-disable-line complexity\n data = this.processUpdateData(data);\n\n if (data) {\n data.template = this.element.querySelector('[data-component=\"search/SearchGrid\"]');\n Event.emit('search.updated', data, this.state.insertMode);\n }\n\n params.url = params.url || this.state.currentRefinementUrl;\n\n if (params.insertMode) {\n params.url = this.rewriteUrlPagingParams(params.url);\n }\n\n if (!params.dontUpdateURL) {\n // used for mobile, to don't update URL for temporary refinements (til them will be not applied)\n this.state.currentRefinementUrl = params.url;\n\n if (this.options.updateUrl) {\n const urlParams = parse(window.location.search);\n\n if ((data\n && data.refinements\n && data.refinements.refinementsCount\n && !data.refinements.isCategorySearch) || urlParams.reftype === 'product') {\n params.url = appendUrl(params.url, { reftype: 'product' });\n }\n this.updateUrl(params);\n }\n }\n\n if (data.isCategorySearch) { // for now, only enabled on CLP\n this.updateSeo(params.url);\n }\n\n if (this.options.scrollTopOnUpdate && !this.state.insertMode) {\n const scrollToElementOnUpdate = this.element.querySelector(this.options.scrollToElementOnUpdate);\n\n scrollTo(scrollToElementOnUpdate || this.element, this.options.scrollTopOffset);\n }\n\n this.state.insertMode = false;\n }\n\n /**\n * Update seo based on new pagination params\n * @param {string} url -url\n * @returns {boolean} -status true if seo has been updated\n */\n updateSeo(url) {\n const [, QueryStr] = url.split('?');\n const parsedQueryStr = parse(QueryStr);\n const start = parseInt(parsedQueryStr.start, 10);\n const sz = parseInt(parsedQueryStr.sz, 10);\n const pagingIndex = Math.floor((start + sz) / this.options.productPageSize);\n if (this.options.productPageSize === null || Number.isNaN(pagingIndex)) {\n return false;\n }\n\n const canicalHref = Seo.getCanonicalHref();\n const [canonicalBaseUrl, canonicalQueryStr] = canicalHref && canicalHref.split('?');\n const parsedCanonicalQueryStr = parse(canonicalQueryStr);\n if (pagingIndex > 1) {\n Seo.setTitle(this.options.paginatedMetaTitle.replace('{pagingIndex}', pagingIndex));\n Seo.setDescription(this.options.paginatedMetaDescription.replace('{pagingIndex}', pagingIndex));\n parsedCanonicalQueryStr.sz = sz;\n parsedCanonicalQueryStr.start = start;\n } else {\n Seo.setTitle(this.options.metaTitle);\n Seo.setDescription(this.options.metaDescription);\n delete parsedCanonicalQueryStr.sz;\n delete parsedCanonicalQueryStr.start;\n }\n\n const newCanonicalQuery = stringify(parsedCanonicalQueryStr, true);\n Seo.setCanonicalHref(newCanonicalQuery ? `${canonicalBaseUrl}?${newCanonicalQuery}` : canonicalBaseUrl);\n Seo.getAlternateLinksElts().forEach((alternateLink) => {\n if (!alternateLink.href) {\n return;\n }\n const [baseUrl] = alternateLink.href.split('?');\n const newAlternateQuery = stringify(parsedCanonicalQueryStr, true);\n alternateLink.href = newAlternateQuery ? `${baseUrl}?${newAlternateQuery}` : baseUrl;\n });\n return true;\n }\n\n /**\n * Rewrites the url queryString 'start' and 'sz' params for pagingType 'loadMore'\n * @param {String} url - original url, valid for pagingType 'paging'\n * @returns {String} modified url, valid for pagingType 'loadMore'\n */\n rewriteUrlPagingParams(url) {\n const [baseUrl, searchQuery] = url.split('?');\n const parsedQueryString = parse(searchQuery);\n const start = parseInt(parsedQueryString.start, 10);\n const sz = parseInt(parsedQueryString.sz, 10);\n if (Number.isNaN(start + sz)) {\n return url;\n }\n parsedQueryString.start = 0;\n parsedQueryString.sz = start + sz;\n return `${baseUrl}?${stringify(parsedQueryString, true)}`;\n }\n\n /**\n * Callback when a search failed\n */\n onSearchFailed() {\n Event.emit('search.failed');\n Event.emit('search.removeLoader');\n }\n\n\n /**\n * Remove the CQuotient Activity script and page dwMarker from the response\n * @param {Object|String} data response data\n * @returns {Object} parsed data\n */\n processUpdateData(data) {\n // if the environment is not DW Toolkit, return the data as is\n if (!this.options.isDWToolkitEnvironment) {\n return data;\n }\n\n // remove the CQuotient Activity script from the response\n if (typeof data === 'string' && data.includes('\n data = data.replace(//g, '');\n data = data.replace(//g, '');\n data = data.trim();\n\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.error('Unable to parse the response data after removing CQuotient Activity script and dwMarkers');\n data = {};\n }\n }\n\n return data;\n }\n}\n"],"mappings":"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","ignoreList":[]}