{"version":3,"file":"./modules/SearchAutoSuggestion.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/SearchAutoSuggestion.ts","webpack:///../../../node_modules/rxjs/_esm5/internal/operators/pluck.js"],"sourcesContent":["import { fromEvent, from, merge, Observable } from 'rxjs';\r\nimport { debounceTime, pluck, filter, map, tap } from 'rxjs/operators';\r\nimport { getOptions, cleanString } from '../helpers/helperFunctions';\r\nimport { Optional } from '../typings/mapped-types';\r\nconst moduleSelector = '[data-module=\"SearchAutoSuggestion\"]';\r\n\r\ninterface SearchAutoSuggestionOptions {\r\n inputWrapperSelector: string;\r\n inputSelector: string;\r\n suggestionListSelector: string;\r\n formSelector: string;\r\n deleteBtnSelector: string;\r\n}\r\n\r\ninterface SearchAutoSuggestionResponseCache {\r\n [index: string]: string;\r\n}\r\n\r\nconst keyArrowUp = 38,\r\n keyArrowDown = 40,\r\n keyEnter = 13,\r\n filterTarget = ($mouseEventStream: Observable, targetTag: string) => $mouseEventStream.pipe(\r\n pluck('target'),\r\n map((target: HTMLElement) => target.closest(targetTag)),\r\n filter(suggestionItem => !!suggestionItem));\r\n\r\nexport default class SearchAutoSuggestion {\r\n private inputField: HTMLElement;\r\n private inputFieldText: HTMLInputElement;\r\n private suggestionField: HTMLElement;\r\n private form: HTMLFormElement;\r\n private deleteButton: HTMLElement;\r\n private ajaxResponseCache: SearchAutoSuggestionResponseCache = {};\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 SearchAutoSuggestion(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.inputField = this.element.querySelector(this.options.inputWrapperSelector);\r\n this.inputFieldText = this.inputField.querySelector(this.options.inputSelector);\r\n this.suggestionField = this.element.querySelector(this.options.suggestionListSelector);\r\n this.form = this.element.querySelector(this.options.formSelector) || element;\r\n this.deleteButton = this.element.querySelector(this.options.deleteBtnSelector);\r\n\r\n this.setInputEventHandler();\r\n }\r\n\r\n private setInputEventHandler(): SearchAutoSuggestion {\r\n const $input = fromEvent(this.inputFieldText, 'input').pipe(\r\n pluck('target'),\r\n debounceTime(500),\r\n filter(inputNode => (inputNode).value.length >= 3 ? true : this.hideDialog()),\r\n pluck('value'),\r\n map(cleanString)),\r\n\r\n $keyDown = fromEvent(this.inputFieldText, 'keydown').pipe(\r\n filter(({ target }) => (target).value != null)),\r\n\r\n $enterKey = $keyDown.pipe(\r\n filter((event: KeyboardEvent) => event.which === keyEnter),\r\n pluck('target', 'value')),\r\n\r\n $verticalArrowsKey = $keyDown.pipe(\r\n map(({ target, which }: KeyboardEvent) => ({ inputValue: cleanString((target).value), which })),\r\n filter(({ inputValue }) => inputValue.length >= 3),\r\n filter(({ which }) => [keyArrowUp, keyArrowDown].includes(which)),\r\n tap(({ inputValue }) => !this.isDialogVisible() && this.initSuggestion(inputValue))),\r\n\r\n $inputFieldClick = fromEvent(this.inputField, 'click').pipe(\r\n map(() => this.inputFieldText.value),\r\n filter(inputValue => inputValue.length >= 3),\r\n map(cleanString)),\r\n\r\n $deleteBtnClick = fromEvent(this.deleteButton, 'click'),\r\n\r\n $onBodyClick = fromEvent(document.body, 'click').pipe(\r\n pluck('target'),\r\n filter((target: HTMLElement) => target.closest(this.options.inputWrapperSelector) === null)),\r\n\r\n $onSuggestionFieldClick = fromEvent(this.suggestionField, 'click'),\r\n\r\n $onSearchResultHover = fromEvent(this.suggestionField, 'mouseover');\r\n\r\n // Subscriptions\r\n $input.subscribe(inputValue => this.initSuggestion(inputValue));\r\n\r\n $enterKey.subscribe((inputValue: string) => {\r\n let selectedElement = this.getSelectedElement(this.suggestionField),\r\n value = selectedElement ? selectedElement.textContent : inputValue;\r\n\r\n this.setToInputText(cleanString(value));\r\n });\r\n\r\n $verticalArrowsKey.subscribe(({ which }) => {\r\n switch (which) {\r\n case keyArrowDown:\r\n this.moveSelection(true);\r\n break;\r\n case keyArrowUp:\r\n this.moveSelection(false);\r\n break;\r\n }\r\n });\r\n\r\n $inputFieldClick.subscribe(inputValue => this.initSuggestion(inputValue));\r\n\r\n merge($deleteBtnClick, $onBodyClick).subscribe(() => this.hideDialog());\r\n\r\n filterTarget($onSuggestionFieldClick, 'li').subscribe((suggestionItem: HTMLElement) => {\r\n this.setToInputText(cleanString(suggestionItem.textContent))\r\n .submitForm();\r\n });\r\n\r\n filterTarget($onSearchResultHover, 'li').subscribe(\r\n suggestionItem =>\r\n this.removeSelection(Array.from(this.suggestionField.children))\r\n .setSelection(suggestionItem));\r\n\r\n return this;\r\n }\r\n\r\n private initSuggestion(searchTerm: string): SearchAutoSuggestion {\r\n this.clearSuggestion()\r\n .setLoader();\r\n\r\n this.isInCache(searchTerm)\r\n ? this.updateSuggestion(this.getResultsFromCache(searchTerm))\r\n : this.fetchSuggestions(searchTerm);\r\n\r\n return this;\r\n }\r\n\r\n // Cache Logic: START\r\n private isInCache(searchTerm: string): boolean {\r\n return searchTerm in this.ajaxResponseCache;\r\n }\r\n\r\n private setResultsToCache(searchTerm: string, resultsHTML: string): SearchAutoSuggestion {\r\n this.ajaxResponseCache[searchTerm] = resultsHTML;\r\n return this;\r\n }\r\n\r\n private getResultsFromCache(searchTerm: string) {\r\n return this.ajaxResponseCache[searchTerm];\r\n }\r\n // Cache Logic: END\r\n\r\n private updateSuggestion(resultsHTML: string): SearchAutoSuggestion {\r\n this.insertNodes(resultsHTML)\r\n .showDialog();\r\n\r\n return this;\r\n }\r\n\r\n private clearSuggestion(): SearchAutoSuggestion {\r\n this.suggestionField.innerHTML = \"\";\r\n return this;\r\n }\r\n\r\n private fetchSuggestions(searchTerm: string): SearchAutoSuggestion {\r\n //static AJAX usage\r\n // let ajaxUrl = window.location.protocol + \"//\" + window.location.host + \"/NiveaX/StaticPages/SearchSuggestions?q=\" + searchTerm;\r\n let ajaxUrl = window.location.protocol + \"//\" + window.location.host + \"/xajax/searchSuggestion?q=\" + searchTerm;\r\n let response = fetch(ajaxUrl, { credentials: 'include' })\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json();\r\n } else {\r\n throw new Error(`AutoSuggestion for \"${searchTerm}\" was not loaded. Response status: ${response.status}`)\r\n }\r\n });\r\n\r\n from(response)\r\n .pipe(\r\n map((data: string) => JSON.parse(data) || { Results: [] }),\r\n pluck('Results'),\r\n map(results => results.map(r => r.Name)),\r\n tap(results => results.length === 0 && this.hideDialog()),\r\n filter(results => results.length > 0))\r\n .subscribe(\r\n results => {\r\n let resultsHTML = this.createSuggestionHTML(results, searchTerm);\r\n\r\n this.setResultsToCache(searchTerm, resultsHTML)\r\n .updateSuggestion(resultsHTML);\r\n },\r\n err => {\r\n console.warn('Fetch Error', err);\r\n this.hideDialog();\r\n }\r\n );\r\n\r\n return this;\r\n }\r\n\r\n private createSuggestionHTML(results: string[], searchTerm: string): string {\r\n return results\r\n .map(res => `
  • ${res.replace(new RegExp(searchTerm, \"i\"), \"$&\")}
  • `)\r\n .join('');\r\n }\r\n\r\n private insertNodes(resultsHTML: string): SearchAutoSuggestion {\r\n this.suggestionField.innerHTML = resultsHTML;\r\n return this;\r\n }\r\n\r\n private showDialog(): SearchAutoSuggestion {\r\n this.suggestionField.classList.add('active');\r\n return this;\r\n }\r\n\r\n private hideDialog(): boolean {\r\n this.suggestionField.classList.remove('active');\r\n return false;\r\n }\r\n\r\n private isDialogVisible(): boolean {\r\n return this.suggestionField.classList.contains('active');\r\n }\r\n\r\n private setToInputText(value: string): SearchAutoSuggestion {\r\n this.inputFieldText.value = value;\r\n return this;\r\n }\r\n\r\n private setLoader(): SearchAutoSuggestion {\r\n this.suggestionField.innerHTML =\r\n `
    \r\n
    \r\n
    \r\n
    \r\n
    `;\r\n\r\n return this;\r\n }\r\n\r\n private moveSelection(toBottom: boolean): SearchAutoSuggestion {\r\n const suggestionList = this.suggestionField,\r\n suggestions = Array.from((suggestionList.children)),\r\n currentSelected = this.getSelectedElement(suggestionList),\r\n firstElement = suggestionList.firstChild,\r\n lastElement = suggestionList.lastElementChild;\r\n\r\n let nextElementToSelect;\r\n\r\n this.removeSelection(suggestions);\r\n\r\n if (toBottom) {\r\n nextElementToSelect = currentSelected ? currentSelected.nextElementSibling : firstElement;\r\n this.setSelection(nextElementToSelect || firstElement);\r\n } else {\r\n nextElementToSelect = currentSelected ? currentSelected.previousElementSibling : lastElement;\r\n this.setSelection(nextElementToSelect || lastElement);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private setSelection(element: HTMLElement): SearchAutoSuggestion {\r\n element.classList.add('selected');\r\n return this;\r\n }\r\n\r\n private removeSelection(elements: HTMLElement[]): SearchAutoSuggestion {\r\n elements.forEach(elem => elem.classList.remove('selected'));\r\n return this;\r\n }\r\n\r\n private getSelectedElement(list: HTMLElement): HTMLElement {\r\n return list.querySelector('.selected');\r\n }\r\n\r\n private submitForm(): SearchAutoSuggestion {\r\n this.form.submit();\r\n return this;\r\n }\r\n\r\n private getDefaultOptions(): Optional {\r\n return {\r\n inputWrapperSelector: '.nx-search-input__inner',\r\n inputSelector: '.nx-search-input__text',\r\n suggestionListSelector: '.nx-search__autosuggest',\r\n formSelector: '.nx-header-search-form',\r\n deleteBtnSelector: '.nx-search-input-clear__icon'\r\n };\r\n }\r\n}\r\n\r\n// Hot Module Replacement 2\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n SearchAutoSuggestion.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n SearchAutoSuggestion.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n SearchAutoSuggestion.setup(moduleSelector);\r\n}","/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n var properties = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n properties[_i] = arguments[_i];\n }\n var length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n var mapper = function (x) {\n var currentProp = x;\n for (var i = 0; i < length; i++) {\n var p = currentProp[props[i]];\n if (typeof p !== 'undefined') {\n currentProp = p;\n }\n else {\n return undefined;\n }\n }\n return currentProp;\n };\n return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n"],"names":["moduleSelector","keyArrowUp","keyArrowDown","filterTarget","$mouseEventStream","targetTag","pipe","target","closest","suggestionItem","SearchAutoSuggestion","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","options","ajaxResponseCache","this","Object","assign","getDefaultOptions","inputField","querySelector","inputWrapperSelector","inputFieldText","inputSelector","suggestionField","suggestionListSelector","form","formSelector","deleteButton","deleteBtnSelector","setInputEventHandler","$input","inputNode","value","length","hideDialog","$keyDown","$enterKey","event","which","$verticalArrowsKey","inputValue","includes","isDialogVisible","initSuggestion","$inputFieldClick","$deleteBtnClick","$onBodyClick","body","$onSuggestionFieldClick","$onSearchResultHover","subscribe","selectedElement","getSelectedElement","textContent","setToInputText","moveSelection","submitForm","removeSelection","children","setSelection","searchTerm","clearSuggestion","setLoader","isInCache","updateSuggestion","getResultsFromCache","fetchSuggestions","setResultsToCache","resultsHTML","insertNodes","showDialog","innerHTML","ajaxUrl","window","location","protocol","host","response","fetch","credentials","then","status","json","Error","data","JSON","parse","Results","results","map","r","Name","createSuggestionHTML","err","console","warn","res","replace","RegExp","join","classList","add","remove","contains","toBottom","suggestionList","suggestions","currentSelected","firstElement","firstChild","lastElement","lastElementChild","nextElementToSelect","nextElementSibling","previousElementSibling","elements","elem","list","submit","pluck","properties","_i","arguments","source","props","mapper","x","currentProp","i","p","plucker"],"sourceRoot":""}