import React, { useState, useEffect } from "react"; import { getDeliveryAccessories } from "../api.jsx"; import { useParams } from "react-router-dom"; import { getCoordinates } from "../geocoder.jsx"; import { MapContainer, TileLayer, Marker, Popup, Polyline, } from "react-leaflet"; import polyline from "@mapbox/polyline"; import "./DeliveryOrderDetails.css"; const DeliveryOrderDetails = () => { const { id: deliveryOrderId } = useParams(); const [deliveryAccessories, setDeliveryAccessories] = useState([]); const [loading, setLoading] = useState(true); const [coordinates, setCoordinates] = useState([]); const [route, setRoute] = useState([]); useEffect(() => { fetchDeliveryAccessories(); }, [deliveryOrderId]); const fetchDeliveryAccessories = async () => { try { const accessories = await getDeliveryAccessories(deliveryOrderId); setDeliveryAccessories(accessories); const coords = await Promise.all( accessories.map(async (accessory) => { const coords = await getCoordinates(accessory.city_name); return { city: accessory.city_name, ...coords }; }) ); setCoordinates(coords); if (coords.length > 1) { const waypoints = coords .map(({ longitude, latitude }) => `${longitude},${latitude}`) .join(";"); const routeUrl = `https://router.project-osrm.org/route/v1/driving/${waypoints}?overview=full`; const response = await fetch(routeUrl); const data = await response.json(); if (data.routes && data.routes.length > 0) { const geometry = data.routes[0].geometry; const decodedRoute = polyline.decode(geometry); setRoute(decodedRoute); } } } catch (error) { console.error("Ошибка при загрузке доставок:", error); } finally { setLoading(false); } }; return (
{loading ? (
Загрузка...
) : (
    {deliveryAccessories.map((accessory) => { const coord = coordinates.find( (c) => c.city === accessory.city_name ); return (
  1. Доставка: {accessory.name} (Город: {accessory.city_name}, Координаты:{" "} {coord ? `${coord.latitude}, ${coord.longitude}` : "Не найдены"} )
  2. ); })}
{coordinates.length > 0 && (
{coordinates.map((coord, index) => ( {coord.city} ))} {route.length > 0 && ( )}
)}
)}
); }; export default DeliveryOrderDetails;