diff --git a/src/api.js b/src/api.js index f67a9d5..e8f2189 100644 --- a/src/api.js +++ b/src/api.js @@ -1,3 +1,5 @@ +import { useStore } from './store' + const GEOCODE_URL = '/api/geocode' const VALHALLA_URL = '/valhalla/route' const VALHALLA_OPTIMIZED_URL = '/valhalla/optimized_route' @@ -10,11 +12,19 @@ const VALHALLA_HEIGHT_URL = '/valhalla/height' * @param {AbortSignal} signal * @returns {Promise<{query, results, count}>} */ -export async function searchGeocode(query, limit = 6, signal, viewport = null) { +export async function searchGeocode(query, limit = 6, signal) { const params = new URLSearchParams({ q: query, limit: String(limit) }) - if (viewport?.lat != null) params.set('lat', String(viewport.lat)) - if (viewport?.lon != null) params.set('lon', String(viewport.lon)) - if (viewport?.zoom != null) params.set('zoom', String(Math.round(viewport.zoom))) + // Read current mapCenter directly from store (non-reactive, correct for non-component code) + const mapCenter = useStore.getState().mapCenter + if (mapCenter?.lat != null && Number.isFinite(mapCenter.lat)) { + params.set('lat', String(mapCenter.lat)) + } + if (mapCenter?.lon != null && Number.isFinite(mapCenter.lon)) { + params.set('lon', String(mapCenter.lon)) + } + if (mapCenter?.zoom != null && Number.isFinite(mapCenter.zoom)) { + params.set('zoom', String(Math.round(mapCenter.zoom))) + } const resp = await fetch(`${GEOCODE_URL}?${params}`, { signal, timeout: 5000 }) if (!resp.ok) throw new Error(`Geocode error: ${resp.status}`) return resp.json() diff --git a/src/components/SearchBar.jsx b/src/components/SearchBar.jsx index 4b7a454..2e47bd9 100644 --- a/src/components/SearchBar.jsx +++ b/src/components/SearchBar.jsx @@ -53,7 +53,7 @@ const SearchBar = forwardRef(function SearchBar(_, ref) { const setClickMarker = useStore((s) => s.setClickMarker) const setEditingContact = useStore((s) => s.setEditingContact) const clearPendingDestination = useStore((s) => s.clearPendingDestination) - const mapCenter = useStore((s) => s.mapCenter) + // mapCenter now read directly in api.js useEffect(() => { inputRef.current?.focus() @@ -100,7 +100,7 @@ const SearchBar = forwardRef(function SearchBar(_, ref) { setSearchLoading(true) try { - const data = await searchGeocode(q.trim(), 6, ctrl.signal, mapCenter) + const data = await searchGeocode(q.trim(), 6, ctrl.signal) const combined = [...contactResults, ...(data.results || [])] setResults(combined) setAutocompleteOpen(combined.length > 0)