import { Button, Paper, TextField, Select, MenuItem, FormControl, InputLabel, Box, } from "@mui/material"; import { observer } from "mobx-react-lite"; import { ArrowLeft, Loader2, Save } from "lucide-react"; import { useNavigate, useParams } from "react-router-dom"; import { toast } from "react-toastify"; import { cityStore, countryStore, languageStore, mediaStore, isMediaIdEmpty, CashedCities, LoadingSpinner, SelectMediaDialog, UploadMediaDialog, PreviewMediaDialog, } from "@shared"; import { useEffect, useState } from "react"; import { LanguageSwitcher, ImageUploadCard } from "@widgets"; export const CityEditPage = observer(() => { const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const [isLoadingData, setIsLoadingData] = useState(true); const [isSelectMediaOpen, setIsSelectMediaOpen] = useState(false); const [isUploadMediaOpen, setIsUploadMediaOpen] = useState(false); const [isPreviewMediaOpen, setIsPreviewMediaOpen] = useState(false); const [mediaId, setMediaId] = useState(""); const [activeMenuType, setActiveMenuType] = useState< "thumbnail" | "watermark_lu" | "watermark_rd" | "image" | null >(null); const { language } = languageStore; const { id } = useParams(); const { editCityData, editCity, getCity, setEditCityData } = cityStore; const { getCountries } = countryStore; const { getMedia, getOneMedia } = mediaStore; useEffect(() => { languageStore.setLanguage("ru"); }, []); const handleEdit = async () => { try { setIsLoading(true); await editCity(id as string); toast.success("Город успешно обновлен"); } catch (error) { toast.error("Ошибка при обновлении города"); } finally { setIsLoading(false); } }; useEffect(() => { (async () => { if (id) { setIsLoadingData(true); try { await getCountries("ru"); const ruData = await getCity(id as string, "ru"); const enData = await getCity(id as string, "en"); const zhData = await getCity(id as string, "zh"); setEditCityData(ruData.name, ruData.country_code, ruData.arms, "ru"); setEditCityData(enData.name, enData.country_code, enData.arms, "en"); setEditCityData(zhData.name, zhData.country_code, zhData.arms, "zh"); await getOneMedia(ruData.arms as string); await getMedia(); } finally { setIsLoadingData(false); } } else { setIsLoadingData(false); } })(); }, [id]); const handleMediaSelect = (media: { id: string; filename: string; media_name?: string; media_type: number; }) => { setEditCityData( editCityData[language].name, editCityData.country_code, media.id, language, ); }; const selectedMedia = editCityData.arms && !isMediaIdEmpty(editCityData.arms) ? mediaStore.media.find((m) => m.id === editCityData.arms) : null; const effectiveArmsUrl = isMediaIdEmpty(editCityData.arms) ? null : selectedMedia?.id ?? editCityData.arms; if (isLoadingData) { return ( ); } return (

{editCityData.ru.name}

setEditCityData( e.target.value, editCityData.country_code, editCityData.arms, language, ) } /> Страна
{ setIsPreviewMediaOpen(true); setMediaId(effectiveArmsUrl ?? ""); }} onDeleteImageClick={() => { setEditCityData( editCityData[language].name, editCityData.country_code, "", language, ); setActiveMenuType(null); }} onSelectFileClick={() => { setActiveMenuType("image"); setIsSelectMediaOpen(true); }} setUploadMediaOpen={() => { setIsUploadMediaOpen(true); setActiveMenuType("image"); }} setHardcodeType={() => { setActiveMenuType("image"); }} />
setIsSelectMediaOpen(false)} onSelectMedia={handleMediaSelect} mediaType={1} /> setIsUploadMediaOpen(false)} contextObjectName={editCityData[language].name} contextType="city" afterUpload={handleMediaSelect} hardcodeType={ activeMenuType as | "thumbnail" | "watermark_lu" | "watermark_rd" | "image" | null } /> setIsPreviewMediaOpen(false)} mediaId={mediaId} />
); });