import { FiCrosshair } from "react-icons/fi"; import { useMap } from "react-map-gl"; import { lineString, bbox } from "@turf/turf"; import { MagnifyingGlassMinusIcon, MagnifyingGlassPlusIcon, ShareIcon } from "@heroicons/react/24/outline"; import { useDevice } from "@app/core/providers/useDevice.js"; import { useEffect } from "react"; export const MapControlls = (): JSX.Element => { const { current: map } = useMap(); const { nodes } = useDevice(); const getBBox = () => { const nodesWithPosition = nodes.filter((n) => n.data.position?.latitudeI); if (nodesWithPosition.length > 1) { const line = lineString( nodesWithPosition.map((n) => [ (n.data.position?.latitudeI ?? 0) / 1e7, (n.data.position?.longitudeI ?? 0) / 1e7 ]) ); const bounds = bbox(line); const center = map?.cameraForBounds([ [bounds[1], bounds[0]], [bounds[3], bounds[2]] ]); if (center) { map?.easeTo(center); } } else if (nodesWithPosition.length === 1) { map?.easeTo({ zoom: 12, center: [ (nodesWithPosition[0].data.position?.longitudeI ?? 0) / 1e7, (nodesWithPosition[0].data.position?.latitudeI ?? 0) / 1e7 ] }); } }; useEffect(() => { getBBox(); }, []) return (
{ map?.zoomIn(); }} >
{ map?.zoomOut(); }} >
{}} >
getBBox()} >
); };