{"version":3,"sources":["webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/search/HarmonyProductListingMgr.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/search/HarmonyRefinement.js","webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/search/HarmonyRefinementsPanel.js"],"names":["ProductListingMgr","HarmonyProductListingMgr","prefs","hideVisually","isScrollOnload","init","eventBus","on","applyFilters","url","ref","handleHistory","alertMessage","accessibilityAlerts","filtersapplied","updateByUrl","then","accessibilityAlert","sendApplyFilterEvent","loadMoreContent","button","href","attr","remove","loadChunk","response","append","articlesgridupdated","emit","loadMore","loadingText","data","history","showUrl","showAjaxUrl","setText","addClass","productlistupdated","$","length","each","parent","find","hide","busy","promise","getContentByUrl","updateArea","empty","dialogMgr","closeDialog","render","undefined","scrollWindowTo","get","executeInlineScripts","has","handleNoResult","catch","finally","unbusy","updateView","urlParams","getUrlParams","productListingMgrSelector","hasOwnProperty","refinementSelector","querySelector","cgid","type","dataset","categoryName","updateGrid","select","selectedSorting","getSelectedOptions","getText","trim","successCb","console","error","appendParamToURL","focus","Refinement","HarmonyRefinement","classesChecked","changePrice","target","config","attrId","min","valueFrom","max","valueTo","selected","items","forEach","item","removeClass","toggleCheck","uncheck","check","onRefresh","AccessibilityFocusTrapMixin","HarmonyRefinementsPanel","classBackdropActive","classPanelOpened","refTrapsContainer","changeCategory","applyRefinements","refineUrl","onRefinementToggled","refinements","JSON","parse","sessionStorage","getItem","e","setItem","stringify","index","indexOf","name","splice","push","removeItem","Set","onChangeRefinement","lastChangedRefinement","collectRefinementUrl","openPanel","disableScroll","exposeOutSideClick","clickOutside","closePanel","bind","getRefinementsModel","model","show","currentRefinementUrl","enableScroll","expose","refinementUrl","getSelectedRefinements","keys","Object","count","refinebarUrl","key","refinement","prices","values","split","concat","clearFilters","uncheckRefinements","updatePanel","updateRefinementModel","getJSONByUrl","refinementsModel","setRefinementsModel","setTargetElementPosition","syncExpandedRefinements","restoreScrollPosition","ajaxUrl","changedRefinementTop","getBoundingClientRect","top","element","getAllRefinements","some","attrValue","scrollTop","offsetTop","refinementModel","expandedRefinements","cachedRefinements","isExpanded","refinementId","refinementValue","join","getConstructor","AccordionItemPanel","getById","accordion","map","child","isAttributeRefinement","afterShowModal","timeout","focusTimeout","body","document","window","scrollY","classList","contains","classesGlobalDialog","add","style","documentElement","removeProperty","removeAttribute","scrollTo","behavior"],"mappings":"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","file":"harmony.search.widgets.bundle.js","sourcesContent":["import { dialogMgr } from 'widgets/toolbox/dialogMgr';\nimport { scrollWindowTo } from 'widgets/toolbox/scroll';\nimport { getContentByUrl } from 'widgets/toolbox/ajax';\nimport { getUrlParams } from 'widgets/toolbox/util';\nimport { appendParamToURL } from 'widgets/toolbox/util';\nimport { executeInlineScripts } from 'harmony/toolbox/domUtils';\n\n/**\n * @description Extended HarmonyProductListingMgr implementation\n * @param {ProductListingMgr} ProductListingMgr Base widget for extending\n * @returns {typeof HarmonyProductListingMgr} PLP Manager\n */\nexport default function (ProductListingMgr) {\n class HarmonyProductListingMgr extends ProductListingMgr {\n prefs() {\n return {\n ...super.prefs(),\n hideVisually: 'h-hide_visually',\n isScrollOnload: false\n };\n }\n\n init() {\n super.init();\n this.eventBus().on('refinement.update.plp', 'applyFilters');\n }\n\n applyFilters(url, ref, handleHistory) {\n const alertMessage = this.prefs().accessibilityAlerts.filtersapplied;\n\n this.updateByUrl(url, ref, handleHistory)\n .then(() => this.accessibilityAlert(alertMessage));\n\n this.sendApplyFilterEvent(url);\n }\n\n /**\n * @description Load more content\n * @param {refElement} button Target element\n * @returns {void}\n */\n loadMoreContent(button) {\n const href = button.attr('href');\n let url = '';\n\n if (typeof href === 'string') {\n url = href;\n }\n\n this.ref('loadMoreContentBlock').remove();\n this.ref('contentProgressIndicator').remove();\n this.loadChunk(url, response => {\n if (typeof response === 'string') {\n this.ref('contentGrid').append(response);\n const accessibilityAlert = this.prefs().accessibilityAlerts.articlesgridupdated;\n this.eventBus().emit('alert.show', {\n accessibilityAlert\n });\n }\n }, false);\n }\n\n /**\n * @description Load more products\n * @param {refElement} button Target element\n * @returns {void}\n */\n loadMore(button) {\n const href = button.attr('href');\n const loadingText = button.data('text-loading');\n const history = {\n showUrl: button.data('show-url'),\n showAjaxUrl: button.data('show-ajax-url')\n };\n let url = '';\n\n if (typeof href === 'string') {\n url = href;\n }\n\n button.setText(loadingText);\n this.ref('loadMoreBlock').addClass(this.prefs().hideVisually);\n this.ref('productProgressIndicator').addClass(this.prefs().hideVisually);\n\n this.loadChunk(url, response => {\n if (typeof response === 'string') {\n this.ref('loadMoreBlock').remove();\n this.ref('productProgressIndicator').remove();\n this.ref('productGrid').append(response);\n const accessibilityAlert = this.prefs().accessibilityAlerts.productlistupdated;\n if ($('.member-only-product').length > 0) {\n $('.member-only-product').each(function () {\n $(this).parent().find('.b-product_tile-quantity').hide()\n $(this).parent().find('.b-product_tile-cta:not(.member-only-product)').hide()\n })\n }\n this.eventBus().emit('alert.show', {\n accessibilityAlert\n });\n }\n }, true, history);\n }\n\n /**\n * @param {string} url Update URL\n * @param {refElement} [ref] Reference element\n * @param {boolean} handleHistory Handle history flag\n * @returns {Promise}\n */\n updateByUrl(url, ref, handleHistory) {\n this.busy();\n\n const promise = getContentByUrl(url)\n .then(response => {\n if (typeof response === 'string') {\n const updateArea = ref || this.ref('self');\n this.ref('productGrid').empty();\n dialogMgr.closeDialog();\n this.render(undefined, undefined, updateArea, response)\n .then(() => {\n this.eventBus().emit('plp.updated');\n\n if (handleHistory) {\n this.handleHistory();\n scrollWindowTo(this.ref('grid').get(), true);\n }\n\n executeInlineScripts(updateArea.get());\n\n this.has('noResults', () => {\n this.handleNoResult();\n });\n });\n }\n }).catch(()=> {\n this.handleNoResult();\n })\n .finally(() => {\n this.unbusy();\n });\n\n this.eventBus().emit('loader.start', promise);\n\n return promise;\n }\n\n /**\n * @description Sends GTM event and updateView\n * @param {any} button Target element\n * @returns {void}\n */\n updateView(button) {\n this.sendApplyFilterEvent(button.data('href'));\n super.updateView(button);\n }\n\n sendApplyFilterEvent(url) {\n /**\n * @description url params object\n * @type {any}\n */\n const urlParams = getUrlParams(url);\n const productListingMgrSelector = this.ref('self').get();\n\n /* eslint-disable no-prototype-builtins */\n if (urlParams.hasOwnProperty('cgid')) {\n const refinementSelector = productListingMgrSelector.querySelector('[data-category-id=\"' + urlParams.cgid + '\"]');\n urlParams.type = refinementSelector ? refinementSelector.dataset.categoryName : urlParams.cgid;\n }\n\n this.eventBus().emit('gtm.list.filter', urlParams);\n this.eventBus().emit('monetate.filter.apply', url);\n }\n\n /**\n * @description Update Grid\n * @param {InstanceType<InputSelect>} select Target element\n * @returns {void}\n */\n updateGrid(select) {\n super.updateGrid(select);\n const selectedSorting = select.getSelectedOptions();\n if (selectedSorting) {\n this.eventBus().emit('gtm.list.sort', selectedSorting.getText().trim());\n this.eventBus().emit('monetate.sort.apply', selectedSorting.data('url'));\n }\n }\n\n /**\n * @description Loads chunk of data and executes callback. Data might be either products or content\n * @param {string} url load chunk url\n * @param {(arg: Response) => void} successCb success callback to be called after chunk was loaded with response as an argument\n * @param {boolean} handleHistory do we need to handle history change after chunk loaded\n * @param {object} [history] history object\n */\n loadChunk(url, successCb, handleHistory, history) {\n if (!url) {\n console.error('Something is wrong with target URL');\n } else {\n this.busy();\n const promise = getContentByUrl(\n appendParamToURL(url, 'selectedUrl', url)\n ).then(response => {\n successCb(response);\n\n if (handleHistory) {\n this.handleHistory(true, history);\n }\n\n this.eventBus().emit('monetate.loadmore', url);\n }).finally(() => {\n this.unbusy();\n });\n\n this.eventBus().emit('loader.start', promise);\n }\n }\n\n handleNoResult() {\n this.has('firstRefinement', ref => {\n ref.focus();\n });\n }\n }\n\n return HarmonyProductListingMgr;\n}\n","/**\n * @typedef {ReturnType <typeof import('widgets/global/Refinement').default>} Refinement\n * @typedef {ReturnType <typeof import('widgets/global/Button').default>} Button\n */\n\n/**\n * @param {Refinement} Refinement Refinement\n * @returns {typeof HarmonyRefinement} HarmonyRefinement\n */\nexport default function (Refinement) {\n /**\n * @class HarmonyRefinement\n * @augments Refinement\n */\n class HarmonyRefinement extends Refinement {\n prefs() {\n return {\n ...super.prefs(),\n classesChecked: 'm-checked'\n };\n }\n\n /**\n * @description change price refinement value to have radio button behaviour.\n * @param {Button} target\n */\n changePrice(target) {\n // update widget state from target\n // target -- it is specific price range button\n this.config = target.config;\n this.attrId = target.config.attrId;\n this.min = target.config.valueFrom;\n this.max = target.config.valueTo;\n this.selected = true;\n\n // unselect all radios\n this.items.forEach(item => {\n item.ref('self').removeClass(this.prefs().classesChecked).attr('aria-checked', 'false');\n });\n\n // select only target radio\n target.ref('self').addClass(this.prefs().classesChecked).attr('aria-checked', 'true');\n\n this.eventBus().emit('refinement.state.changed', this);\n }\n\n /**\n * @description Toggle check status\n * @returns {void}\n */\n toggleCheck() {\n if (this.selected) {\n this.uncheck();\n } else {\n this.check();\n }\n\n this.eventBus().emit('refinement.state.changed', this);\n }\n\n onRefresh() {\n super.onRefresh();\n this.init();\n }\n }\n\n return HarmonyRefinement;\n}\n","import { getJSONByUrl } from 'widgets/toolbox/ajax';\nimport { appendParamToURL, clickOutside, timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType <typeof import('widgets/global/AccessibilityFocusTrapMixin').default>} AccessibilityFocusTrapMixin\n * @typedef {ReturnType <typeof import('widgets/global/Refinement').default>} Refinement\n */\n\n/**\n * @param {AccessibilityFocusTrapMixin} AccessibilityFocusTrapMixin base widget for extending\n * @returns {HarmonyRefinementsPanel} HarmonyRefinementsPanel\n */\nexport default function (AccessibilityFocusTrapMixin) {\n /**\n * @class HarmonyRefinementsPanel\n * @augments ListAccessibility\n */\n class HarmonyRefinementsPanel extends AccessibilityFocusTrapMixin {\n init() {\n // Initialize ListAccessibility instance.\n super.init();\n\n // Listen emits from refinement toggler widget\n this.eventBus().on('refinement.panel.open', 'openPanel');\n\n // Listen emits from refinement when it was changed\n this.eventBus().on('refinement.state.changed', 'onChangeRefinement');\n\n // Listen emits from accordion item for keep expanded refinements opened\n this.eventBus().on('accordion.item.toggled', 'onRefinementToggled');\n\n // Listen emits from HarmonyProductListingMgr for keep PLP updated event and enable scroll\n this.eventBus().on('plp.updated', 'enableScroll');\n }\n\n prefs() {\n return {\n ...super.prefs(),\n\n // Used to show/hide overlay.\n classBackdropActive: 'm-active',\n\n // Used to show/hide panel.\n classPanelOpened: 'm-opened',\n\n refTrapsContainer: 'refinementsContainer'\n };\n }\n\n /**\n * @description update panel within selected category\n * @param {object} target clicked specific category\n * @returns {void}\n */\n changeCategory(target) {\n this.applyRefinements(target.config.refineUrl, false, true, false);\n }\n\n /**\n * @param target\n * @description store clicked refinement state for keep expanded refinements opened\n */\n onRefinementToggled(target) {\n let refinements = [];\n\n try {\n refinements = JSON.parse(sessionStorage.getItem('expandedRefinements') || '');\n } catch (e) {\n sessionStorage.setItem('expandedRefinements', JSON.stringify([]));\n }\n\n const index = refinements.indexOf(target.config.name);\n\n // remove duplicates\n // eslint-disable-next-line no-bitwise\n if (~index) {\n refinements.splice(index, 1);\n } else {\n refinements.push(target.config.name);\n }\n\n sessionStorage.removeItem('expandedRefinements');\n sessionStorage.setItem('expandedRefinements', JSON.stringify([...new Set(refinements)]));\n }\n\n /**\n * @param target\n * @description executes when refinement was changed\n * @returns {void}\n */\n onChangeRefinement(target) {\n this.lastChangedRefinement = target;\n this.applyRefinements(this.collectRefinementUrl(), false, true, false);\n }\n\n /**\n * @description make panel visible on storefront.\n * @returns {void}\n */\n openPanel() {\n this.disableScroll();\n\n // Clean opened refinements\n sessionStorage.removeItem('expandedRefinements');\n sessionStorage.setItem('expandedRefinements', JSON.stringify([]));\n\n this.exposeOutSideClick = clickOutside(this.ref('refinementsContainer'), this.closePanel.bind(this));\n\n this.getRefinementsModel();\n this.render('template', this.model, this.ref('refinementsContainer'))\n .then(() => {\n this.show();\n\n // Save current refinement selection URL\n this.currentRefinementUrl = this.collectRefinementUrl();\n });\n }\n\n /**\n * @description make panel invisible on storefront.\n * @returns {boolean}\n */\n closePanel() {\n this.enableScroll();\n sessionStorage.removeItem('expandedRefinements');\n\n this.hide();\n this.expose();\n\n this.eventBus().emit('refinement.panel.close');\n }\n\n /**\n * @description apply selected filters, trigger PLP update view, close the panel.\n * @returns {void}\n */\n applyFilters() {\n const refinementUrl = this.collectRefinementUrl();\n\n // Check if refinement selection was changed\n if (refinementUrl !== this.currentRefinementUrl) {\n this.currentRefinementUrl = refinementUrl;\n this.applyRefinements(refinementUrl);\n this.expose();\n } else {\n this.closePanel();\n }\n }\n\n /**\n * @description collect refinebar update url with selected refinements.\n * @returns {string} url\n */\n collectRefinementUrl() {\n const refinements = this.getSelectedRefinements();\n const keys = Object.keys(refinements);\n\n let count = 1;\n let url = this.ref('refinementsContainer').get(0).dataset.refinebarUrl;\n\n keys.forEach(key => {\n const refinement = refinements[key];\n\n if (key === 'price') {\n const prices = refinement.values.split('|');\n url = appendParamToURL(url, 'pmin', prices[0]);\n url = appendParamToURL(url, 'pmax', prices[1]);\n return;\n }\n\n url = appendParamToURL(url, 'prefn'.concat(count), key);\n url = appendParamToURL(url, 'prefv'.concat(count), refinement.values);\n\n count++;\n });\n\n return url;\n }\n\n /**\n * @description clear filter refinements and hide panel.\n */\n clearFilters() {\n this.uncheckRefinements();\n this.applyFilters();\n this.expose();\n }\n\n /**\n * @description get refinements info according to the selected refinement values\n * @param {string} url\n * @param {boolean} updateGrid is update product grid\n * @param {boolean} updatePanel is update panel view\n * @param {boolean} updateRefinementModel is update refinement model\n * @returns {void}\n */\n applyRefinements(url, updateGrid = true, updatePanel = false, updateRefinementModel = true) {\n this.ref('self').attr('aria-busy', 'true');\n\n const promise = getJSONByUrl(url).then(refinementsModel => {\n if (Object.keys(refinementsModel).length && refinementsModel.count) {\n this.ref('self').attr('aria-busy', 'false');\n\n if (updateRefinementModel) {\n this.setRefinementsModel(refinementsModel);\n }\n\n if (updatePanel) {\n this.setTargetElementPosition();\n this.render(\n 'template',\n this.syncExpandedRefinements(refinementsModel),\n this.ref('refinementsContainer')\n ).then(() => {\n this.ref('refinementsContainer').addClass(this.prefs().classPanelOpened);\n }).finally(() => {\n this.restoreScrollPosition();\n });\n }\n\n if (updateGrid) {\n this.closePanel();\n this.eventBus().emit('refinement.update.plp', refinementsModel.ajaxUrl, undefined, true);\n }\n } else {\n this.emit('noresult');\n }\n });\n\n this.eventBus().emit('loader.start', promise);\n }\n\n setTargetElementPosition() {\n this.changedRefinementTop = this.lastChangedRefinement.ref('self').get().getBoundingClientRect().top;\n }\n\n restoreScrollPosition() {\n let element = this.lastChangedRefinement;\n\n // Find refinement which has been last changed.\n this.getAllRefinements().some((refinement) => {\n if (\n refinement.config.attrId === element.config.attrId\n && refinement.config.attrValue === element.config.attrValue\n ) {\n element = refinement;\n return true;\n }\n return false;\n });\n\n // el.offsetTop -- current element offset position\n // this.changedRefinementTop -- stored previous element window position\n this.ref('refinementsContent').get().scrollTop = element.ref('self').get().offsetTop - this.changedRefinementTop;\n }\n\n /**\n * @description update refinement model in script tag\n * @param {object} refinementModel\n * @returns {void}\n */\n setRefinementsModel(refinementModel) {\n this.ref('refinementsModel').setText(JSON.stringify(refinementModel));\n }\n\n /**\n * @param model\n * @description get expanded refinement from the storage and update the backend model\n * according to the specified data.\n * @returns {object} model : refinement model\n */\n syncExpandedRefinements(model) {\n const expandedRefinements = JSON.parse(sessionStorage.getItem('expandedRefinements'));\n\n if (expandedRefinements.length <= 0) {\n return model;\n }\n\n model?.cachedRefinements?.forEach(refinement => {\n if (refinement.isExpanded) { return; }\n\n // eslint-disable-next-line no-bitwise\n if (~expandedRefinements.indexOf(refinement.refinementId)) {\n refinement.isExpanded = true;\n }\n });\n\n return model;\n }\n\n /**\n * @description get refinement model from html to the component instance.\n * @param {object} refinementsModel\n * @returns {void}\n */\n getRefinementsModel() {\n var model = this.ref('refinementsModel').getText().trim() || '';\n try {\n model = JSON.parse(`\"${model}\"`);\n this.model = JSON.parse(model);\n } catch (e) {\n this.model = {};\n }\n }\n\n /**\n * @description get selected refinements and it's values\n *\n * refinements = {\n * color: {\n * values: 'black'\n * },\n * size: {\n * values: 'XL|X'\n * },\n * price: {\n * values: '0|100'\n * }\n * }\n *\n * @returns {object} object with selected refinements and it values.\n */\n getSelectedRefinements() {\n const refinements = {};\n\n this.getAllRefinements().forEach(/** @type {Refinement} */(refinement) => {\n if (refinement.selected) {\n const type = refinement.config.attrId;\n const refinementValue = refinement.config.attrValue + '';\n\n // Initialize with empty object if\n // refinement at first in object\n if (!refinements[type]) {\n refinements[type] = {\n values: ''\n };\n }\n\n if (type === 'price') {\n refinements[type].values = [refinement.min, refinement.max].join('|');\n } else {\n refinements[type].values = refinements[type].values.length\n ? refinements[type].values.concat('|').concat(refinementValue)\n : refinementValue;\n }\n }\n });\n\n return refinements;\n }\n\n /**\n * @description go through component items and fetch all refinements.\n * @returns {Array<refinement>} Array of refinement widgets\n */\n getAllRefinements() {\n const Refinement = /** @type {Refinement} */ (this.getConstructor('refinement'));\n const AccordionItemPanel = /** @type {AccordionItemPanel} */ (this.getConstructor('accordionItemPanel'));\n const refinements = [];\n\n // As widget see only his children we need to get refinements this way.\n // Current widget -> Accordion widget -> Accordion item widget -> Refinements widgets\n this.getById('accordion', accordion => {\n accordion.items?.map((item) => {\n if (item instanceof AccordionItemPanel) {\n item.items?.map((child) => {\n if (child instanceof Refinement && child.isAttributeRefinement()) {\n refinements.push(child);\n }\n });\n }\n });\n });\n\n return refinements;\n }\n\n /**\n * @description uncheck all component refinements refinements.\n * @returns {void}\n */\n uncheckRefinements() {\n this.getAllRefinements().forEach((refinement) => {\n refinement.uncheck();\n });\n }\n\n /**\n * @description show current component view.\n * @returns {void}\n */\n show() {\n super.show();\n\n this.ref('self').addClass(this.prefs().classBackdropActive);\n this.ref('refinementsContainer').addClass(this.prefs().classPanelOpened);\n\n this.afterShowModal();\n }\n\n /**\n * @description hide current component view.\n * @returns {void}\n */\n hide() {\n this.ref('self').removeClass(this.prefs().classBackdropActive);\n this.ref('refinementsContainer').removeClass(this.prefs().classPanelOpened);\n }\n\n /**\n * @description removes document event listener for overlay our side clicks.\n * @returns {void}\n */\n expose() {\n if (typeof this.exposeOutSideClick === 'function') {\n this.exposeOutSideClick();\n }\n timeout(() => this.ref('refinementsContainer').empty(), this.prefs().focusTimeout);\n }\n\n disableScroll() {\n this.body = document.body;\n this.scrollTop = window.scrollY;\n\n if (!this.body.classList.contains(this.prefs().classesGlobalDialog)) {\n this.body.classList.add(this.prefs().classesGlobalDialog);\n }\n\n this.body.dataset.scrollTop = this.scrollTop;\n this.body.style.top = `-${this.scrollTop}px`;\n document.documentElement.scrollTop = 0;\n }\n\n enableScroll() {\n if (this.body) {\n this.body.classList.remove(this.prefs().classesGlobalDialog);\n this.body.style.removeProperty('top');\n this.body.removeAttribute('data-scroll-top');\n window.scrollTo({\n top: this.scrollTop,\n behavior: 'instant'\n });\n this.scrollTop = 0;\n }\n }\n }\n\n return HarmonyRefinementsPanel;\n}\n"],"sourceRoot":""}