import {Controller} from '@hotwired/stimulus' import accessibleAutocomplete from 'accessible-autocomplete' import 'accessible-autocomplete/dist/accessible-autocomplete.min.css' import {searchableName} from "../modules/search"; const options = [] const fetchOptions = async (query) => { const response = await fetch(`/address_options?query=${query}`) const data = await response.json() console.log(data) return data } const fetchAndPopulateSearchResults = async (query, populateResults, populateOptions, selectEl) => { if (/\S/.test(query)) { const results = await fetchOptions(query) console.log(results) // address and uprn keys returned per result populateOptions(results, selectEl) populateResults(Object.values(results).map((o) => o.address)) } } const populateOptions = (results, selectEl) => { selectEl.innerHTML = '' results.forEach((result) => { const option = document.createElement('option') option.value = result.uprn option.innerHTML = result.address option.setAttribute('address', result.address) selectEl.appendChild(option) options.push(option) }) } export default class extends Controller { connect () { const selectEl = this.element accessibleAutocomplete.enhanceSelectElement({ defaultValue: '', selectElement: selectEl, minLength: 1, source: (query, populateResults) => { fetchAndPopulateSearchResults(query, populateResults, populateOptions, selectEl) }, autoselect: true, showNoOptionsFound: true, placeholder: 'Start typing to search', templates: { suggestion: (value) => value }, onConfirm: (val) => { const selectedResult = Array.from(selectEl.options).find(option => option.address === val) if (selectedResult) { selectedResult.selected = true } } }) } }