diff options
Diffstat (limited to 'src/lib/maps')
| -rw-r--r-- | src/lib/maps/components/PinPointMap.jsx | 21 | ||||
| -rw-r--r-- | src/lib/maps/stores/useMaps.js | 16 |
2 files changed, 33 insertions, 4 deletions
diff --git a/src/lib/maps/components/PinPointMap.jsx b/src/lib/maps/components/PinPointMap.jsx index 75ab1d59..753f65c7 100644 --- a/src/lib/maps/components/PinPointMap.jsx +++ b/src/lib/maps/components/PinPointMap.jsx @@ -33,6 +33,8 @@ const PinpointLocation = ({ getDefaultCenter, // ✅ ambil default center dari store } = useMaps(); + + const [tempAddress, setTempAddress] = useState(initialAddress || ''); const [tempPosition, setTempPosition] = useState( initialLatitude && initialLongitude @@ -42,6 +44,23 @@ const PinpointLocation = ({ : getDefaultCenter() // ✅ fallback aman untuk view ); + useEffect(() => { + if (initialLatitude && initialLongitude) { + const lat = parseFloat(initialLatitude); + const lng = parseFloat(initialLongitude); + + if (!isNaN(lat) && !isNaN(lng)) { + setTempPosition({ lat, lng }); + // kalau address belum ada, reverse geocode + if (!initialAddress) { + getAddress(lat, lng); + } else { + setTempAddress(initialAddress); + } + } + } + }, [initialLatitude, initialLongitude, initialAddress]); + const [markerIcon, setMarkerIcon] = useState(null); const autocompleteRef = useRef(null); @@ -68,7 +87,7 @@ const PinpointLocation = ({ const getAddress = async (lat, lng) => { try { const response = await fetch( - `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${process.env.NEXT_PUBLIC_GOOGLE_API_KEY}` + `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${process.env.NEXT_PUBLIC_GOOGLE_API_KEY}&language=id` ); const data = await response.json(); diff --git a/src/lib/maps/stores/useMaps.js b/src/lib/maps/stores/useMaps.js index f7636c24..b02c2ae3 100644 --- a/src/lib/maps/stores/useMaps.js +++ b/src/lib/maps/stores/useMaps.js @@ -29,10 +29,20 @@ export const useMaps = create((set, get) => ({ isPinned: () => { const p = get().selectedPosition; - if (!p || typeof p.lat !== 'number' || typeof p.lng !== 'number') return false; + if (!p) return false; + + // parse string -> number + const lat = parseFloat(p.lat); + const lng = parseFloat(p.lng); + + // cek kalau bukan angka valid + if (isNaN(lat) || isNaN(lng)) return false; + + // cek apakah sama dengan default const isDefault = - Math.abs(p.lat - DEFAULT_CENTER.lat) < 1e-6 && - Math.abs(p.lng - DEFAULT_CENTER.lng) < 1e-6; + Math.abs(lat - DEFAULT_CENTER.lat) < 1e-6 && + Math.abs(lng - DEFAULT_CENTER.lng) < 1e-6; + return !isDefault; }, |
