import * as React from 'react' import * as L from 'leaflet' import { useMap, useMapEvents } from 'react-leaflet' import 'leaflet.locatecontrol' import 'leaflet.locatecontrol/dist/L.Control.Locate.css' import { useEffect, useRef, useState } from 'react' // Converts leaflet.locatecontrol to a React Component export const LocateControl = () => { const map = useMap(); // prevent react18 from calling useEffect twice const init = useRef(false) const [lc, setLc] = useState(null); const [active, setActive] = useState(false); const [loading, setLoading] = useState(false); useEffect(() => { if (!init.current) { //@ts-ignore setLc(L.control.locate().addTo(map)); init.current = true; } }, []) useMapEvents({ locationfound: () => { setLoading(false); setActive(true); }, }) return (<>
{ if (active) { lc.stop(); setActive(false); } else { lc.start(); setLoading(true); } }}>{loading ? : }
) }