{"version":3,"file":"./modules/AutoSuggest.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/AutoSuggest/AutoSuggest.ts","webpack:///./modules/AutoSuggest/AutoSuggestMarkup.ts","webpack:///./modules/AutoSuggest/index.ts","webpack:///./modules/AutoSuggest/AutoSuggestKeyboardNavigation.ts"],"sourcesContent":["// Default Options in View:\r\n// data-options='{\"InputFieldClass\": \"nx-autosuggest-input\", \"SuggestionResultsClass\": \"nx-autosuggest-result\", \"MinCharactersToTriggerSuggest\": 3, \"SubmitOnClick\": false, \"AjaxResultAddressParameter\": \"data-ajax-address-url\", \"PathToValueInObject\": \"Address.PostalCode\"}'\r\n\r\nconst moduleSelector = '[data-module=\"AutoSuggest\"]';\r\n\r\nimport AutoSuggestMarkup from './AutoSuggestMarkup';\r\nimport { getOptions, debounce } from '../../helpers/helperFunctions';\r\nimport { addClasses, hasClass, removeClasses } from '../../helpers/DOMHelpers';\r\nimport AutoSuggestKeyboardNavigation from './AutoSuggestKeyboardNavigation';\r\n\r\nexport default class AutoSuggest {\r\n protected resultWrapper: HTMLElement;\r\n private autoSubmitForm: boolean;\r\n private suggestionsRequestUrl: string;\r\n private minCharactersToTriggerSuggest: number;\r\n private isClickListenerInitialized: boolean;\r\n\r\n protected options: AutoSuggestOptions;\r\n protected inputField: HTMLInputElement;\r\n protected clearButton: HTMLElement;\r\n\r\n protected isAddressFinderInput: boolean;\r\n protected isInputValid: boolean;\r\n protected fieldMapping: string;\r\n protected culture: string;\r\n protected suggestionsRespObj: {}\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 AutoSuggest(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, options: AutoSuggestOptions = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), options));\r\n\r\n this.inputField = this.element.querySelector(`.${this.options.InputFieldClass}`);\r\n this.resultWrapper = this.element.querySelector(`.${this.options.SuggestionResultsClass}`);\r\n this.clearButton = this.element.querySelector(`.${this.options.ClearButtonClass}`);\r\n this.minCharactersToTriggerSuggest = this.options.MinCharactersToTriggerSuggest;\r\n this.autoSubmitForm = this.options.SubmitOnClick;\r\n this.suggestionsRequestUrl = this.element.getAttribute(`${this.options.AjaxResultAddressParameter}`);\r\n this.isAddressFinderInput = hasClass(this.element.closest('.field'), this.options.AddressFieldWrapper);\r\n this.culture = this.element.getAttribute(`${this.options.Culture}`);\r\n this.fieldMapping = this.element.getAttribute(`${this.options.FieldMapping}`);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n const debouncedOnTyping = debounce((e, value) => {\r\n this.isInputValid = !hasClass(this.element.parentElement, 'error');\r\n\r\n if (this.isAddressFinderInput && this.isInputValid) {\r\n this.onTyping(e, value);\r\n }\r\n\r\n if (!this.isAddressFinderInput) {\r\n this.onTyping(e, value);\r\n }\r\n }, 100)\r\n\r\n this.inputField.addEventListener('keyup', (e) => {\r\n const targetInput: HTMLInputElement = e.currentTarget as HTMLInputElement;\r\n debouncedOnTyping(e, targetInput.value);\r\n });\r\n\r\n this.clearButton.addEventListener('click', () => {\r\n this.clearInputData()\r\n .removeResultWrapperActiveClass()\r\n .clearSuggestionData();\r\n });\r\n\r\n this.inputField.addEventListener('blur', () => {\r\n setTimeout(() => {\r\n this.stopSpinner();\r\n this.removeResultWrapperActiveClass();\r\n }, 300);\r\n });\r\n\r\n this.inputField.addEventListener('focus', () => {\r\n this.resetInputField();\r\n });\r\n }\r\n\r\n confirmSelectedOnKeyEnter() {\r\n const selectedListItem = this.resultWrapper.querySelector(`.${this.options.SuggestionItemClass}--selected`) as HTMLElement;\r\n if (!selectedListItem) return;\r\n\r\n this.inputFieldValue(selectedListItem).removeResultWrapperActiveClass();\r\n }\r\n\r\n private onTyping(e: KeyboardEvent, value: string): AutoSuggest {\r\n if (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13) {\r\n if (!this.resultWrapper.classList.contains(`${this.options.SuggestionResultsClass}--active`)) return;\r\n e.preventDefault();\r\n new AutoSuggestKeyboardNavigation(e.keyCode, this.resultWrapper.querySelectorAll(`.${this.options.SuggestionItemClass}`), this.resultWrapper, this.confirmSelectedOnKeyEnter.bind(this));\r\n } else {\r\n if (value.length >= this.minCharactersToTriggerSuggest) {\r\n this.showSuggestionsWrapper()\r\n .getSuggestions(value);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private showSuggestionsWrapper(): AutoSuggest {\r\n this.resultWrapper.classList.add(`${this.options.SuggestionResultsClass}--active`);\r\n this.startSpinner();\r\n\r\n return this;\r\n }\r\n\r\n private async getSuggestions(value) {\r\n try {\r\n const url: string = this.isAddressFinderInput ?\r\n `${this.suggestionsRequestUrl}?query=${value}&culture=${this.culture}&fieldmapping=${this.fieldMapping}` :\r\n `${this.suggestionsRequestUrl}?query=${value}`;\r\n\r\n const res = await fetch(url, { credentials: 'include' });\r\n const suggestions = await res.json();\r\n this.suggestionsRespObj = suggestions;\r\n\r\n if (this.isClickListenerInitialized) {\r\n new AutoSuggestMarkup(suggestions, this.resultWrapper, this.inputField.value, this.options.PathToValueInObject, this.isAddressFinderInput);\r\n } else {\r\n new AutoSuggestMarkup(suggestions, this.resultWrapper, this.inputField.value, this.options.PathToValueInObject, this.isAddressFinderInput, this.onSuggestedItemClick.bind(this));\r\n this.isClickListenerInitialized = true;\r\n }\r\n } catch (e) {\r\n console.error(`Error Getting Suggestions: ${e}`);\r\n } finally {\r\n this.stopSpinner();\r\n }\r\n }\r\n\r\n onSuggestedItemClick(e: MouseEvent): AutoSuggest {\r\n let currentTarget: HTMLElement = e.target as HTMLElement;\r\n\r\n if (currentTarget.tagName === 'UL') { return this; }\r\n if (currentTarget.tagName === 'STRONG') { currentTarget = currentTarget.parentElement; }\r\n\r\n this.inputFieldValue(currentTarget);\r\n this.clearSuggestionData().removeResultWrapperActiveClass();\r\n\r\n if (this.autoSubmitForm) {\r\n this.submitFormAfterSuggestionClick();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected inputFieldValue(valueTarget: HTMLElement): AutoSuggest {\r\n this.inputField.value = valueTarget.innerHTML.trim().replace(/(<([^>]+)>)/gi, \"\");\r\n return this;\r\n }\r\n\r\n protected startSpinner(): AutoSuggest {\r\n addClasses(this.element, 'nx-u-spinner', 'nx-u-spinner--medium');\r\n return this;\r\n }\r\n\r\n protected stopSpinner(): AutoSuggest {\r\n removeClasses(this.element, 'nx-u-spinner', 'nx-u-spinner--medium');\r\n return this;\r\n }\r\n\r\n protected clearSuggestionData(): AutoSuggest {\r\n this.resultWrapper.innerHTML = '';\r\n return this;\r\n }\r\n\r\n protected resetInputField(): AutoSuggest {\r\n this.inputField.value = '';\r\n return this;\r\n }\r\n\r\n private removeResultWrapperActiveClass(): AutoSuggest {\r\n if (this.resultWrapper.classList.contains(`${this.options.SuggestionResultsClass}--active`)) this.resultWrapper.classList.remove(`${this.options.SuggestionResultsClass}--active`);\r\n return this;\r\n }\r\n\r\n protected clearInputData(): AutoSuggest {\r\n const visibleField = this.element.closest('.visible');\r\n if (!visibleField) return this;\r\n visibleField.classList.remove('visible');\r\n this.inputField.value = '';\r\n return this;\r\n }\r\n\r\n private submitFormAfterSuggestionClick(): AutoSuggest {\r\n const formElement: HTMLFormElement = this.inputField.closest('form') as HTMLFormElement;\r\n formElement.submit();\r\n return this;\r\n }\r\n\r\n public getDefaultOptions(): AutoSuggestOptions {\r\n return {\r\n InputFieldClass: 'nx-autosuggest-input',\r\n SuggestionResultsClass: 'nx-autosuggest-result',\r\n SuggestionItemClass: 'nx-autosuggest-item',\r\n ClearButtonClass: 'nx-input-text__clear-btn',\r\n MinCharactersToTriggerSuggest: 3,\r\n SubmitOnClick: false,\r\n AjaxResultAddressParameter: 'data-ajax-address-url',\r\n PathToValueInObject: 'Address.FreeformAddress',\r\n AddressFieldWrapper: 'nx-input-address-finder',\r\n Culture: 'data-culture',\r\n FieldMapping: 'data-field-mapping'\r\n };\r\n }\r\n}\r\n\r\n// Hot Module Replacement\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 AutoSuggest.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n new AutoSuggest.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 AutoSuggest.setup(moduleSelector)\r\n};","//import { createElementFromString } from '../../helpers/DOMHelpers';\r\nimport { parseObjectByPath } from '../../helpers/helperFunctions';\r\n\r\nexport default class AutoSuggestMarkup {\r\n private suggestionsWrapper: HTMLElement;\r\n private clickListener: EventListener;\r\n protected isAddressFinderInput: boolean;\r\n protected options: AutoSuggestMarkupOptions;\r\n\r\n constructor(suggestions: Array, resultWrapper: HTMLElement, inputValue: string, dataPath: string, isAddressFinderInput: boolean, clickListener?: EventListener) {\r\n this.options = this.getDefaultOptions();\r\n this.suggestionsWrapper = resultWrapper;\r\n this.clickListener = clickListener;\r\n this.isAddressFinderInput = isAddressFinderInput;\r\n this.createResultsMarkup(suggestions, inputValue, dataPath);\r\n }\r\n\r\n public createResultsMarkup(suggestionsArray: Array, inputValue: string, dataPath: string) {\r\n let res: string = `';\r\n this.injectResultsInWrapper(res);\r\n }\r\n\r\n createAddressRow(values, inputValue) {\r\n const addressField = Object.keys(values)\r\n .map(key => values[key])\r\n .filter(key => key)\r\n .join(', ')\r\n .replace(new RegExp(inputValue.trim(), \"i\"), \"$&\");\r\n\r\n return `${addressField}`\r\n }\r\n\r\n private injectResultsInWrapper(suggestionsMarkup: string) {\r\n this.suggestionsWrapper.innerHTML = suggestionsMarkup;\r\n if (this.clickListener) {\r\n this.initClickListener();\r\n }\r\n }\r\n\r\n private initClickListener() {\r\n this.suggestionsWrapper.addEventListener('click', (e) => this.clickListener(e));\r\n }\r\n\r\n public getDefaultOptions(): AutoSuggestMarkupOptions {\r\n return {\r\n ListClass: 'nx-autosuggest-list',\r\n ItemClass: 'nx-autosuggest-item',\r\n };\r\n }\r\n\r\n}","import AutoSuggest from './AutoSuggest';\r\nexport default AutoSuggest;","//import { createElementFromString } from '../../helpers/DOMHelpers';\r\n\r\nexport default class AutoSuggestKeyboardNavigation {\r\n protected options: AutoSuggestMarkupOptions;\r\n private listItems: NodeListOf;\r\n private nextItemToSelect: HTMLElement;\r\n private currentlySelectedItem: HTMLElement;\r\n private keyboardKeyCode: number;\r\n private callbackFunction: Function;\r\n private listWrapper: HTMLElement;\r\n\r\n constructor(keyCode: number, items: NodeListOf, listWrapper: HTMLElement, fn?: Function) {\r\n this.options = this.getDefaultOptions();\r\n this.listItems = items;\r\n this.keyboardKeyCode = keyCode;\r\n this.listWrapper = listWrapper;\r\n this.currentlySelectedItem = this.listWrapper.querySelector(`.${this.options.ItemClass}--selected`);\r\n this.callbackFunction = fn;\r\n\r\n this.handleKeyboardEntry();\r\n }\r\n\r\n public handleKeyboardEntry() {\r\n\r\n if (this.keyboardKeyCode === 38) {\r\n this.handleKeyUp();\r\n } else if (this.keyboardKeyCode === 40) {\r\n this.handleKeyDown();\r\n } else if (this.keyboardKeyCode === 13) {\r\n this.handleKeyEnter();\r\n }\r\n }\r\n\r\n public handleKeyUp() {\r\n const selectLastListElement: HTMLElement = this.listItems[this.listItems.length - 1],\r\n autosuggestList = this.listWrapper.querySelector(`.${this.options.ListClass}`),\r\n selectedItemIndex = Array.from(autosuggestList.children).indexOf(this.currentlySelectedItem);\r\n\r\n let computedStyle = getComputedStyle(autosuggestList),\r\n autosuggestListHeight = autosuggestList.clientHeight - 2 * (parseFloat(computedStyle.paddingTop)),\r\n scrollTop: number;\r\n\r\n if (this.currentlySelectedItem) {\r\n this.nextItemToSelect = this.currentlySelectedItem.previousSibling as HTMLElement;\r\n this.selectNextElement(this.nextItemToSelect, selectLastListElement);\r\n } else {\r\n this.saveCurrentlySelectedItem(selectLastListElement);\r\n }\r\n\r\n scrollTop = this.currentlySelectedItem.offsetTop - autosuggestListHeight + this.currentlySelectedItem.offsetHeight / 2;\r\n\r\n if (selectedItemIndex == 1) {\r\n autosuggestList.scrollTop = 0;\r\n }\r\n\r\n else if (this.currentlySelectedItem.offsetTop >= autosuggestListHeight) {\r\n autosuggestList.scrollTop = scrollTop\r\n }\r\n\r\n }\r\n\r\n public handleKeyDown() {\r\n const selectFirstListElement: HTMLElement = this.listItems[0],\r\n autosuggestList = this.listWrapper.querySelector(`.${this.options.ListClass}`),\r\n selectedItemIndex = Array.from(autosuggestList.children).indexOf(this.currentlySelectedItem);\r\n\r\n let computedStyle = getComputedStyle(autosuggestList),\r\n autosuggestListHeight = autosuggestList.clientHeight - 2 * (parseFloat(computedStyle.paddingTop)),\r\n scrollTop: number = 0;\r\n\r\n if (this.currentlySelectedItem) {\r\n this.nextItemToSelect = this.currentlySelectedItem.nextElementSibling as HTMLElement;\r\n this.selectNextElement(this.nextItemToSelect, selectFirstListElement);\r\n } else {\r\n this.saveCurrentlySelectedItem(selectFirstListElement);\r\n }\r\n\r\n scrollTop = this.currentlySelectedItem.offsetTop - autosuggestListHeight + this.currentlySelectedItem.offsetHeight / 2;\r\n\r\n if (this.currentlySelectedItem.offsetTop >= autosuggestListHeight && selectedItemIndex > 0) {\r\n autosuggestList.scrollTop = scrollTop\r\n return;\r\n }\r\n\r\n autosuggestList.scrollTop = 0;\r\n }\r\n\r\n public handleKeyEnter() {\r\n if (this.callbackFunction) {\r\n this.callbackFunction();\r\n }\r\n }\r\n\r\n private saveCurrentlySelectedItem(element: HTMLElement) {\r\n this.addSelectedClass(element);\r\n this.currentlySelectedItem = element;\r\n }\r\n\r\n private selectNextElement(nextElementInList: HTMLElement, lastOrFirstElementInList: HTMLElement) {\r\n this.removeSelectedClass(this.currentlySelectedItem);\r\n if (this.nextItemToSelect) {\r\n this.saveCurrentlySelectedItem(nextElementInList);\r\n } else {\r\n this.saveCurrentlySelectedItem(lastOrFirstElementInList);\r\n }\r\n }\r\n\r\n private addSelectedClass(element: HTMLElement) {\r\n element.classList.add(`${this.options.ItemClass}--selected`)\r\n }\r\n\r\n private removeSelectedClass(element: HTMLElement) {\r\n element.classList.remove(`${this.options.ItemClass}--selected`)\r\n }\r\n\r\n public getDefaultOptions(): AutoSuggestMarkupOptions {\r\n return {\r\n ListClass: 'nx-autosuggest-list',\r\n ItemClass: 'nx-autosuggest-item',\r\n };\r\n }\r\n\r\n}"],"names":["moduleSelector","AutoSuggest","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","options","this","Object","assign","getDefaultOptions","inputField","querySelector","InputFieldClass","resultWrapper","SuggestionResultsClass","clearButton","ClearButtonClass","minCharactersToTriggerSuggest","MinCharactersToTriggerSuggest","autoSubmitForm","SubmitOnClick","suggestionsRequestUrl","getAttribute","AjaxResultAddressParameter","isAddressFinderInput","closest","AddressFieldWrapper","culture","Culture","fieldMapping","FieldMapping","init","debouncedOnTyping","e","value","isInputValid","parentElement","onTyping","addEventListener","targetInput","currentTarget","clearInputData","removeResultWrapperActiveClass","clearSuggestionData","setTimeout","stopSpinner","resetInputField","confirmSelectedOnKeyEnter","selectedListItem","SuggestionItemClass","inputFieldValue","keyCode","classList","contains","preventDefault","bind","length","showSuggestionsWrapper","getSuggestions","add","startSpinner","url","res","fetch","credentials","suggestions","json","suggestionsRespObj","isClickListenerInitialized","PathToValueInObject","onSuggestedItemClick","console","error","target","tagName","submitFormAfterSuggestionClick","valueTarget","innerHTML","trim","replace","remove","visibleField","submit","AutoSuggestMarkup","inputValue","dataPath","clickListener","suggestionsWrapper","createResultsMarkup","suggestionsArray","ListClass","index","ItemClass","JSON","stringify","createAddressRow","RegExp","injectResultsInWrapper","values","keys","map","key","join","suggestionsMarkup","initClickListener","AutoSuggestKeyboardNavigation","items","listWrapper","fn","listItems","keyboardKeyCode","currentlySelectedItem","callbackFunction","handleKeyboardEntry","handleKeyUp","handleKeyDown","handleKeyEnter","selectLastListElement","autosuggestList","selectedItemIndex","children","indexOf","scrollTop","computedStyle","getComputedStyle","autosuggestListHeight","clientHeight","parseFloat","paddingTop","nextItemToSelect","previousSibling","selectNextElement","saveCurrentlySelectedItem","offsetTop","offsetHeight","selectFirstListElement","nextElementSibling","addSelectedClass","nextElementInList","lastOrFirstElementInList","removeSelectedClass"],"sourceRoot":""}