{"version":3,"file":"./modules/FilterAction.xxxxxxxx.js","mappings":"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","sources":["webpack:///./store/modules/Filter/actions.ts","webpack:///./modules/FilterAction.ts","webpack:///./modules/FilterUtils.ts"],"sourcesContent":["import { \r\n FILTER_STATE,\r\n FilterStateTypes\r\n} from './types';\r\n\r\nexport const filterState = (filter: FilterParams): FilterStateTypes => ({ type: FILTER_STATE, filter });\r\n","import { getOptions, loadParamsFromURL } from '../helpers/helperFunctions';\r\nimport { getSibling, createElementFromString, toggleClass, getClosest, addSpinnerToTeaserGrid, removeSpinnerFromTeaserGrid } from '../helpers/DOMHelpers';\r\nimport store from '../store';\r\nimport { filterState } from '../store/actions';\r\nimport { encodeParams, onFilterTeaserGridChange } from './FilterUtils';\r\n\r\nexport default class FilterAction {\r\n private filterTag: HTMLElement;\r\n private tagsMap: TagMap;\r\n private filters: FilterItem[];\r\n private applyBtn: HTMLButtonElement;\r\n private applyBtnCounter: HTMLElement;\r\n\r\n constructor(public element: HTMLElement, private options: FilterActionOptions = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.filterTag = this.element.querySelector(this.options.filterTagSelector)\r\n this.applyBtn = this.element.querySelector(this.options.applyBtnSelector);\r\n this.applyBtnCounter = this.applyBtn.firstElementChild;\r\n\r\n this.tagsMap = {\r\n tagsStr: window.atob(this.filterTag.getAttribute(this.options.tagsMapAttrs.tagsStrAttr)),\r\n tagCount: parseInt(this.filterTag.getAttribute(this.options.tagsMapAttrs.tagCountAttr)),\r\n productsCount: parseInt(this.filterTag.getAttribute(this.options.tagsMapAttrs.productsCountAttr))\r\n };\r\n\r\n this.initURLNavigation()\r\n .init();\r\n }\r\n\r\n private init(): FilterAction {\r\n this.recoverState()\r\n return this;\r\n }\r\n\r\n private initURLNavigation() {\r\n window.addEventListener(\"popstate\", () => {\r\n this.getUrlParameters()\r\n .resetState()\r\n .update();\r\n });\r\n\r\n this.getUrlParameters();\r\n\r\n return this;\r\n }\r\n\r\n private getUrlParameters() {\r\n this.options.state = loadParamsFromURL();\r\n return this;\r\n }\r\n\r\n private getFilters(): FilterItem[] {\r\n const filters = [];\r\n const hierarchicalFilterNodes = Array.from(document.querySelectorAll(this.options.hierarchicalFilterSelector));\r\n\r\n hierarchicalFilterNodes.forEach((filterNode: HTMLElement) => {\r\n const values = [];\r\n const valueNodes = Array.from(filterNode.querySelectorAll(this.options.hierarchicalFilterValueSelector));\r\n\r\n valueNodes.forEach((valueNode: HTMLInputElement) => {\r\n const key = valueNode.dataset.key;\r\n if (!key)\r\n return;\r\n values.push({\r\n node: valueNode,\r\n key: key,\r\n checked: valueNode.classList.contains(this.options.hierarchicalFilterValueActiveClass),\r\n hierarchical: true,\r\n index: parseInt(valueNode.dataset.index),\r\n parentsIndex: valueNode.dataset.parents,\r\n });\r\n });\r\n\r\n const filter = {\r\n node: filterNode,\r\n key: filterNode.dataset.key,\r\n values: values,\r\n isAnd: false,\r\n hierarchical: true,\r\n cache: []\r\n };\r\n\r\n filters.push(filter);\r\n });\r\n\r\n const filterNodes = Array.from(this.element.querySelectorAll(this.options.filterItemSelector));\r\n\r\n filterNodes.forEach((filterNode: HTMLElement) => {\r\n const filterKey = filterNode.dataset.key,\r\n isAnd = filterNode.dataset.isAnd === 'True',\r\n valueNodes = Array.from(filterNode.querySelectorAll(this.options.checkboxSelector)),\r\n values = [];\r\n\r\n valueNodes.forEach((valueNode: HTMLInputElement) => {\r\n values.push({\r\n node: valueNode,\r\n key: valueNode.name,\r\n checked: valueNode.checked,\r\n hierarchical: false,\r\n index: parseInt(valueNode.dataset.index)\r\n });\r\n });\r\n\r\n const filter = {\r\n node: filterNode,\r\n key: filterKey,\r\n values: values,\r\n isAnd: isAnd,\r\n hierarchical: false,\r\n cache: [],\r\n };\r\n\r\n filters.push(filter);\r\n });\r\n\r\n return filters;\r\n }\r\n\r\n private isProductTagged(productIdx: number, tagIdx: number): boolean {\r\n const i = productIdx * this.tagsMap.tagCount + tagIdx;\r\n const isTagged = (this.tagsMap.tagsStr.charCodeAt(Math.floor(i / 8)) & (1 << (i % 8))) !== 0;\r\n \r\n return isTagged;\r\n }\r\n\r\n private isProductIncludedInFilter(p, filter): boolean {\r\n let values = filter.values,\r\n isAndFilter = filter.isAnd,\r\n anyValueChecked = false;\r\n\r\n for (let v = 0; v < values.length; v++) {\r\n const value = values[v];\r\n\r\n if (value.checked) {\r\n anyValueChecked = true;\r\n if (this.isProductTagged(p, value.index)) {\r\n if (!isAndFilter)\r\n return true;\r\n } else {\r\n if (isAndFilter)\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (isAndFilter)\r\n return true;\r\n if (!anyValueChecked)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n private isProductVisible(p): boolean {\r\n for (let f = 0; f < this.filters.length; f++) {\r\n const filter = this.filters[f],\r\n cacheEntry = filter.cache[p];\r\n\r\n if (cacheEntry === true)\r\n continue;\r\n\r\n if (cacheEntry === false)\r\n return false;\r\n\r\n var isIncluded = this.isProductIncludedInFilter(p, filter);\r\n filter.cache[p] = isIncluded;\r\n\r\n if (!isIncluded) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n private countResults(): number {\r\n let count = 0;\r\n\r\n for (var p = 0; p < this.tagsMap.productsCount; p++) {\r\n if (this.isProductVisible(p))\r\n count++;\r\n }\r\n\r\n return count;\r\n }\r\n\r\n private countSimulateChecked(f, v, checkedValue): number {\r\n const filter = this.filters[f];\r\n const oldCache = filter.cache;\r\n filter.cache = [];\r\n const value = filter.values[v];\r\n const oldChecked = value.checked;\r\n value.checked = checkedValue;\r\n const count = this.countResults();\r\n value.checked = oldChecked;\r\n filter.cache = oldCache;\r\n\r\n return count;\r\n }\r\n\r\n private countHierarchicalSimulateOnlyThisChecked(f, v): number {\r\n const oldFilters = this.filters;\r\n this.filters = [];\r\n for (var i = 0; i < oldFilters.length; i++) {\r\n var filter = oldFilters[i];\r\n if (filter.hierarchical) {\r\n this.filters.push(filter);\r\n }\r\n }\r\n const count = this.countSimulateOnlyThisChecked(f, v);\r\n this.filters = oldFilters;\r\n return count;\r\n }\r\n\r\n private countSimulateOnlyThisChecked(f, v): number {\r\n const oldFilter = this.filters[f];\r\n\r\n this.filters[f] = {\r\n cache: [],\r\n values: [\r\n {\r\n index: oldFilter.values[v].index,\r\n checked: true\r\n }\r\n ]\r\n };\r\n\r\n const count = this.countResults();\r\n this.filters[f] = oldFilter;\r\n\r\n return count;\r\n }\r\n\r\n private checkHierarchicalParendIdx(value) {\r\n let parentsIdx = value.parentsIndex;\r\n let parentsIdxArray = value.parentsIndex.split(\", \");\r\n\r\n return (!parentsIdx || parentsIdxArray.includes(this.options.hierarchicalParentIndex) || this.options.hierarchicalParentIndex === false) ? true : false;\r\n }\r\n\r\n private setHierarchicalParendIdx() {\r\n const mainNavList = Array.from(document.querySelectorAll(`${this.options.hierarchicalFilterValueSelector}.${this.options.hierarchicalFilterValueActiveClass}`));\r\n\r\n if (mainNavList.length != 0) {\r\n const parentItem = mainNavList[mainNavList.length - 1];\r\n this.options.hierarchicalParentIndex = parentItem.getAttribute('data-index');\r\n } else {\r\n this.options.hierarchicalParentIndex = false;\r\n }\r\n }\r\n\r\n private setVisibility(value, isVisible) {\r\n value.node.hidden = !isVisible;\r\n }\r\n\r\n private setCount(value: FilterValue, count: string, isDisabled: boolean): FilterAction {\r\n let countNode;\r\n let parent;\r\n\r\n if (value.hierarchical) {\r\n countNode = value.node.querySelector('.nx-filter-navigation__count');\r\n\r\n } else {\r\n countNode = getSibling(value.node, this.options.countNodeSelector) || value.node.nextSibling.nextSibling;\r\n\r\n parent = getClosest(value.node, \".nx-cat-item\");\r\n value.node.disabled = isDisabled;\r\n parent.hidden = isDisabled;\r\n }\r\n if (!countNode) return;\r\n\r\n countNode.innerText = count;\r\n return;\r\n }\r\n\r\n private anyValueChecked(filter): boolean {\r\n const values = filter.values;\r\n\r\n for (let v = 0; v < values.length; v++) {\r\n if (values[v].checked)\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private setGlobalCount(count): FilterAction {\r\n this.applyBtnCounter.innerText = `(${count})`;\r\n this.applyBtn.disabled = count === 0;\r\n\r\n return this;\r\n }\r\n\r\n private getReloadUrl(gridNode): string {\r\n const paramsStr = encodeParams(this.saveCurrentState().getState()),\r\n ajaxUrl = gridNode.dataset.ajaxUrl + '&' + paramsStr;\r\n\r\n return ajaxUrl;\r\n }\r\n\r\n private getReloadUrlFromHistory(gridNode, history): string {\r\n const ajaxUrl = gridNode.dataset.ajaxUrl + '&' + history;\r\n\r\n return ajaxUrl;\r\n }\r\n\r\n private getFilterParams(gridNode): string {\r\n const paramsStr = encodeParams(this.saveCurrentState().getState());\r\n\r\n return paramsStr;\r\n }\r\n\r\n private getParams(): FilterParams {\r\n const filters = this.getFilters(),\r\n params = {},\r\n selector = document.getElementById('sort'),\r\n sortMethod = selector && selector.value;\r\n\r\n filters.forEach(filter => {\r\n const keys = [];\r\n\r\n filter.values.forEach(value => {\r\n if (value.checked) {\r\n keys.push(value.key);\r\n }\r\n });\r\n\r\n if (keys.length > 0) {\r\n params[filter.key] = keys;\r\n }\r\n });\r\n\r\n params['sort'] = [sortMethod];\r\n return params;\r\n }\r\n\r\n update(): FilterAction {\r\n this.setHierarchicalParendIdx();\r\n this.filters = this.getFilters();\r\n const currentCount = this.countResults();\r\n this.setGlobalCount(currentCount);\r\n\r\n this.filters.forEach((filter, fIdx) => {\r\n if (filter.hierarchical) {\r\n filter.values.forEach((value, vIdx) => {\r\n if (!value.checked) {\r\n this.countHierarchicalSimulateOnlyThisChecked(fIdx, vIdx);\r\n const count = this.countHierarchicalSimulateOnlyThisChecked(fIdx, vIdx);\r\n const hasHierarchicalParendIdx = this.checkHierarchicalParendIdx(value);\r\n this.setVisibility(value, (count !== 0 && hasHierarchicalParendIdx));\r\n }\r\n });\r\n }\r\n\r\n filter.values.forEach((value, vIdx) => {\r\n let countStr;\r\n if (!value.checked) {\r\n const count = this.countSimulateChecked(fIdx, vIdx, true);\r\n if (filter.isAnd || !this.anyValueChecked(filter)) {\r\n countStr = count.toString();\r\n } else {\r\n if (this.countSimulateOnlyThisChecked(fIdx, vIdx) === 0) {\r\n countStr = \"0\";\r\n } else {\r\n let difference = count - currentCount;\r\n if (difference === 0) {\r\n countStr = '-';\r\n } else {\r\n countStr = '+' + difference;\r\n }\r\n }\r\n }\r\n } else {\r\n countStr = \"\";\r\n }\r\n\r\n let isDisabled = countStr === \"0\";\r\n this.setCount(value, countStr, isDisabled);\r\n });\r\n\r\n let allValuesDisabled = Array.from(filter.values).every(({ node: { disabled } }) => disabled);\r\n toggleClass(filter.node, 'nx-filter-tag--disabled', allValuesDisabled);\r\n });\r\n\r\n this.setAllCount(currentCount);\r\n document.dispatchEvent(new CustomEvent('ScrollSlider:reset'));\r\n\r\n return this;\r\n }\r\n\r\n updateV2(): FilterAction {\r\n this.setHierarchicalParendIdx();\r\n this.filters = this.getFilters();\r\n const currentCount = this.countResults();\r\n this.setGlobalCount(currentCount);\r\n\r\n this.filters.forEach((filter, fIdx) => {\r\n if (filter.hierarchical) {\r\n filter.values.forEach((value, vIdx) => {\r\n if (!value.checked) {\r\n this.countHierarchicalSimulateOnlyThisChecked(fIdx, vIdx);\r\n // const count = this.countHierarchicalSimulateOnlyThisChecked(fIdx, vIdx);\r\n // const hasHierarchicalParendIdx = this.checkHierarchicalParendIdx(value);\r\n // this.setVisibility(value, (count !== 0 && hasHierarchicalParendIdx));\r\n }\r\n });\r\n }\r\n\r\n filter.values.forEach((value, vIdx) => {\r\n let countStr;\r\n if (!value.checked) {\r\n const count = this.countSimulateChecked(fIdx, vIdx, true);\r\n if (filter.isAnd || !this.anyValueChecked(filter)) {\r\n countStr = count.toString();\r\n } else {\r\n if (this.countSimulateOnlyThisChecked(fIdx, vIdx) === 0) {\r\n countStr = \"0\";\r\n } else {\r\n let difference = count - currentCount;\r\n if (difference === 0) {\r\n countStr = '-';\r\n } else {\r\n countStr = '+' + difference;\r\n }\r\n }\r\n }\r\n } else {\r\n countStr = \"\";\r\n }\r\n\r\n let isDisabled = countStr === \"0\";\r\n this.setCount(value, countStr, isDisabled);\r\n });\r\n\r\n let allValuesDisabled = Array.from(filter.values).every(({ node: { disabled } }) => disabled);\r\n toggleClass(filter.node, 'nx-filter-tag--disabled', allValuesDisabled);\r\n });\r\n\r\n this.setAllCount(currentCount);\r\n document.dispatchEvent(new CustomEvent('ScrollSlider:reset'));\r\n\r\n return this;\r\n }\r\n\r\n getActiveHierarchicalLevel() {\r\n let currentFilter;\r\n let currentId;\r\n let getActiveFilterNav = document.querySelectorAll('.nx-filter-navigation__item.nx-active');\r\n if (getActiveFilterNav.length > 0) {\r\n currentId = getActiveFilterNav[getActiveFilterNav.length - 1].getAttribute(\"data-id\");\r\n currentFilter = document.querySelector(`.nx-filter-navigation__level[id=\"${currentId}\"]`);\r\n } else {\r\n currentFilter = document.querySelector('.nx-filter-navigation__level');\r\n }\r\n\r\n return currentFilter;\r\n }\r\n\r\n reload(history = undefined): FilterAction {\r\n // Change or remove static selector\r\n const container = document.querySelector(this.options.gridNodeSelector),\r\n xhr = new XMLHttpRequest();\r\n\r\n addSpinnerToTeaserGrid(container);\r\n\r\n let ajaxUrl;\r\n let newUrl;\r\n\r\n if (history === undefined) {\r\n ajaxUrl = this.getReloadUrl(container);\r\n newUrl = this.updateUrl(container);\r\n \r\n window.history.pushState(newUrl, '', newUrl);\r\n } else {\r\n ajaxUrl = this.getReloadUrlFromHistory(container, history);\r\n }\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n const responseElement = createElementFromString(xhr.responseText),\r\n gridNode = responseElement.querySelector(this.options.gridNodeSelector) || responseElement;\r\n\r\n onFilterTeaserGridChange(container);\r\n\r\n container.innerHTML = gridNode.innerHTML;\r\n\r\n NiveaX.loadShopPrices();\r\n NiveaX.initModules();\r\n } else {\r\n console.error('The request failed!');\r\n }\r\n removeSpinnerFromTeaserGrid(container);\r\n };\r\n\r\n xhr.open('GET', ajaxUrl);\r\n xhr.send();\r\n\r\n store.dispatch(filterState(this.getState()));\r\n\r\n return this;\r\n }\r\n\r\n updateUrl(container) {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const searchParName = 'q';\r\n const searchPar = urlParams.get(searchParName);\r\n\r\n return `?${searchPar ? `${searchParName}=${searchPar}&` : ''}${this.getFilterParams(container)}`;\r\n }\r\n\r\n recoverState(): FilterAction {\r\n for (let filterCategory in this.options.state) {\r\n const inputs = Array.from(this.filterTag.querySelectorAll(`[data-key=\"${filterCategory}\"] input[type=\"checkbox\"]`)),\r\n aciveFilterNames = this.options.state[filterCategory];\r\n\r\n inputs.filter((inp: HTMLInputElement) => aciveFilterNames.includes(inp.name))\r\n .forEach((inp: HTMLInputElement) => inp.checked = true);\r\n }\r\n\r\n store.dispatch(filterState(this.getState()));\r\n\r\n return this;\r\n }\r\n\r\n resetState(): FilterAction {\r\n Array.from(>this.filterTag.querySelectorAll(this.options.checkboxSelector + ':checked')).forEach(value => value.checked = false);\r\n this.recoverState()\r\n return this;\r\n }\r\n\r\n getState(): FilterParams {\r\n return this.options.state;\r\n }\r\n\r\n saveCurrentState(): FilterAction {\r\n this.saveState(this.getParams());\r\n return this;\r\n }\r\n\r\n private saveState(state: FilterParams): FilterAction {\r\n this.options.state = state;\r\n return this;\r\n }\r\n\r\n private setAllCount(count: number) {\r\n let currentFilter = this.getActiveHierarchicalLevel();\r\n if (!currentFilter) return;\r\n\r\n const countElement = currentFilter.querySelector('.nx-filter-navigation__item--all .nx-filter-navigation__count');\r\n if (!countElement) return;\r\n \r\n countElement.innerText = count;\r\n }\r\n\r\n private getDefaultOptions(): FilterActionOptions {\r\n return {\r\n tagsMapAttrs: {\r\n tagsStrAttr: 'data-atob',\r\n tagCountAttr: 'data-tab-count',\r\n productsCountAttr: 'data-teaser-count'\r\n },\r\n hierarchicalFilterSelector: \".nx-filter-navigation__level\",\r\n hierarchicalFilterValueSelector: \".nx-filter-navigation__item\",\r\n hierarchicalFilterValueActiveClass: \"nx-active\",\r\n filterTagSelector: '.nx-tag-filter',\r\n filterBtnSelector: '.nx-filter-button',\r\n filterItemSelector: '.nx-tag-filter__item',\r\n checkboxSelector: '.nx-cat-item__tag-value',\r\n applyBtnSelector: '.nx-sort-filters__apply-btn',\r\n countNodeSelector: '.nx-cat-item__count',\r\n gridNodeSelector: '.nx-teaser-grid',\r\n state: {}\r\n };\r\n }\r\n}\r\n","export function encodeParams(params: FilterParams): string {\r\n return Object.entries(params).map(([key, value]) => `${encodeURIComponent(key)}=${value.map(v => encodeURIComponent(v)).join(',')}`).join('&');\r\n}\r\n\r\nexport function onFilterTeaserGridChange(container: HTMLElement): void {\r\n const observer = new MutationObserver(() => {\r\n observer.disconnect();\r\n document.dispatchEvent(new Event('NiveaXLoadMoreLoaded'));\r\n });\r\n\r\n observer.observe(container, { childList: true });\r\n}"],"names":["filterState","filter","type","FilterAction","constructor","element","options","this","Object","assign","getDefaultOptions","filterTag","querySelector","filterTagSelector","applyBtn","applyBtnSelector","applyBtnCounter","firstElementChild","tagsMap","tagsStr","window","atob","getAttribute","tagsMapAttrs","tagsStrAttr","tagCount","parseInt","tagCountAttr","productsCount","productsCountAttr","initURLNavigation","init","recoverState","addEventListener","getUrlParameters","resetState","update","state","getFilters","filters","Array","from","document","querySelectorAll","hierarchicalFilterSelector","forEach","filterNode","values","hierarchicalFilterValueSelector","valueNode","key","dataset","push","node","checked","classList","contains","hierarchicalFilterValueActiveClass","hierarchical","index","parentsIndex","parents","isAnd","cache","filterItemSelector","filterKey","valueNodes","checkboxSelector","name","isProductTagged","productIdx","tagIdx","i","charCodeAt","Math","floor","isProductIncludedInFilter","p","isAndFilter","anyValueChecked","v","length","value","isProductVisible","f","cacheEntry","isIncluded","countResults","count","countSimulateChecked","checkedValue","oldCache","oldChecked","countHierarchicalSimulateOnlyThisChecked","oldFilters","countSimulateOnlyThisChecked","oldFilter","checkHierarchicalParendIdx","parentsIdx","parentsIdxArray","split","includes","hierarchicalParentIndex","setHierarchicalParendIdx","mainNavList","parentItem","setVisibility","isVisible","hidden","setCount","isDisabled","countNode","parent","countNodeSelector","nextSibling","disabled","innerText","setGlobalCount","getReloadUrl","gridNode","paramsStr","encodeParams","saveCurrentState","getState","ajaxUrl","getReloadUrlFromHistory","history","getFilterParams","getParams","params","selector","getElementById","sortMethod","keys","currentCount","fIdx","vIdx","hasHierarchicalParendIdx","countStr","toString","difference","allValuesDisabled","every","setAllCount","dispatchEvent","CustomEvent","updateV2","getActiveHierarchicalLevel","currentFilter","currentId","getActiveFilterNav","reload","undefined","container","gridNodeSelector","xhr","XMLHttpRequest","newUrl","updateUrl","pushState","onload","status","responseElement","responseText","onFilterTeaserGridChange","innerHTML","NiveaX","loadShopPrices","initModules","console","error","open","send","searchPar","URLSearchParams","location","search","get","filterCategory","inputs","aciveFilterNames","inp","saveState","countElement","filterBtnSelector","entries","map","encodeURIComponent","join","observer","MutationObserver","disconnect","Event","observe","childList"],"sourceRoot":""}