{"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 = \"&times;\";\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 = \"&times;\";\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":""}