{"version":3,"file":"js/8235-95d8ec312bf518dc2ce5.js","mappings":"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","sources":["webpack://app/../usr/local/bundle/gems/decidim-core-0.27.4/app/packs/src/decidim/autocomplete.js"],"sourcesContent":["import AutoCompleteJS from \"@tarekraafat/autocomplete.js\";\n\nexport default class AutoComplete {\n constructor(el, options = {}) {\n this.element = el;\n this.stickySelectedSpan = null;\n this.clearStickySelectionSpan = null;\n this.stickyHiddenInput = null;\n this.promptDiv = null;\n const thresholdTemp = options.threshold || 2;\n this.options = Object.assign({\n // Defines name of the hidden input (e.g. assembly_member[user_id])\n name: null,\n // Placeholder of the visible input field\n placeholder: \"\",\n // Defines what happens after user has selected value from suggestions\n // sticky - Allows selecting a single value and not editing the value after selected (e.g. as the admin autocomplete fields)\n // single - Allows selecting a single value and editing the selected text after the selection (e.g. geocoding field)\n // multi - Allows selecting multiple values\n // null (default) - Disable selection event handling in this class\n mode: null,\n // Defines if we show input help (e.g. \"Type at least three characters to search\") or not.\n searchPrompt: false,\n // Defines search prompt message, only shown if showPrompt is enabled!\n searchPromptText: `Type at least ${thresholdTemp} characters to search`,\n // Defines items that are selected already when page is loaded before user selects them. (e.g. when form submit fails)\n selected: null,\n // Defines how many characters input has to have before we start searching\n threshold: thresholdTemp,\n // Defines how many results to show in the autocomplete selection list\n // by maximum.\n maxResults: 10,\n // Defines the data keys against which to match the user input when\n // searching through the results. For example, when the following\n // data is returned by the API:\n // { id: 123, name: \"John\", nickname: \"john\", __typename: \"User\" }\n //\n // You can define the data keys array as [\"name\", \"nickname\"] in\n // which case the results shown to user would be only those that\n // have matching text in these defined fields.\n dataMatchKeys: null,\n // The data source is a method that gets the callback parameter as\n // its first argument which should be called with the results array\n // once they are returned by the API.\n // For example:\n // (query, callback) => {\n // (async () => {\n // const results = await callAjax(`/api/url?query=${query}`);\n // callback(results);\n // })();\n // }\n //\n // Signature: (callback: Function)\n dataSource: () => [],\n // Filters the data list returned by the data source before it is shown\n // to the user. Can be used e.g. to hide already selected values from\n // the list.\n dataFilter: null,\n // Delay in milliseconds how long to wait after user action before\n // doing a backend request.\n delay: 200,\n // Allows modifying the suggested items before they are displayed in the list\n // Signature: (element: HTMLElement, value: Object)\n modifyResult: null\n }, options);\n\n this.autocomplete = new AutoCompleteJS({\n selector: () => this.element,\n placeHolder: options.placeholder,\n // Delay (milliseconds) before autocomplete engine starts. It's preventing many queries when user is typing fast.\n debounce: 200,\n threshold: this.options.threshold,\n data: {\n keys: this.options.dataMatchKeys,\n src: async (query) => {\n const fetchResults = () => {\n return new Promise((resolve) => {\n this.options.dataSource(query, resolve);\n });\n }\n\n try {\n return await fetchResults();\n } catch (error) {\n return error;\n }\n },\n filter: (list) => {\n if (this.options.dataFilter) {\n return this.options.dataFilter(list);\n }\n\n return list;\n }\n },\n resultsList: {\n maxResults: this.options.maxResults\n },\n resultItem: {\n element: (item, data) => {\n if (!this.options.modifyResult) {\n return;\n }\n\n this.options.modifyResult(item, data.value);\n }\n },\n events: {\n input: {\n blur: () => {\n this.promptDiv.style.display = \"none\";\n }\n }\n }\n });\n\n this.acWrapper = this.element.closest(\".autoComplete_wrapper\");\n this.element.ac = this.autocomplete;\n\n // Stop input field from bubbling open and close events to parent elements,\n // because foundation closes modal from these events.\n const stopPropagation = (event) => {\n event.stopPropagation();\n }\n this.element.addEventListener(\"close\", stopPropagation);\n this.element.addEventListener(\"open\", stopPropagation);\n\n this.createPromptDiv();\n\n switch (this.options.mode) {\n case \"sticky\":\n this.createStickySelect(this.options.name);\n break;\n case \"multi\":\n this.createMultiSelect(this.options.name);\n break;\n default:\n }\n }\n\n setInput(value) {\n this.autocomplete.input.value = value;\n }\n\n handleEvent(event) {\n switch (this.options.mode) {\n case \"single\":\n this.setInput(event.detail.selection.value[event.detail.selection.key]);\n break;\n case \"sticky\":\n this.handleStickyEvents(event);\n break;\n case \"multi\":\n this.handleMultiEvents(event);\n break;\n default:\n }\n }\n\n handleMultiEvents(event) {\n switch (event.type) {\n case \"selection\":\n this.addMultiSelectItem(event.detail.selection);\n break;\n default:\n }\n }\n\n handleStickyEvents(event) {\n switch (event.type) {\n case \"selection\":\n this.addStickySelectItem(event.detail.selection);\n break;\n case \"click\":\n if (event.target === this.clearStickySelectionSpan) {\n this.removeStickySelection();\n }\n break;\n case \"keyup\":\n if (this.stickyHiddenInput.value !== \"\" && event.target === this.element && ([\"Escape\", \"Backspace\", \"Delete\"].includes(event.key) || (/^[a-z0-9]$/i).test(event.key))) {\n this.removeStickySelection();\n } else if (this.options.searchPrompt) {\n if (this.stickyHiddenInput.value === \"\" && this.element.value.length < this.options.threshold) {\n this.promptDiv.style.display = \"block\";\n } else {\n this.promptDiv.style.display = \"none\";\n }\n }\n break;\n default:\n }\n }\n\n createHiddenInput(value) {\n const hiddenInput = document.createElement(\"input\");\n hiddenInput.name = this.options.name;\n hiddenInput.type = \"hidden\";\n if (value) {\n hiddenInput.value = value;\n }\n this.acWrapper.prepend(hiddenInput);\n return hiddenInput;\n }\n\n removeStickySelection() {\n this.stickyHiddenInput.value = \"\";\n this.element.placeholder = this.options.placeholder;\n this.clearStickySelectionSpan.style.display = \"none\";\n this.stickySelectedSpan.style.display = \"none\";\n }\n\n addStickySelectItem(selection) {\n this.stickyHiddenInput.value = selection.value.value;\n this.element.placeholder = \"\";\n this.stickySelectedSpan.innerHTML = selection.value[selection.key];\n this.stickySelectedSpan.style.display = \"block\";\n this.clearStickySelectionSpan.style.display = \"block\";\n this.setInput(\"\");\n }\n\n addMultiSelectItem(selection) {\n this.setInput(\"\");\n const chosen = document.createElement(\"span\");\n chosen.classList.add(\"label\", \"primary\", \"autocomplete__selected-item\", \"multi\");\n chosen.innerHTML = selection.value[selection.key];\n const clearSelection = document.createElement(\"span\");\n clearSelection.classList.add(\"clear-multi-selection\");\n clearSelection.innerHTML = \"×\";\n clearSelection.setAttribute(\"data-remove\", selection.value.value);\n clearSelection.addEventListener(\"click\", (evt) => {\n const hiddenInput = this.acWrapper.querySelector(`input[type='hidden'][value='${selection.value.value}']`);\n if (hiddenInput) {\n hiddenInput.remove();\n evt.target.parentElement.remove();\n }\n });\n chosen.appendChild(clearSelection);\n\n const multiSelectWrapper = this.acWrapper.querySelector(\".multiselect\");\n const inputContainer = multiSelectWrapper.querySelector(\"span.input-container\");\n multiSelectWrapper.insertBefore(chosen, inputContainer);\n this.createHiddenInput(selection.value.value);\n }\n\n createStickySelect() {\n this.stickySelectedSpan = document.createElement(\"span\");\n this.stickySelectedSpan.classList.add(\"autocomplete__selected-item\", \"sticky\");\n this.stickySelectedSpan.style.display = \"none\";\n this.stickySelectedSpan.addEventListener(\"click\", () => this.element.focus());\n this.stickyHiddenInput = this.createHiddenInput();\n\n this.clearStickySelectionSpan = document.createElement(\"span\");\n this.clearStickySelectionSpan.className = \"clear-sticky-selection\";\n this.clearStickySelectionSpan.innerHTML = \"×\";\n this.clearStickySelectionSpan.style.display = \"none\";\n this.clearStickySelectionSpan.addEventListener(\"click\", this);\n\n this.element.addEventListener(\"selection\", this);\n this.element.addEventListener(\"keyup\", this);\n\n this.acWrapper.insertBefore(this.clearStickySelectionSpan, this.element);\n this.acWrapper.insertBefore(this.stickySelectedSpan, this.element);\n if (this.options.selected) {\n this.addStickySelectItem(this.options.selected);\n }\n }\n\n createMultiSelect() {\n const multiSelectWrapper = document.createElement(\"div\");\n multiSelectWrapper.classList.add(\"multiselect\");\n\n const inputContainer = document.createElement(\"span\");\n inputContainer.classList.add(\"input-container\");\n\n multiSelectWrapper.appendChild(inputContainer);\n this.acWrapper.prepend(multiSelectWrapper);\n inputContainer.appendChild(this.element);\n\n this.element.addEventListener(\"selection\", this);\n multiSelectWrapper.addEventListener(\"click\", () => {\n this.element.focus();\n })\n\n if (this.options.selected) {\n this.options.selected.forEach((selection) => {\n this.addMultiSelectItem(selection);\n })\n }\n }\n\n createPromptDiv() {\n this.promptDiv = document.createElement(\"div\");\n this.promptDiv.classList.add(\"search-prompt\");\n this.promptDiv.style.display = \"none\";\n this.promptDiv.innerHTML = this.options.searchPromptText;\n this.acWrapper.appendChild(this.promptDiv);\n }\n}\n"],"names":["AutoComplete","el","options","this","element","stickySelectedSpan","clearStickySelectionSpan","stickyHiddenInput","promptDiv","thresholdTemp","threshold","Object","assign","name","placeholder","mode","searchPrompt","searchPromptText","selected","maxResults","dataMatchKeys","dataSource","dataFilter","delay","modifyResult","autocomplete","AutoCompleteJS","selector","_this","placeHolder","debounce","data","keys","src","query","_context","fetchResults","Promise","resolve","filter","list","resultsList","resultItem","item","value","events","input","blur","style","display","acWrapper","closest","ac","stopPropagation","event","addEventListener","createPromptDiv","createStickySelect","createMultiSelect","setInput","detail","selection","key","handleStickyEvents","handleMultiEvents","type","addMultiSelectItem","addStickySelectItem","target","removeStickySelection","includes","test","length","hiddenInput","document","createElement","prepend","innerHTML","chosen","classList","add","clearSelection","setAttribute","evt","_this2","querySelector","remove","parentElement","appendChild","multiSelectWrapper","inputContainer","insertBefore","createHiddenInput","_this3","focus","className","_this4","forEach"],"sourceRoot":""}