import React, { useState, useRef, ChangeEvent, useEffect } from 'react'; interface AddressSuggestionsProps { address: string; setAddress: (address: string) => void; postcode: string; setPostcode: (postcode: string) => void; setCity: (city: string) => void; } const fetchAddressSuggestions = async (query: string): Promise => { try { const response = await fetch( `https://api.dataforsyningen.dk/adgangsadresser/autocomplete?q=${encodeURIComponent(query)}&fuzzy=true` ); const data = await response.json(); return data; } catch (error) { console.error('Error fetching address suggestions:', error); return []; } }; const fetchCity = async (postcode: string): Promise => { try { const response = await fetch(`https://api.dataforsyningen.dk/postnumre?nr=${postcode}`); const data = await response.json(); if (data.length > 0) { return data[0].navn; // Return the city name } return null; } catch (error) { console.error('Error fetching city:', error); return null; } }; const AddressSuggestions: React.FC = ({ address, setAddress, postcode, setPostcode, setCity }) => { const [addressSuggestions, setAddressSuggestions] = useState([]); const [showSuggestions, setShowSuggestions] = useState(false); const suggestionListRef = useRef(null); const handleAddressChange = async (e: ChangeEvent) => { const newValue = e.target.value; setAddress(newValue); if (newValue) { const suggestions = await fetchAddressSuggestions(newValue); setAddressSuggestions(suggestions); setShowSuggestions(true); } else { setAddressSuggestions([]); setShowSuggestions(false); } }; const handleAddressSelect = async (selectedAddress: any) => { const adgangsadresse = selectedAddress.adgangsadresse; if (adgangsadresse) { const street = [adgangsadresse.vejnavn, adgangsadresse.husnr].filter(Boolean).join(' '); const postcode = adgangsadresse.postnr || ''; setAddress(street); setPostcode(postcode); setAddressSuggestions([]); setShowSuggestions(false); // Fetch and set the city based on the selected postcode const cityName = await fetchCity(postcode); if (cityName) { setCity(cityName); } } }; const handleClickOutside = (event: MouseEvent) => { if (suggestionListRef.current && !suggestionListRef.current.contains(event.target as Node)) { setShowSuggestions(false); } }; useEffect(() => { document.addEventListener('click', handleClickOutside); return () => { document.removeEventListener('click', handleClickOutside); }; }, []); useEffect(() => { const fetchAndSetCity = async () => { if (postcode) { const cityName = await fetchCity(postcode); if (cityName) { setCity(cityName); } } }; fetchAndSetCity(); }, [postcode, setCity]); return (
{showSuggestions && addressSuggestions.length > 0 && (
    {addressSuggestions.map((suggestion, index) => { const adgangsadresse = suggestion.adgangsadresse; if (!adgangsadresse) return null; const vejnavn = adgangsadresse.vejnavn || ''; const husnr = adgangsadresse.husnr || ''; const postnr = adgangsadresse.postnr || ''; return (
  • handleAddressSelect(suggestion)} className="p-2 hover:bg-gray-100 cursor-pointer" > {vejnavn} {husnr}, {postnr}
  • ); })}
)}
); }; export default AddressSuggestions;