From a26cdb3d14b9f3040c6bddeed86f8bc16894b50e Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Thu, 23 Oct 2025 10:47:25 +0000 Subject: [PATCH] working on os api --- .../remote-assessment/AddressSearch.tsx | 73 +++++++++++++------ 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/src/app/portfolio/[slug]/remote-assessment/AddressSearch.tsx b/src/app/portfolio/[slug]/remote-assessment/AddressSearch.tsx index c7ec3b2..9c5bc7c 100644 --- a/src/app/portfolio/[slug]/remote-assessment/AddressSearch.tsx +++ b/src/app/portfolio/[slug]/remote-assessment/AddressSearch.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState, useEffect } from "react"; +import { useState } from "react"; import { Button } from "@/app/shadcn_components/ui/button"; import { Input } from "@/app/shadcn_components/ui/input"; import { Card } from "@/app/shadcn_components/ui/card"; @@ -14,6 +14,11 @@ import { } from "@/app/shadcn_components/ui/select"; import usePostcodeLookup from "./usePostcodeLookup"; +interface AddressItem { + uprn: string; + address: string; +} + export default function AddressSearch({ onAddressSelect, onPostcodeSelect, @@ -23,33 +28,50 @@ export default function AddressSearch({ onPostcodeSelect: (postcode: string) => void; postcode: string; }) { - const [addresses, setAddresses] = useState([]); + const [addresses, setAddresses] = useState([]); const [selectedAddress, setSelectedAddress] = useState(null); const [showDropdown, setShowDropdown] = useState(false); const [triggerSearch, setTriggerSearch] = useState(false); + const [loadingAddresses, setLoadingAddresses] = useState(false); + const [addressError, setAddressError] = useState(null); const { data, isFetching, refetch } = usePostcodeLookup( postcode, triggerSearch ); - // When postcode data returns successfully (status 200), populate mock addresses - useEffect(() => { - if (data && data.status === 200 && data.result) { - setAddresses([ - `10 Downing Street, London, ${data.result.postcode}`, - `11 Downing Street, London, ${data.result.postcode}`, - `12 Downing Street, London, ${data.result.postcode}`, - ]); - setShowDropdown(true); - } - }, [data]); - async function handleSearch() { if (!postcode.trim()) return; setTriggerSearch(true); - await refetch(); - setTriggerSearch(false); // Reset trigger after refetch + const validation = await refetch(); + setTriggerSearch(false); + + // Only continue if postcode is valid + if (!validation.data || validation.data.status !== 200) return; + + // Fetch addresses from backend + setLoadingAddresses(true); + setAddressError(null); + try { + const res = await fetch( + `/api/postcode/${encodeURIComponent(postcode)}/addresses` + ); + const json = await res.json(); + + if (!res.ok) { + setAddressError(json.error || "Unable to retrieve addresses"); + setShowDropdown(false); + } else if (json.results?.length) { + setAddresses(json.results); + setShowDropdown(true); + } else { + setAddressError("No addresses found for this postcode"); + } + } catch (err: any) { + setAddressError("There was an issue contacting the address service."); + } finally { + setLoadingAddresses(false); + } } function handleSelectAddress(value: string) { @@ -67,6 +89,8 @@ export default function AddressSearch({ const showInvalid = data && data.status === 404; const showServerError = data && data.status === 500; + const isLoading = isFetching || loadingAddresses; + return (

@@ -83,15 +107,15 @@ export default function AddressSearch({ /> )} - {/* Validation + Error feedback */} + {/* Validation or server errors */} {showInvalid && (

Invalid postcode — please check and try again. @@ -102,8 +126,11 @@ export default function AddressSearch({ The postcode service is currently unavailable. Please try again later.

)} + {addressError && ( +

{addressError}

+ )} - {/* Address Dropdown */} + {/* Address dropdown */} {showDropdown && addresses.length > 0 && (
)} - {/* Selected Address Display */} + {/* Selected address display */} {selectedAddress && !showDropdown && (