Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
2.0 KiB

2 weeks ago
import { Controller } from '@hotwired/stimulus'
1 month ago
import accessibleAutocomplete from 'accessible-autocomplete'
import 'accessible-autocomplete/dist/accessible-autocomplete.min.css'
const options = []
1 week ago
const fetchOptions = async (query, searchUrl) => {
const response = await fetch(`${searchUrl}?query=${encodeURIComponent(query)}`)
1 month ago
const data = await response.json()
console.log(data)
1 week ago
console.log("Test 004")
1 month ago
return data
}
1 week ago
const fetchAndPopulateSearchResults = async (query, populateResults, searchUrl, populateOptions, selectEl) => {
1 month ago
if (/\S/.test(query)) {
1 week ago
const results = await fetchOptions(query, searchUrl)
1 month ago
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 () {
1 week ago
const searchUrl = JSON.parse(this.element.dataset.info).search_url
1 month ago
const selectEl = this.element
accessibleAutocomplete.enhanceSelectElement({
defaultValue: '',
selectElement: selectEl,
minLength: 1,
source: (query, populateResults) => {
1 week ago
fetchAndPopulateSearchResults(query, populateResults, searchUrl, populateOptions, selectEl)
1 month ago
},
autoselect: true,
showNoOptionsFound: true,
placeholder: 'Start typing to search',
1 month ago
templates: { suggestion: (value) => value },
onConfirm: (val) => {
1 week ago
console.log({val})
const selectedResult = Array.from(selectEl.options).find(option => option.text === val)
1 month ago
1 week ago
console.log({selectedResult})
1 month ago
if (selectedResult) {
selectedResult.selected = true
}
}
})
}
}