import { Button, Paper, TextField, Select, MenuItem, FormControl, InputLabel, Box, } from "@mui/material"; import { observer } from "mobx-react-lite"; import { ArrowLeft, Save } from "lucide-react"; import { Loader2 } from "lucide-react"; import { useNavigate, useParams } from "react-router-dom"; import { toast } from "react-toastify"; import { stationsStore, languageStore, cityStore, LoadingSpinner, } from "@shared"; import { useEffect, useState } from "react"; import { LanguageSwitcher } from "@widgets"; import { LinkedSights } from "../LinkedSights"; import { SaveWithoutCityAgree } from "@widgets"; export const StationEditPage = observer(() => { const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const [isLoadingData, setIsLoadingData] = useState(true); const { language } = languageStore; const { id } = useParams(); const { editStationData, getEditStation, setEditCommonData, editStation, setLanguageEditStationData, } = stationsStore; const { cities, getCities } = cityStore; const [coordinates, setCoordinates] = useState(""); const [isSaveWarningOpen, setIsSaveWarningOpen] = useState(false); useEffect(() => { languageStore.setLanguage("ru"); }, []); useEffect(() => { if ( editStationData.common.latitude !== 0 || editStationData.common.longitude !== 0 ) { setCoordinates( `${editStationData.common.latitude}, ${editStationData.common.longitude}` ); } }, [editStationData.common.latitude, editStationData.common.longitude]); const executeEdit = async () => { try { setIsLoading(true); await editStation(Number(id)); toast.success("Остановка успешно обновлена"); } catch (error) { console.error("Error updating station:", error); toast.error("Ошибка при обновлении станции"); } finally { setIsLoading(false); } }; const handleEdit = async () => { const isCityMissing = !editStationData.common.city_id; const isNameMissing = !editStationData.ru.name || !editStationData.en.name || !editStationData.zh.name; if (isCityMissing || isNameMissing) { setIsSaveWarningOpen(true); return; } await executeEdit(); }; const handleConfirmEdit = async () => { setIsSaveWarningOpen(false); await executeEdit(); }; const handleCancelEdit = () => { setIsSaveWarningOpen(false); }; useEffect(() => { const fetchAndSetStationData = async () => { if (!id) { setIsLoadingData(false); return; } setIsLoadingData(true); try { const stationId = Number(id); await getEditStation(stationId); await getCities("ru"); await getCities("en"); await getCities("zh"); } finally { setIsLoadingData(false); } }; fetchAndSetStationData(); }, [id]); if (isLoadingData) { return ( ); } return (

{editStationData.ru.name}

setLanguageEditStationData(language, { name: e.target.value, }) } /> Прямой/обратный маршрут setEditCommonData({ description: e.target.value, }) } /> {/* setLanguageEditStationData(language, { address: e.target.value, }) } /> */} { const newValue = e.target.value; setCoordinates(newValue); const input = newValue.replace(/,/g, " ").trim(); const [latStr, lonStr] = input.split(/\s+/); const lat = parseFloat(latStr); const lon = parseFloat(lonStr); const isValidLat = !isNaN(lat); const isValidLon = !isNaN(lon); if (isValidLat && isValidLon) { setEditCommonData({ latitude: lat, longitude: lon, }); } else { setEditCommonData({ latitude: 0, longitude: 0, }); } }} placeholder="Введите координаты в формате: широта долгота (можно использовать запятые или пробелы)" /> Город {id && ( )}
{/* ИНТЕГРИРОВАННОЕ ПРЕДУПРЕЖДАЮЩЕЕ ОКНО */} {isSaveWarningOpen && ( )}
); });