import { useEffect, useState, useRef, useMemo, useCallback } from 'react' import { MapContainer, TileLayer, Marker, Popup, Circle } from 'react-leaflet' import { RoundToFixDecimals } from 'lib/utils' import { supabase } from 'lib/api' 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({ 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