import { Button, Paper, TextField, Select, MenuItem, FormControl, InputLabel, } from "@mui/material"; import { observer } from "mobx-react-lite"; import { ArrowLeft, Save } from "lucide-react"; import { Loader2 } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { toast } from "react-toastify"; import { stationsStore, languageStore, cityStore, useSelectedCity, } from "@shared"; import { useEffect, useState } from "react"; import { LanguageSwitcher } from "@widgets"; import { SaveWithoutCityAgree } from "@widgets"; export const StationCreatePage = observer(() => { const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const { language } = languageStore; const { createStationData, setCreateCommonData, createStation, setLanguageCreateStationData, } = stationsStore; const { cities, getCities } = cityStore; const { selectedCityId, selectedCity } = useSelectedCity(); const [coordinates, setCoordinates] = useState(""); // НОВОЕ СОСТОЯНИЕ ДЛЯ ПРЕДУПРЕЖДАЮЩЕГО ОКНА const [isSaveWarningOpen, setIsSaveWarningOpen] = useState(false); useEffect(() => { if ( createStationData.common.latitude !== 0 || createStationData.common.longitude !== 0 ) { setCoordinates( `${createStationData.common.latitude}, ${createStationData.common.longitude}` ); } }, [createStationData.common.latitude, createStationData.common.longitude]); // НОВАЯ ФУНКЦИЯ: Фактическое создание (вызывается после подтверждения) const executeCreate = async () => { try { setIsLoading(true); await createStation(); toast.success("Остановка успешно создана"); navigate("/station"); } catch (error) { console.error("Error creating station:", error); toast.error("Ошибка при создании станции"); } finally { setIsLoading(false); } }; // ОБНОВЛЕННАЯ ФУНКЦИЯ: Проверка и вызов окна или создания const handleCreate = async () => { const isCityMissing = !createStationData.common.city_id; const isNameMissing = !createStationData[language].name; if (isCityMissing || isNameMissing) { setIsSaveWarningOpen(true); return; } await executeCreate(); }; // Обработчик "Да" в предупреждающем окне const handleConfirmCreate = async () => { setIsSaveWarningOpen(false); await executeCreate(); }; // Обработчик "Нет" в предупреждающем окне const handleCancelCreate = () => { setIsSaveWarningOpen(false); }; useEffect(() => { const fetchCities = async () => { await getCities("ru"); await getCities("en"); await getCities("zh"); }; fetchCities(); }, []); // Автоматически устанавливаем выбранный город при загрузке страницы useEffect(() => { if (selectedCityId && selectedCity && !createStationData.common.city_id) { setCreateCommonData({ city_id: selectedCityId, city: selectedCity.name, }); } }, [selectedCityId, selectedCity, createStationData.common.city_id]); return (

Создание остановки

setLanguageCreateStationData(language, { name: e.target.value, }) } /> Прямой/обратный маршрут setCreateCommonData({ description: e.target.value, }) } /> {/* setLanguageCreateStationData(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) { setCreateCommonData({ latitude: lat, longitude: lon, }); } else { setCreateCommonData({ latitude: 0, longitude: 0, }); } }} placeholder="Введите координаты в формате: широта долгота (можно использовать запятые или пробелы)" /> Город
{/* ИНТЕГРИРОВАННОЕ ПРЕДУПРЕЖДАЮЩЕЕ ОКНО */} {isSaveWarningOpen && ( )}
); });