import React, { useCallback, useEffect, useMemo, useState } from "react" import Style from "./BoxMap.module.css" import BoxFull from "./BoxFull" import { MapContainer, TileLayer } from "react-leaflet" import Coordinates from "../../objects/Coordinates" export default function BoxMap( { mapViewHook, button, children, ...props }) { const [map, setMap] = useState(null) const onMapMove = useCallback( () => mapViewHook.setCenter(Coordinates.fromLatLng(map.getCenter())), [mapViewHook, map], ) const onMapZoom = useCallback( () => mapViewHook.setZoom(map.getZoom()), [mapViewHook, map], ) const mapContainer = useMemo( () => ( {children}
{button}
), [mapViewHook], ) useEffect( () => { if(map === null) { return } map.on("move", onMapMove) map.on("zoom", onMapZoom) return () => { map.off("move", onMapMove) map.off("zoom", onMapZoom) } }, [map, mapViewHook], ) return ( {mapContainer} ) }