import { useEffect, useState, useRef, useMemo, useCallback } from 'react' import { MapContainer, TileLayer, Marker, Popup, Circle } from 'react-leaflet' import { RoundToFixDecimals } from "lib/Utils" import TextLog from "components/TextLog" function DraggableMarker({ initialPos, addCircle }) { const [position, setPosition] = useState(initialPos) const markerRef = useRef(null) const eventHandlers = useMemo( () => ({ dragend() { const marker = markerRef.current const pos = marker.getLatLng() if (addCircle) addCircle(pos) if (marker) setPosition(pos) }, }), [addCircle], ) return ( {`lat: ${position.lat}`}
{`long: ${position.lng}`}
) } function MapInput({ supabase, clientRef, center, zoom }) { const [log, setLog] = useState(undefined) const [circles, setCircles] = useState([]) useEffect(() => { let newLog = `Ref: ${clientRef}\nReady to send location...` newLog += circles.map(item => { return `\nsent lat=${RoundToFixDecimals(item.lat)} long=${RoundToFixDecimals(item.lng)}` }) setLog(newLog) }, [circles, clientRef]) const onAddCircle = useCallback( async (pos) => { setCircles([...circles, pos]) // insert new location await supabase .from('locations') .insert([ { latitude: pos.lat, longitude: pos.lng, user_id: clientRef }, ]) }, [setCircles, circles, supabase, clientRef] ); function renderCircles() { return circles.map((item, index) => ) } return (
{renderCircles()}
) } export default MapInput