From 2931de97ef8fc92b21dec72def841cb337b1d622 Mon Sep 17 00:00:00 2001 From: andrei Date: Sat, 5 Oct 2024 17:19:36 +0500 Subject: [PATCH] ._. --- src/pages/DeliveryOrderDetails.jsx | 80 ++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 15 deletions(-) diff --git a/src/pages/DeliveryOrderDetails.jsx b/src/pages/DeliveryOrderDetails.jsx index 44f5540..a7129f5 100644 --- a/src/pages/DeliveryOrderDetails.jsx +++ b/src/pages/DeliveryOrderDetails.jsx @@ -2,12 +2,21 @@ 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"; 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(); @@ -25,6 +34,22 @@ const DeliveryOrderDetails = () => { }) ); 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 { @@ -39,21 +64,46 @@ const DeliveryOrderDetails = () => { Загрузка доставок... ) : ( - +
+ + {coordinates.length > 0 && ( + + + {coordinates.map((coord, index) => ( + + {coord.city} + + ))} + {route.length > 0 && } + + )} +
)} );