{"version":3,"file":"Refinements.js","names":["Refinements","a","setters","Component","default","Event","on","off","mediaQuery","deepMerge","mix","LoaderMixin","Accessibility","execute","with","constructor","element","options","arguments","length","templateName","url","resetUrl","appliedFiltersQty","appliedRefinementUrl","dataModelId","trackFocusedElements","events","toggle","select","updated","apply","removeLoader","urlParams","components","isSlidingPanel","retainPanelOnReset","initCache","selectors","backButton","querySelectorAll","resetButton","applyButton","filterOptions","initState","state","loading","currentRefinementUrl","resetRefinementsUrl","bindEvents","onBackClick","bind","onApplyClick","onResetClick","onKeyboardControl","onPriceRangeSliderInitialized","onRefinementSelected","onRefinementsUpdated","onSearchRemoveLoader","afterInit","restoreLastFocusState","closePanel","is","updateRefinements","window","location","href","updateResults","emit","close","addLoader","overlay","refine","e","lastSelectedRefinement","refinementId","refinements","dontUpdateURL","Object","assign","data","isInsertMode","saveLastFocusState","categoryname","refinebycategory","componentOptions","render","onTabKey","event","focusTrap","key","destroy","removeListener"],"sources":["components/search/Refinements.js"],"sourcesContent":["import Component from 'core/Component';\nimport { Event } from 'services/EventEmitter';\nimport { on, off } from 'toolbox/event';\nimport { mediaQuery } from 'toolbox/mediaQuery';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { mix } from 'core/mixwith';\nimport LoaderMixin from 'mixins/Loader';\nimport Accessibility from 'mixins/Accessibility';\n\n/**\n * This is a description of the Refinements constructor function.\n * @class\n * @classdesc This is a description of the Refinements class.\n * @extends Component\n */\nexport default class Refinements extends mix(Component).with(LoaderMixin, 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 */\n constructor(element, options = {}) {\n super(element, deepMerge({\n templateName: 'search/refinements',\n url: '',\n resetUrl: '',\n appliedFiltersQty: 0,\n appliedRefinementUrl: null,\n dataModelId: 'refinements',\n trackFocusedElements: true, // enable focused element tracking\n events: {\n toggle: 'search.refinementsPanel.toggle',\n select: 'search.refinement.selected',\n updated: 'search.updated',\n apply: 'search.refinements.apply',\n removeLoader: 'search.removeLoader',\n },\n urlParams: {\n components: 'search_refinements',\n },\n isSlidingPanel: false,\n retainPanelOnReset: false, // retain panel open on reset\n }, options));\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.backButton = this.element.querySelectorAll('[data-js-refinements-back]');\n this.selectors.resetButton = this.element.querySelectorAll('[data-js-refinements-reset]');\n this.selectors.applyButton = this.element.querySelectorAll('[data-js-refinements-apply]');\n this.filterOptions = {};\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.loading = false;\n this.currentRefinementUrl = this.options.url;\n this.resetRefinementsUrl = this.options.resetUrl;\n this.appliedFiltersQty = this.options.appliedFiltersQty;\n this.appliedRefinementUrl = this.options.appliedRefinementUrl;\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 super.bindEvents();\n\n on('click', this.selectors.backButton, this.onBackClick.bind(this));\n on('click', this.selectors.applyButton, this.onApplyClick.bind(this));\n on('click', this.selectors.resetButton, this.onResetClick.bind(this));\n on('keydown', this.element, this.onKeyboardControl.bind(this));\n on('pricerangeslider.initialized', this.element, this.onPriceRangeSliderInitialized.bind(this));\n\n Event.on(this.options.events.select, this.onRefinementSelected, this);\n Event.on(this.options.events.updated, this.onRefinementsUpdated, this);\n Event.on(this.options.events.removeLoader, this.onSearchRemoveLoader, this);\n }\n\n /**\n * After init\n * Run any script after the component is fully initialized\n */\n afterInit() {\n this.restoreLastFocusState();\n }\n\n /**\n * Restores last focus state\n * @listens pricerangeslider.initialized\n */\n onPriceRangeSliderInitialized() {\n this.restoreLastFocusState();\n }\n\n /**\n * Event handler for back button\n * emit an event to close the search panel\n */\n onBackClick() {\n this.closePanel();\n if (mediaQuery.is('medium down')) {\n this.appliedFiltersQty = 0;\n // reset refinements panel to initial state\n this.updateRefinements(this.appliedRefinementUrl || window.location.href);\n }\n }\n\n /**\n * Event handler for Apply button click\n */\n onApplyClick() {\n this.closePanel();\n this.updateResults();\n }\n\n /**\n * Close refinements panel\n */\n closePanel() {\n Event.emit(this.options.events.toggle);\n if (this.options.isSlidingPanel) {\n Event.emit('slidingPanel.close');\n }\n }\n\n /**\n * Close refinements panel\n */\n close() {\n this.onBackClick();\n }\n\n /**\n * Event handler for Reset button\n * clear refinements\n */\n onResetClick() {\n if (this.appliedFiltersQty === 0 || this.currentRefinementUrl === this.resetRefinementsUrl) {\n return;\n }\n\n this.currentRefinementUrl = this.resetRefinementsUrl;\n this.appliedRefinementUrl = this.currentRefinementUrl;\n\n if (mediaQuery.is('medium down') && this.options.retainPanelOnReset) {\n this.addLoader(this.element, { overlay: true });\n }\n\n this.refine({\n url: this.resetRefinementsUrl,\n appliedFiltersQty: '',\n });\n\n if (!this.options.retainPanelOnReset) {\n this.closePanel();\n }\n }\n\n /**\n * Event handler for refinement selection\n *\n * @param {Event} e - refinement selection event\n */\n onRefinementSelected(e) {\n this.currentRefinementUrl = e.url;\n this.lastSelectedRefinement = e.refinementId;\n this.state.loading = true;\n if (mediaQuery.is('large')) {\n this.updateResults();\n } else {\n this.updateRefinements(this.currentRefinementUrl);\n }\n }\n\n /**\n * Emits partial search update to update refinements\n *\n * @param {String} url - url string to get new refinements data from\n */\n updateRefinements(url) {\n this.addLoader(this.element, { overlay: true });\n\n this.refine({\n url,\n appliedFiltersQty: this.appliedFiltersQty === 0 ? '' : this.appliedFiltersQty,\n urlParams: this.options.urlParams || {},\n refinementId: this.lastSelectedRefinement,\n refinements: true,\n dontUpdateURL: true,\n });\n }\n\n /**\n * Apply selected refinements\n */\n updateResults() {\n this.appliedRefinementUrl = this.currentRefinementUrl;\n this.refine({\n url: this.currentRefinementUrl,\n appliedFiltersQty: this.appliedFiltersQty === 0 ? '' : this.appliedFiltersQty,\n refinementId: this.lastSelectedRefinement,\n });\n }\n\n /**\n * Send an event with data to refine products\n *\n * @param {Object} filterOptions Object with filter options\n */\n refine(filterOptions) {\n Event.emit(this.options.events.apply, Object.assign({}, filterOptions));\n }\n\n /**\n * Callback on result updated from ajax request.\n * If callback is due to a insertion, there is no refinement to be changed.\n * @param {Object} data Data due to refinement to be changed\n * @param {Boolean} isInsertMode Flag due to a insertion\n */\n onRefinementsUpdated(data, isInsertMode) {\n if (data[this.options.dataModelId] && !isInsertMode) {\n this.saveLastFocusState();\n data[this.options.dataModelId].currentRefinementUrl = this.currentRefinementUrl;\n data[this.options.dataModelId].categoryname = data.categoryname;\n data[this.options.dataModelId].refinebycategory = data.refinebycategory;\n data[this.options.dataModelId].componentOptions = data[this.options.dataModelId].componentOptions || {};\n data[this.options.dataModelId].componentOptions.appliedRefinementUrl = this.appliedRefinementUrl;\n this.removeLoader(this.element);\n this.render(data[this.options.dataModelId]);\n }\n }\n\n /**\n * Tab key event\n *\n * @param {Object} event Event object\n */\n onTabKey(event) {\n if (mediaQuery.is('medium down')) {\n super.focusTrap(this.element, event);\n }\n }\n\n /**\n * Keydown event handler\n *\n * @param {Object} event Event object\n */\n onKeyboardControl(event) {\n switch (event.key) {\n case 'Tab': // 'Tab' key\n this.onTabKey(event);\n break;\n case 'Escape': // 'Escape' key\n this.close();\n break;\n default:\n break;\n }\n }\n\n /**\n * Event handler for remove loader\n */\n onSearchRemoveLoader() {\n this.removeLoader(this.element);\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n super.destroy();\n\n off('click', this.selectors.backButton);\n off('click', this.selectors.resetButton);\n off('click', this.selectors.applyButton);\n off('keydown', this.element);\n Event.removeListener(this.options.events.select, this.onRefinementSelected, this);\n Event.removeListener(this.options.events.updated, this.onRefinementsUpdated, this);\n Event.removeListener(this.options.events.removeLoader, this.onSearchRemoveLoader, this);\n }\n}\n"],"mappings":"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","ignoreList":[]}