import React, { useRef, useState } from "react"; import { Box, Button, Image as UIImage, Flex, Label, Input, Text, } from "theme-ui"; import Modal from "../components/Modal"; function AddMapModal({ isOpen, onRequestClose, onDone, onImageUpload, gridX, onGridXChange, gridY, onGridYChange, imageLoaded, mapSource, }) { const fileInputRef = useRef(); function openImageDialog() { if (fileInputRef.current) { fileInputRef.current.click(); } } const [dragging, setDragging] = useState(false); function handleImageDragEnter(event) { event.preventDefault(); event.stopPropagation(); setDragging(true); } function handleImageDragLeave(event) { event.preventDefault(); event.stopPropagation(); setDragging(false); } function handleImageDrop(event) { event.preventDefault(); event.stopPropagation(); const file = event.dataTransfer.files[0]; if (file && file.type.startsWith("image")) { onImageUpload(file); } setDragging(false); } return ( { e.preventDefault(); onDone(); }} onDragEnter={handleImageDragEnter} > onImageUpload(event.target.files[0])} type="file" accept="image/*" style={{ display: "none" }} ref={fileInputRef} /> onGridXChange(e.target.value)} /> onGridYChange(e.target.value)} /> {mapSource ? ( ) : ( )} {dragging && ( { e.preventDefault(); e.stopPropagation(); e.dataTransfer.dropEffect = "copy"; }} onDrop={handleImageDrop} > Drop map to upload )} ); } export default AddMapModal;