Browse Source

Hide no result found message just before results are populated

CLDC-3787-Autocomplete-address-search
Manny Dinssa 1 week ago
parent
commit
a192ab3459
  1. 18
      app/frontend/controllers/address_search_controller.js

18
app/frontend/controllers/address_search_controller.js

@ -3,10 +3,11 @@ import accessibleAutocomplete from 'accessible-autocomplete'
import 'accessible-autocomplete/dist/accessible-autocomplete.min.css' import 'accessible-autocomplete/dist/accessible-autocomplete.min.css'
const options = [] const options = []
let showNoResultsMessage = false
const fetchOptions = async (query, searchUrl) => { const fetchOptions = async (query, searchUrl) => {
if (query.length < 3) { if (query.length < 2) {
throw new Error('Query must be at least 3 characters long.') throw new Error('Query must be at least 2 characters long.')
} }
try { try {
const response = await fetch(`${searchUrl}?query=${encodeURIComponent(query.trim())}`) const response = await fetch(`${searchUrl}?query=${encodeURIComponent(query.trim())}`)
@ -21,13 +22,16 @@ const fetchAndPopulateSearchResults = async (query, populateResults, searchUrl,
try { try {
const results = await fetchOptions(query, searchUrl) const results = await fetchOptions(query, searchUrl)
if (results.length === 0) { if (results.length === 0) {
showNoResultsMessage = true
populateOptions([], selectEl) populateOptions([], selectEl)
populateResults([]) populateResults([])
} else { } else {
showNoResultsMessage = false
populateOptions(results, selectEl) populateOptions(results, selectEl)
populateResults(Object.values(results).map((o) => `${o.text} (${o.value})`)) populateResults(Object.values(results).map((o) => `${o.text} (${o.value})`))
} }
} catch (error) { } catch (error) {
showNoResultsMessage = true
populateOptions([], selectEl) populateOptions([], selectEl)
populateResults([]) populateResults([])
} }
@ -54,8 +58,14 @@ export default class extends Controller {
accessibleAutocomplete.enhanceSelectElement({ accessibleAutocomplete.enhanceSelectElement({
defaultValue: '', defaultValue: '',
selectElement: selectEl, selectElement: selectEl,
minLength: 1, minLength: 2,
tNoResults: () => { return 'No address found' }, tNoResults: () => {
if (showNoResultsMessage) {
return 'No address found'
} else {
return null
}
},
source: (query, populateResults) => { source: (query, populateResults) => {
fetchAndPopulateSearchResults(query, populateResults, searchUrl, populateOptions, selectEl) fetchAndPopulateSearchResults(query, populateResults, searchUrl, populateOptions, selectEl)
}, },

Loading…
Cancel
Save