import { Map, Overlay } from "pigeon-maps" import pointer from '../images/pointer.svg' import {Link} from "react-router-dom"; import LoaderPortal from '../components/LoaderPortal' import { useState, useEffect } from "react"; import {ClusterService} from '../services/api' import { invokeWebApiWrapperAsync } from "../components/factory" const calcViewParams = (clusters) => { if ((!clusters) || clusters.length === 0) return {center:[60.81226, 70.0562], zoom: 5} const center = clusters.reduce((sum, cluster) => { sum[0] += (cluster.latitude / clusters.length) sum[1] += (cluster.longitude / clusters.length) return sum }, [0, 0]) const maxDeg = clusters.reduce((max, cluster) => { const dLatitude = Math.abs(center[0] - cluster.latitude) const dLongitude = Math.abs(center[1] - cluster.longitude) const d = dLatitude > dLongitude ? dLatitude : dLongitude return d > max ? d : max }, 0) // zoom max = 20 (too close) // zoom min = 1 (mega far) // 4 - full Russia (161.6 deg) // 13.5 - Khanty-Mansiysk let zoom = 5 + 5/maxDeg zoom = zoom < 5 ? 5: zoom zoom = zoom > 15 ? 15: zoom return {center, zoom} } export default function Deposit() { const [clustersData, setClustersData] = useState([]) const [showLoader, setShowLoader] = useState(false) useEffect(()=>invokeWebApiWrapperAsync(async()=>{ const data = await ClusterService.getClusters() setClustersData(data) }, setShowLoader, `Не удалось загрузить список кустов`), []) const viewParams = calcViewParams(clustersData) const markers = clustersData.map(cluster => + {cluster.caption} ) return (
{markers}
); }