From 514b773a905dbbe9e40d7ef7a9c9b7cae1622f61 Mon Sep 17 00:00:00 2001 From: andrei Date: Sat, 5 Oct 2024 19:17:19 +0500 Subject: [PATCH] ._. --- src/pages/Cities.jsx | 97 ++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 31 deletions(-) diff --git a/src/pages/Cities.jsx b/src/pages/Cities.jsx index 866a175..7c2b14f 100644 --- a/src/pages/Cities.jsx +++ b/src/pages/Cities.jsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react"; import SelectionDialog from "../components/SelectionDialog.jsx"; import { useNavigate } from "react-router-dom"; import { getAuthToken } from "../api.jsx"; +import { getCoordinates } from "../geocoder.jsx"; import { getCities, createCity, @@ -22,6 +23,8 @@ const Cities = () => { const [editingCityId, setEditingCityId] = useState(null); const [error, setError] = useState(null); const [showDistrictDialog, setShowDistrictDialog] = useState(false); + const [isGeocodeAvailable, setIsGeocodeAvailable] = useState(false); + const [isFetchingCoordinates, setIsFetchingCoordinates] = useState(false); const navigate = useNavigate(); useEffect(() => { @@ -50,6 +53,28 @@ const Cities = () => { const handleInputChange = (e) => { const { name, value } = e.target; setNewCity({ ...newCity, [name]: value }); + if (name === "name") { + setIsGeocodeAvailable(value.trim() !== ""); + } + }; + + const handleGeocode = async () => { + try { + const { name } = newCity; + const coordinates = await getCoordinates(name); + if (coordinates) { + setNewCity({ + ...newCity, + x_coordinate: coordinates.latitude, + y_coordinate: coordinates.longitude, + }); + } else { + setError("Не удалось найти координаты для данного города."); + } + } catch (error) { + console.error("Ошибка при получении координат:", error); + setError("Ошибка при попытке получить координаты."); + } }; const handleSubmit = async (e) => { @@ -86,6 +111,7 @@ const Cities = () => { x_coordinate: city.x_coordinate, y_coordinate: city.y_coordinate, }); + setIsGeocodeAvailable(true); setEditingCityId(city.id); }; @@ -106,6 +132,7 @@ const Cities = () => { y_coordinate: "", }); setEditingCityId(null); + setIsGeocodeAvailable(false); }; const handleDialogSelectDistrict = (selectedItem) => { @@ -138,32 +165,6 @@ const Cities = () => { /> -
- - -
- -
- - -
-
{
-
- +
+ {error && (
{error} @@ -212,9 +247,9 @@ const Cities = () => { Название - Координата X - Координата Y Федеральный округ + X координата + Y координата Действия @@ -222,9 +257,9 @@ const Cities = () => { {cities.map((city) => ( {city.name} + {city.federal_district_name} {city.x_coordinate} {city.y_coordinate} - {city.federal_district_name}