import React, { useEffect, useRef, useState } from "react"; export default function DropFileWidget() { const fileSelect = useRef(null); const fileRef = useRef(null); const [selectedFile, setSelectedFile] = useState(""); const [img, setImg] = useState(null); const changeFile = (e, file) => { if (e) { const imgRead = new FileReader(); imgRead.onload = (event) => { setImg(event.target.result); }; // most importend imgRead.readAsDataURL(e.target.files[0]); } if (file) { if (file[0].name) { setSelectedFile(file[0].name); const imgRead = new FileReader(); imgRead.onload = (event) => { setImg(event.target.result); }; // most importend imgRead.readAsDataURL(file[0]); } } }; // drop event function handleDrop(e) { const dt = e.dataTransfer; const { files } = dt; changeFile(false, files); } // for stopPropagation and preventDefault function preventDefaults(e) { e.preventDefault(); e.stopPropagation(); } function highlight() { fileSelect.current.classList.add("highlight"); } function unhighlight() { fileSelect.current.classList.remove("highlight"); } const browseImg = () => { fileRef.current.click(); }; useEffect(() => { // drop event fileSelect.current.addEventListener("drop", handleDrop, false); // for stopPropagation and preventDefault ["dragenter", "dragover", "dragleave", "drop"].forEach((eventName) => { fileSelect.current.addEventListener(eventName, preventDefaults, false); }); // for highlight ["dragenter", "dragover"].forEach((eventName) => { fileSelect.current.addEventListener(eventName, highlight, false); }); ["dragleave", "drop"].forEach((eventName) => { fileSelect.current.addEventListener(eventName, unhighlight, false); }); }); return ( <>
{img ? (
changeFile(e)} />
) : (
browseImg()} >

Drop files to upload or Browse

changeFile(e)} />
)}
); }