This commit is contained in:
Andras Schmelczer 2026-02-15 22:39:49 +00:00
parent 03445188ea
commit 524580eb25
102 changed files with 36625 additions and 1295 deletions

View file

@ -10,9 +10,9 @@ export function looksLikePostcode(s: string) {
export type SearchResult =
| { type: 'postcode'; label: string }
| { type: 'place'; name: string; place_type: string; lat: number; lon: number; city?: string };
| { type: 'place'; name: string; slug: string; place_type: string; lat: number; lon: number; city?: string };
export function useLocationSearch() {
export function useLocationSearch(mode?: string) {
const [query, setQuery] = useState('');
const [results, setResults] = useState<SearchResult[]>([]);
const [activeIndex, setActiveIndex] = useState(-1);
@ -34,7 +34,7 @@ export function useLocationSearch() {
return;
}
if (looksLikePostcode(trimmed)) {
if (!mode && looksLikePostcode(trimmed)) {
setResults([{ type: 'postcode', label: trimmed.toUpperCase() }]);
setOpen(true);
return;
@ -51,6 +51,7 @@ export function useLocationSearch() {
abortRef.current = controller;
try {
const params = new URLSearchParams({ q: trimmed, limit: '7' });
if (mode) params.set('mode', mode);
const res = await fetch(
`/api/places?${params}`,
authHeaders({ signal: controller.signal }),
@ -59,7 +60,12 @@ export function useLocationSearch() {
const json: { places: PlaceResult[] } = await res.json();
const placeResults: SearchResult[] = json.places.map((p) => ({
type: 'place' as const,
...p,
name: p.name,
slug: p.slug,
place_type: p.place_type,
lat: p.lat,
lon: p.lon,
city: p.city,
}));
setResults(placeResults);
setOpen(placeResults.length > 0);
@ -67,7 +73,7 @@ export function useLocationSearch() {
logNonAbortError('places search', err);
}
}, 200);
}, []);
}, [mode]);
const close = useCallback(() => setOpen(false), []);