class LocalitySearch { constructor(localitySelected, containerId) { this.template = `
Recherche en cours...
'; searchResults.classList.remove('hidden'); searchLocation(query) .then(data => { if (data && data.length > 0) { this.displaySearchResults(data, searchResults); } else { searchResults.innerHTML = 'Aucun résultat trouvé.
'; } }) .catch(error => { console.error('Erreur lors de la recherche:', error); searchResults.innerHTML = 'Erreur lors de la recherche. Veuillez réessayer.
'; }); } displaySearchResults(results, resultsContainer) { resultsContainer.innerHTML = ''; const resultList = document.createElement('ul'); resultList.className = 'localitySearchResultsList'; results.forEach(result => { const resultItem = document.createElement('li'); resultItem.className = 'localitySearchResultItem'; resultItem.textContent = result.properties.city + (result.properties.postcode ? ` (${result.properties.postcode})` : ''); resultItem.addEventListener('click', () => { this.selectSearchResult(result); resultsContainer.classList.add('hidden'); }); resultList.appendChild(resultItem); }); resultsContainer.appendChild(resultList); } selectSearchResult(result) { try { const { geometry, osm_type, osm_id } = result; if (Array.isArray(geometry.coordinates)) { const geoJSON = { type: 'Feature', geometry, properties: { name: result.display_name, source: 'search' } }; this.localitySelected(geoJSON); } } catch (error) { console.error("Erreur lors de la sélection du résultat", error); } } }