{"version":3,"sources":["webpack:///./modules/Filter.ts","webpack:///./helpers/trackingHelpers.ts","webpack:///./modules/FilterAction.ts"],"names":["__webpack_require__","r","__webpack_exports__","_helpers_helperFunctions__WEBPACK_IMPORTED_MODULE_0__","_helpers_trackingHelpers__WEBPACK_IMPORTED_MODULE_1__","_TrackingGA4__WEBPACK_IMPORTED_MODULE_2__","_FilterAction__WEBPACK_IMPORTED_MODULE_3__","Filter","element","options","_this","this","showClearBtn","Object","assign","getDefaultOptions","openFilterBtn","querySelector","closeFilterBtn","applyFilterBtn","body","document","mobileCloseFilterBtn","resetFilterBtn","applyFilterBtnWrapper","resetBtn","resetBtnSelector","filterNode","closeOnOutsideClick","init","addEventListener","e","toggleFilter","stopPropagation","window","onclick","closeFilter","setup","selector","Array","from","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","prototype","initFilterAction","addHandlerOnFilterChange","addHandlerOnResetBtn","Eucerin","isMobile","target","classList","contains","remove","allow","filterAction","reset","resetState","reload","closeButtonFilterText","updateFilterAction","update","onFilterChange","input","event","add","closest","checkboxSelector","filterType","nextElementSibling","prevent","innerText","getAttribute","filterSelector","filterItemSelector","isDesktop","d","trackFilter","addToCartProductTracking","changeProductQuantityTracking","removeFromCartProductTracking","trackSliderMovement","addToCartEventName","removeFromCartEventName","cartTrackingEvent","eventName","qty","btnType","productPriceElement","price","parseFloat","category","eventData","actionField","list","products","id","name","brand","variant","quantity","type","ecommerce","currencyCode","dataLayer","push","item","filterName","filterCategory","eventCategory","eventAction","eventLabel","eventNonInteraction","oldQty","newQty","Math","abs","length","undefined","FilterAction","oneFilterSelectedText","multipleFilterSelectedText","filterUnselectText","filterTag","applyBtn","applyBtnSelector","applyBtnCounter","firstElementChild","openBtnTextfield","youtubeWrapper","tagsMap","tagsStr","atob","tagsMapAttrs","tagsStrAttr","tagCount","parseInt","tagCountAttr","productsCount","productsCountAttr","initURLNavigation","recoverState","onpopstate","location","hash","match","loadParamsFromURL","bind","loadParamsFromFilterState","filterState","state","JSON","parse","replace","key","value","decodeURIComponent","getFilters","filters","filterKey","isAnd","values","valueNode","checked","hierarchical","index","cache","isProductTagged","product","tag","i","charCodeAt","floor","isProductIncludedInFilter","p","isAndFilter","anyValueChecked","v","isProductVisible","f","cacheEntry","isIncluded","countResults","count","countSimulateChecked","checkedValue","oldCache","oldChecked","countSimulateOnlyThisChecked","oldFilter","setCount","isDisabled","countNode","_helpers_DOMHelpers__WEBPACK_IMPORTED_MODULE_1__","countNodeSelector","nextSibling","disabled","setGlobalCount","getReloadUrl","gridNode","paramsStr","encodeParams","saveCurrentState","getState","ajaxUrl","getParams","params","keys","entries","map","_a","_b","__read","encodeURIComponent","join","currentCount","showResetFilterBtn","fIdx","vIdx","countStr","toString","difference","openButtonFilterText","history","xhr","XMLHttpRequest","onload","status","onReloadSuccess","responseText","console","error","open","send","data","jsonData","container","stagecontainer","FilteredItems","stageFilter","FilterInformation","footerContent","FilterFooter","el","innerHTML","appendChild","removeLoader","updateUrl","FilterStateUrl","initModules","dispatchEvent","CustomEvent","inputs","this_1","aciveFilterNames","inp","split","includes","saveState","url","pushState","inputCheckedLength","chekcedItemValue","filterTagSelector","filterBtnSelector"],"mappings":"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","file":"./modules/Filter.db4283ef.js","sourcesContent":["/// \r\nimport { getOptions, IOSScroll } from '../helpers/helperFunctions';\r\nimport { trackFilter } from '../helpers/trackingHelpers';\r\nimport { trackFilterGA4 } from '../TrackingGA4';\r\nimport { Optional } from '../typings/mapped-types';\r\nimport FilterAction from './FilterAction';\r\n\r\nconst moduleSelector = '[data-module=\"Filter\"]';\r\n\r\nexport default class Filter {\r\n openFilterBtn: HTMLElement;\r\n closeFilterBtn: HTMLElement;\r\n applyFilterBtn: HTMLElement;\r\n mobileCloseFilterBtn: HTMLElement;\r\n resetFilterBtn: HTMLElement;\r\n showClearBtn: boolean = false;\r\n resetBtn: HTMLElement;\r\n spinnerWrapper: HTMLElement;\r\n filterNode: HTMLElement;\r\n applyFilterBtnWrapper: HTMLElement;\r\n body: HTMLElement;\r\n\r\n private filterAction: FilterAction;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new Filter(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, private options: Optional = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.openFilterBtn = this.element.querySelector('.open-filter-button');\r\n this.closeFilterBtn = this.element.querySelector('.close-filter-button');\r\n this.applyFilterBtn = this.element.querySelector('.apply-filter-button');\r\n this.body = document.querySelector('body');\r\n this.mobileCloseFilterBtn = this.element.querySelector('.close-filter-mobile-btn');\r\n this.resetFilterBtn = this.element.querySelector('.reset-filter-button');\r\n this.applyFilterBtnWrapper = this.element.querySelector('.filter-apply-btn-container');\r\n this.resetBtn = this.element.querySelector(this.options.resetBtnSelector);\r\n this.filterNode = this.element;\r\n this.closeOnOutsideClick();\r\n this.init();\r\n\r\n this.openFilterBtn.addEventListener('click', (e) => {\r\n this.toggleFilter();\r\n e.stopPropagation();\r\n window.onclick = e => {\r\n this.closeFilter(e);\r\n }\r\n });\r\n this.closeFilterBtn.addEventListener('click', () => this.toggleFilter());\r\n this.mobileCloseFilterBtn.addEventListener('click', () => this.toggleFilter());\r\n this.applyFilterBtnWrapper.addEventListener('click', () => this.toggleFilter());\r\n }\r\n\r\n init(): Filter {\r\n this.initFilterAction(this.element)\r\n .addHandlerOnFilterChange()\r\n .addHandlerOnResetBtn();\r\n\r\n return this;\r\n }\r\n\r\n private closeFilter(e) {\r\n if (Eucerin.isMobile) {\r\n if (e.target == this.body && this.element.classList.contains('filter-shown')) {\r\n this.element.classList.remove('filter-shown');\r\n this.body.classList.remove('filter-underlayer');\r\n IOSScroll.allow();\r\n }\r\n }\r\n }\r\n private initFilterAction(element: HTMLElement): Filter {\r\n this.filterAction = this.filterAction || new FilterAction(element);\r\n\r\n return this;\r\n }\r\n\r\n\r\n private addHandlerOnResetBtn(): Filter {\r\n this.resetBtn.addEventListener('click', () => this.reset());\r\n return this;\r\n }\r\n\r\n private reset(): Filter {\r\n this.filterAction.resetState();\r\n this.filterAction.reload();\r\n this.closeButtonFilterText();\r\n return this;\r\n }\r\n\r\n private updateFilterAction(): Filter {\r\n this.filterAction.update();\r\n this.filterAction.reload();\r\n return this;\r\n }\r\n\r\n private onFilterChange(): void {\r\n const input = event.target;\r\n if (Eucerin.isMobile) {\r\n this.body.classList.add(\"loader\");\r\n } else {\r\n this.element.classList.add(\"loader\");\r\n }\r\n\r\n if (input.closest(this.options.checkboxSelector)) {\r\n const filterType = this.element.nextElementSibling.classList.contains(\"article-filter-content\") ? \"article\" : \"product\"\r\n trackFilterGA4(input, filterType);\r\n trackFilter(input);\r\n this.updateFilterAction();\r\n this.closeButtonFilterText();\r\n }\r\n }\r\n\r\n private addHandlerOnFilterChange(): Filter {\r\n this.filterNode.addEventListener('change', () => this.onFilterChange());\r\n return this;\r\n }\r\n\r\n private toggleFilter() {\r\n if (!this.element.classList.contains('filter-shown')) {\r\n this.element.classList.add('filter-shown');\r\n if (Eucerin.isMobile)\r\n IOSScroll.prevent();\r\n } else {\r\n this.element.classList.remove('filter-shown');\r\n if (Eucerin.isMobile)\r\n IOSScroll.allow();\r\n }\r\n\r\n if (Eucerin.isMobile) {\r\n if (this.element.classList.contains('filter-shown')) {\r\n this.body.classList.add(\"filter-underlayer\");\r\n } else {\r\n this.body.classList.remove(\"filter-underlayer\");\r\n }\r\n } else {\r\n this.body.classList.remove(\"filter-underlayer\");\r\n }\r\n }\r\n\r\n private closeButtonFilterText(): Filter {\r\n var target = this.closeFilterBtn.querySelector('.icon-text');\r\n if (document.querySelector('.filter-item input:checked')) {\r\n target.innerText = this.closeFilterBtn.getAttribute('data-selected-hide-text');\r\n } else {\r\n target.innerText = this.closeFilterBtn.getAttribute('data-hide-text');\r\n }\r\n return this\r\n }\r\n\r\n private getDefaultOptions(): Optional {\r\n return {\r\n filterSelector: '.filter-wrapper',\r\n checkboxSelector: '.filter-check-box',\r\n filterItemSelector: '.cw-tag-filter__item',\r\n resetBtnSelector: '.reset-filter-button',\r\n };\r\n }\r\n\r\n private closeOnOutsideClick() {\r\n document.addEventListener(\"click\", (event: any) => {\r\n const target = event.target;\r\n if (Eucerin.isDesktop && !target.closest(\".filter-wrapper.filter-shown\")) {\r\n this.element.classList.remove('filter-shown');\r\n };\r\n })\r\n }\r\n}\r\n\r\nnew Filter.setup();","const addToCartEventName = 'addToCart';\r\nconst removeFromCartEventName = 'removeFromCart';\r\n\r\nfunction cartTrackingEvent(element, eventName, qty, btnType) {\r\n const productPriceElement = element.querySelector('[product-price]');\r\n const price = parseFloat(productPriceElement && productPriceElement.getAttribute('product-price'))\r\n\r\n const category = element.getAttribute('product-category');\r\n\r\n const eventData = {\r\n actionField: { list: category },\r\n products: [{\r\n id: element.getAttribute('product-sku'),\r\n name: element.getAttribute('product-name'),\r\n brand: 'Eucerin',\r\n category: category,\r\n variant: element.getAttribute('product-variant'),\r\n price: price,\r\n quantity: qty\r\n }],\r\n type: btnType\r\n };\r\n\r\n const event: { event; ecommerce } = {\r\n event: eventName,\r\n ecommerce: {\r\n currencyCode: element.getAttribute('product-currency'),\r\n }\r\n };\r\n\r\n if (eventName === addToCartEventName)\r\n event.ecommerce.add = eventData;\r\n else if (eventName === removeFromCartEventName)\r\n event.ecommerce.remove = eventData;\r\n\r\n window.dataLayer.push(event);\r\n}\r\n\r\nexport function trackFilter(item) {\r\n const element = item as HTMLElement;\r\n const filterName = element.getAttribute('data-value-name');\r\n const filterCategory = element.closest('[data-filter-name]').getAttribute('data-filter-name');\r\n\r\n if (window.dataLayer) {\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Filter',\r\n eventAction: filterCategory,\r\n eventLabel: filterName,\r\n eventNonInteraction: false\r\n });\r\n }\r\n\r\n}\r\n\r\nexport function addToCartProductTracking(element, qty = 1) {\r\n cartTrackingEvent(element, addToCartEventName, qty, (element.closest(\".teaser\")) ? 'Teaser' : 'Button');\r\n}\r\n\r\nexport function changeProductQuantityTracking(element, oldQty, newQty) {\r\n const eventName = newQty - oldQty === Math.abs(newQty - oldQty) ? addToCartEventName : removeFromCartEventName;\r\n cartTrackingEvent(element, eventName, Math.abs(newQty - oldQty), 'Dropdown');\r\n}\r\n\r\nexport function removeFromCartProductTracking(element, qty) {\r\n cartTrackingEvent(element, removeFromCartEventName, qty, 'Button');\r\n}\r\n\r\nexport function trackSliderMovement(eventAction: string, eventLabel: string = '') {\r\n window.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: 'Teaser',\r\n eventAction: eventAction,\r\n eventLabel: eventLabel.length > 0 ? eventLabel : undefined,\r\n eventNonInteraction: false\r\n });\r\n}","/// \r\nimport { getOptions } from '../helpers/helperFunctions';\r\nimport { getSibling, createElementFromString, /*toggleClass*/ } from '../helpers/DOMHelpers';\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 resetFilterBtn: HTMLElement;\r\n applyFilterBtnWrapper: HTMLElement;\r\n spinnerWrapper: HTMLElement;\r\n openFilterBtn: HTMLElement;\r\n openBtnTextfield: HTMLElement;\r\n body: HTMLElement;\r\n oneFilterSelectedText: string = this.element.getAttribute('data-one-filter-selected');\r\n multipleFilterSelectedText: string = this.element.getAttribute('data-multiple-filter-selected');\r\n filterUnselectText: string = this.element.getAttribute('data-filter-unselected');\r\n youtubeWrapper: 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\r\n this.applyBtn = this.element.querySelector(this.options.applyBtnSelector);\r\n this.applyBtnCounter = this.applyBtn.firstElementChild;\r\n this.resetFilterBtn = this.element.querySelector('.reset-filter-button');\r\n this.body = document.querySelector('body');\r\n this.applyFilterBtnWrapper = this.element.querySelector('.filter-apply-btn-container');\r\n this.openFilterBtn = this.element.querySelector('.open-filter-button');\r\n this.openBtnTextfield = this.openFilterBtn.querySelector('.icon-text');\r\n this.youtubeWrapper = document.querySelector('.you-tube');\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\r\n private init(): FilterAction {\r\n this.recoverState()\r\n .update();\r\n\r\n return this;\r\n }\r\n\r\n private initURLNavigation() {\r\n window.onpopstate = function (event) {\r\n if (!location.hash.match(/layer=pharmacy-finder/g)) {\r\n this.loadParamsFromURL()\r\n this.resetState()\r\n .recoverState()\r\n .update();\r\n\r\n location.reload();\r\n }\r\n }.bind(this);\r\n\r\n this.loadParamsFromFilterState();\r\n\r\n return this;\r\n }\r\n\r\n private loadParamsFromFilterState() {\r\n const filterState = this.element.getAttribute('data-filter-state');\r\n\r\n if (filterState !== '' && filterState !== undefined) {\r\n let state = JSON.parse('{\"' + filterState.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}', (key, value) => key === \"\" ? value : decodeURIComponent(value));\r\n this.options.state = state;\r\n\r\n }\r\n return this;\r\n }\r\n\r\n private getFilters(): FilterItem[] {\r\n const filters = [];\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(product, tag): boolean {\r\n const i = product * this.tagsMap.tagCount + tag;\r\n\r\n\r\n return (this.tagsMap.tagsStr.charCodeAt(Math.floor(i / 8)) & (1 << (i % 8))) !== 0;\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\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\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\r\n private setCount(value: FilterValue, count: string, isDisabled: boolean): FilterAction {\r\n let countNode;\r\n\r\n countNode = getSibling(value.node, this.options.countNodeSelector) || value.node.nextSibling.nextSibling;\r\n value.node.disabled = isDisabled;\r\n\r\n\r\n countNode.innerText = count;\r\n return this;\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 = this.encodeParams(this.saveCurrentState().getState()),\r\n ajaxUrl = gridNode.dataset.ajaxUrl + '&' + paramsStr;\r\n\r\n return ajaxUrl;\r\n }\r\n\r\n private getParams(): FilterActionState {\r\n const filters = this.getFilters(),\r\n params = {};\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 return params;\r\n }\r\n\r\n private encodeParams(params: FilterActionState): string {\r\n return Object.entries(params).map(([key, value]) => `${encodeURIComponent(key)}=${value.map(v => encodeURIComponent(v)).join(',')}`).join('&');\r\n }\r\n\r\n update(): FilterAction {\r\n this.filters = this.getFilters();\r\n const currentCount = this.countResults();\r\n this.setGlobalCount(currentCount);\r\n this.showResetFilterBtn();\r\n\r\n this.filters.forEach((filter, fIdx) => {\r\n\r\n filter.values.forEach((value, vIdx) => {\r\n let countStr;\r\n\r\n if (!value.checked) {\r\n const count = this.countSimulateChecked(fIdx, vIdx, true);\r\n\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\r\n });\r\n\r\n this.openButtonFilterText();\r\n\r\n return this;\r\n }\r\n\r\n reload(history = undefined): FilterAction {\r\n const xhr = new XMLHttpRequest();\r\n let ajaxUrl;\r\n\r\n ajaxUrl = this.getReloadUrl(this.element);\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n this.onReloadSuccess(xhr.responseText);\r\n\r\n } else {\r\n console.error('The request failed!');\r\n }\r\n };\r\n\r\n xhr.open('GET', ajaxUrl);\r\n xhr.send();\r\n\r\n return this;\r\n }\r\n\r\n private onReloadSuccess(data) {\r\n const jsonData = JSON.parse(data);\r\n const container = document.querySelector('[data-filter-content]'),\r\n stagecontainer = document.querySelector('.info-stage'),\r\n gridNode = createElementFromString(`
${jsonData.FilteredItems}
`).querySelector('[data-filter-content]'),\r\n stageFilter = createElementFromString(`
${jsonData.FilterInformation}
`).querySelector('.info-stage'),\r\n footerContent = createElementFromString(`
${jsonData.FilterFooter}
`).querySelector('.footer-stage');\r\n\r\n document.querySelectorAll('.footer-stage').forEach(el => el.remove());\r\n\r\n if (gridNode && container)\r\n container.innerHTML = gridNode.innerHTML;\r\n\r\n if (footerContent && container)\r\n container.appendChild(footerContent);\r\n\r\n if (stagecontainer && stageFilter)\r\n stagecontainer.innerHTML = stageFilter.innerHTML;\r\n\r\n this.removeLoader();\r\n this.updateUrl(jsonData.FilterStateUrl);\r\n window.Eucerin.initModules();\r\n document.dispatchEvent(new CustomEvent(\"FaceLiftLoadMore\"));\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=\"${decodeURIComponent(filterCategory)}\"] input[type=\"checkbox\"]`)),\r\n aciveFilterNames = this.options.state[filterCategory] as any;\r\n\r\n inputs.filter((inp: HTMLInputElement) => aciveFilterNames.split(',').includes(inp.name))\r\n .forEach((inp: HTMLInputElement) => inp.checked = true);\r\n }\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 // .update();\r\n\r\n this.update();\r\n\r\n return this;\r\n }\r\n\r\n getState(): FilterActionState {\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 removeLoader() {\r\n if (Eucerin.isMobile) {\r\n this.body.classList.remove(\"loader\");\r\n } else {\r\n this.element.classList.remove(\"loader\");\r\n }\r\n }\r\n\r\n private updateUrl(url) {\r\n window.history.pushState(url, '', url);\r\n }\r\n\r\n private saveState(state: FilterActionState): FilterAction {\r\n this.options.state = state;\r\n return this;\r\n }\r\n\r\n private showResetFilterBtn() {\r\n if (document.querySelector('.filter-item input:checked')) {\r\n this.applyFilterBtnWrapper.classList.add('active');\r\n this.resetFilterBtn.classList.add('active');\r\n } else {\r\n this.resetFilterBtn.classList.remove('active');\r\n this.applyFilterBtnWrapper.classList.remove('active');\r\n }\r\n }\r\n\r\n private openButtonFilterText(): FilterAction {\r\n var inputCheckedLength = document.querySelectorAll('.filter-item input:checked').length;\r\n if (inputCheckedLength == 1) {\r\n var chekcedItemValue = document.querySelector('.filter-item input:checked').getAttribute('data-value-name');\r\n this.openBtnTextfield.innerText = `${this.oneFilterSelectedText} ${chekcedItemValue}`;\r\n } else if (inputCheckedLength >= 2) {\r\n this.openBtnTextfield.innerText = `${inputCheckedLength} ${this.multipleFilterSelectedText}`;\r\n } else {\r\n this.openBtnTextfield.innerText = this.filterUnselectText;\r\n }\r\n\r\n if (inputCheckedLength > 0) {\r\n document.querySelector('.filter-action-buttons').classList.add('has-selected');\r\n } else {\r\n document.querySelector('.filter-action-buttons').classList.remove('has-selected');\r\n }\r\n\r\n return this\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\r\n filterTagSelector: '.filter-wrapper',\r\n filterBtnSelector: '.nx-filter-button',\r\n\r\n filterItemSelector: '.product-filter',\r\n checkboxSelector: '.filter-check-box',\r\n applyBtnSelector: '.filter-apply-button',\r\n countNodeSelector: '.filter-count',\r\n //gridNodeSelector: '.nx-teaser-grid',\r\n state: {}\r\n };\r\n }\r\n}"],"sourceRoot":""}