import { Box, Button } from "@mui/material"; import { editSightStore, SelectMediaDialog, UploadMediaDialog } from "@shared"; import { Upload } from "lucide-react"; import { observer } from "mobx-react-lite"; import { useState, DragEvent, useRef } from "react"; export const MediaAreaForSight = observer( ({ onFilesDrop, // 👈 Проп для обработки загруженных файлов onFinishUpload, }: { onFilesDrop?: (files: File[]) => void; onFinishUpload?: (mediaId: string) => void; }) => { const [selectMediaDialogOpen, setSelectMediaDialogOpen] = useState(false); const [uploadMediaDialogOpen, setUploadMediaDialogOpen] = useState(false); const [isDragging, setIsDragging] = useState(false); const fileInputRef = useRef(null); const { setFileToUpload } = editSightStore; const handleDrop = (e: DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); const files = Array.from(e.dataTransfer.files); if (files.length && onFilesDrop) { setFileToUpload(files[0]); } setUploadMediaDialogOpen(true); }; const handleDragOver = (e: DragEvent) => { e.preventDefault(); setIsDragging(true); }; const handleDragLeave = () => { setIsDragging(false); }; const handleClick = () => { fileInputRef.current?.click(); }; const handleFileSelect = (event: React.ChangeEvent) => { const files = Array.from(event.target.files || []); if (files.length && onFilesDrop) { setFileToUpload(files[0]); onFilesDrop(files); setUploadMediaDialogOpen(true); } // Сбрасываем значение input, чтобы можно было выбрать тот же файл снова event.target.value = ""; }; return ( <>
Перетащите медиа файлы сюда или нажмите для выбора
или
setUploadMediaDialogOpen(false)} afterUploadSight={onFinishUpload} /> setSelectMediaDialogOpen(false)} onSelectForSightMedia={onFinishUpload} /> ); } );