import { articlesStore, authStore, Language, mediaStore, MEDIA_TYPE_LABELS, API_URL, } from "@shared"; import { observer } from "mobx-react-lite"; import { useEffect, useRef, useState, useCallback } from "react"; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Paper, Box, Typography, CircularProgress, Alert, Snackbar, } from "@mui/material"; import { Download, Save } from "lucide-react"; import { ReactMarkdownComponent, MediaViewer } from "@widgets"; import { authInstance } from "@shared"; interface PreviewMediaDialogProps { open: boolean; onClose: () => void; mediaId: string; } export const PreviewMediaDialog = observer( ({ open, onClose, mediaId }: PreviewMediaDialogProps) => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const media = mediaId ? mediaStore.media.find((m) => m.id === mediaId) : null; const [mediaName, setMediaName] = useState(media?.media_name ?? ""); const [mediaFilename, setMediaFilename] = useState(media?.filename ?? ""); // Reset form when media changes useEffect(() => { if (media) { setMediaName(media.media_name); setMediaFilename(media.filename); } }, [media]); useEffect(() => { const handleKeyPress = (event: KeyboardEvent) => { if (event.key.toLowerCase() === "enter" && !event.ctrlKey) { event.preventDefault(); onClose(); } }; window.addEventListener("keydown", handleKeyPress); return () => window.removeEventListener("keydown", handleKeyPress); }, [onClose]); const handleSave = async () => { if (!mediaId) return; setIsLoading(true); setError(null); try { await authInstance.patch(`/media/${mediaId}`, { media_name: mediaName, filename: mediaFilename, type: media?.media_type, }); // Update local store await mediaStore.getMedia(); setSuccess(true); } catch (err) { setError(err instanceof Error ? err.message : "Failed to save media"); } finally { setIsLoading(false); } }; const handleClose = () => { setError(null); setSuccess(false); onClose(); }; if (!media) { return null; } return ( <> Просмотр медиа setMediaName(e.target.value)} label="Название медиа" disabled={isLoading} /> setMediaFilename(e.target.value)} label="Название файла" disabled={isLoading} /> setError(null)} > setError(null)}> {error} setSuccess(false)} > setSuccess(false)}> Медиа успешно сохранено ); } );