import { Box, ButtonBase, IconButton, Typography, useTheme } from "@mui/material"; import { useState, useRef, useEffect } from "react"; import CloseIcon from "@mui/icons-material/Close"; type OwnImageProps = { imageUrl?: string; }; export const OwnImage = ({ imageUrl }: OwnImageProps) => { const theme = useTheme(); const [selectedFile, setSelectedFile] = useState(null); const [isDropzoneHighlighted, setIsDropzoneHighlighted] = useState(false); const fileInputRef = useRef(null); // Sync state if external imageUrl changes useEffect(() => { if (imageUrl) { setSelectedFile(null); // Clear local file selection when external URL is provided } }, [imageUrl]); const handleFileChange = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file && file.type.startsWith("image/")) { setSelectedFile(file); } }; const handleDrop = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setIsDropzoneHighlighted(false); const file = event.dataTransfer.files?.[0]; if (file && file.type.startsWith("image/")) { setSelectedFile(file); } }; const handleDragOver = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); }; const handleDragEnter = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setIsDropzoneHighlighted(true); }; const handleDragLeave = (event: React.DragEvent) => { event.preventDefault(); event.stopPropagation(); setIsDropzoneHighlighted(false); }; const handleClick = (e: React.MouseEvent) => { e.stopPropagation(); if (fileInputRef.current) { fileInputRef.current.value = ""; } fileInputRef.current?.click(); }; const handleRemoveImage = (e: React.MouseEvent) => { e.stopPropagation(); setSelectedFile(null); }; const imageToDisplay = selectedFile ? URL.createObjectURL(selectedFile) : imageUrl; return ( {imageToDisplay ? ( <> Preview {selectedFile && ( )} ) : ( добавьте свою картинку )} ); };