"use client"; import { useLocation } from "@/hook/useLocation"; import { useEffect, useState } from "react"; import "leaflet/dist/leaflet.css"; import { Circle, MapContainer, Marker, Popup, TileLayer, useMap } from "react-leaflet"; import { useMapCircleDraw } from "@/hook/mapDrawing"; import useAdmin from "@/hook/useAdmin"; 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, markerPosition, ...props }) { const location = useLocation(Infinity); const { handleClick, handleMouseMove, center, radius } = useMapCircleDraw(area, setArea); return ( {center && radius && } {markerPosition && } ) } export const EditMode = { MIN: 0, MAX: 1 } export function ZonePicker({ minZone, setMinZone, maxZone, setMaxZone, editMode, ...props }) { const location = useLocation(Infinity); const { handleClick: maxClick, handleMouseMove: maxHover, center: maxCenter, radius: maxRadius } = useMapCircleDraw(minZone, setMinZone); const { handleClick: minClick, handleMouseMove: minHover, center: minCenter, radius: minRadius } = useMapCircleDraw(maxZone, setMaxZone); 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 && } ) } export function LiveMap() { const location = useLocation(Infinity); const { zone, zoneExtremities, teams, getTeamName } = useAdmin(); return ( {zone && } {zoneExtremities && } {zoneExtremities && } {teams.map((team) => team.currentLocation && !team.captured && {team.name}

Chasing : {getTeamName(team.chasing)}

Chased by : {getTeamName(team.chased)}

)}
) }