"use client"; import { useLocation } from "@/hook/useLocation"; import { use, useEffect, useState } from "react"; import "leaflet/dist/leaflet.css"; import { Circle, MapContainer, TileLayer, useMap } from "react-leaflet"; import { useMapCircleDraw } from "@/hook/mapDrawing"; function MapPan(props) { const map = useMap(); const [initialized, setInitialized] = useState(false); useEffect(() => { if (!initialized && props.center) { map.flyTo(props.center, props.zoom, { animate: false }); setInitialized(true) } }, [props.center]); return null; } function MapEventListener({onClick, onMouseMove}) { const map = useMap(); useEffect(() => { map.on('click', onClick); return () => { map.off('click', onClick); } }, [onClick]); useEffect(() => { map.on('mousemove', onMouseMove); return () => { map.off('mousemove', onMouseMove); } }); return null; } const DEFAULT_ZOOM = 17; export function CircularAreaPicker({area, setArea, ...props}) { const location = useLocation(Infinity); const {handleClick, handleMouseMove, center, radius} = useMapCircleDraw(area, setArea); return ( {center && radius && } ) } export const EditMode = { MIN: 0, MAX: 1 } export function ZonePicker({minArea, setMinArea, maxArea, setMaxArea,editMode, ...props}) { const location = useLocation(Infinity); const {handleClick: maxClick, handleMouseMove: maxHover, center: maxCenter, radius: maxRadius} = useMapCircleDraw(minArea, setMinArea); const {handleClick: minClick, handleMouseMove: minHover, center: minCenter, radius: minRadius} = useMapCircleDraw(maxArea, setMaxArea); function handleClick(e) { if (editMode == EditMode.MAX) { maxClick(e); } else { minClick(e); } } function handleMouseMove(e) { if (editMode == EditMode.MAX) { maxHover(e); } else { minHover(e); } } return ( {minCenter && minRadius && } {maxCenter && maxRadius && } ) }