import { useEffect, useState } from "react"; import { GreenButton } from "../util/button"; import { TextInput } from "../util/textInput"; import useAdmin from "@/hook/useAdmin"; import useLocation from "@/hook/useLocation"; import "leaflet/dist/leaflet.css"; import { MapContainer, TileLayer, Polyline, Polygon, CircleMarker } from "react-leaflet"; import useMapPolygonDraw from "@/hook/useMapPolygonDraw"; import { MapPan, MapEventListener } from "./mapUtils"; const DEFAULT_ZOOM = 14; function PolygonDrawings({ polygons, addPolygon, removePolygon }) { const { currentPolygon, highlightNodes, handleLeftClick, handleRightClick, handleMouseMove } = useMapPolygonDraw(polygons, addPolygon, removePolygon); const nodeSize = 5; // px const lineThickness = 3; // px function DrawNode({pos, color}) { return ( ); } function DrawLine({pos1, pos2, color}) { return ( ); } function DrawUnfinishedPolygon({polygon}) { const length = polygon.length; if (length > 0) { return (
{polygon.map((_, i) => { if (i < length-1) { return ; } else { return null; } })}
); } } function DrawPolygon({polygon}) { const length = polygon.length; if (length > 2) { return ( ); } } return (
{polygons.map((polygon, i) => )} {highlightNodes.map((node, i) => )}
); } function PolygonZonePicker({ polygons, addPolygon, removePolygon, ...props }) { const location = useLocation(Infinity); return (
); } export default function PolygonZoneMap() { const defaultDuration = 10; const [polygons, setPolygons] = useState([]); const [durations, setDurations] = useState([]); const {zoneSettings, changeZoneSettings} = useAdmin(); useEffect(() => { if (zoneSettings) { setPolygons(zoneSettings.polygons); setDurations(zoneSettings.durations); } }, [zoneSettings]); function addPolygon(polygon) { // Polygons setPolygons([...polygons, polygon]); // Durations setDurations([...durations, defaultDuration]); } function removePolygon(i) { // Polygons const newPolygons = [...polygons]; newPolygons.splice(i, 1); setPolygons(newPolygons); // Durations const newDurations = [...durations]; newDurations.splice(i, 1); setDurations(newDurations); } function updateDuration(i, duration) { const newDurations = [...durations]; newDurations[i] = duration; setDurations(newDurations); } function handleSettingsSubmit() { const newSettings = {polygons: polygons, durations: durations}; changeZoneSettings(newSettings); } return (

Edit zones

    {durations.map((duration, i) => (
  • Zone {i+1}

    updateDuration(i, e.target.value)}/>
  • ))}
Apply
); }