MCPcopy Create free account
hub / github.com/core7s/react-design-editor / DropZone

Function DropZone

src/components/Dropzone/DropZone.tsx:7–84  ·  view source on GitHub ↗
({ children, handleDropFiles }: Props)

Source from the content-addressed store, hash-verified

5 handleDropFiles: (files: FileList) => void
6}
7const DropZone = ({ children, handleDropFiles }: Props) => {
8 const [isDragging, setIsDragging] = useState(false)
9 let dragCounter = 0
10 const dropRef = useRef<HTMLDivElement | null>(null)
11
12 useEffect(() => {
13 let div = dropRef.current
14 if (div) {
15 div.addEventListener("dragenter", handleDragIn)
16 div.addEventListener("dragleave", handleDragOut)
17 div.addEventListener("dragover", handleDrag)
18 div.addEventListener("drop", handleDrop)
19 }
20 return () => {
21 if (div) {
22 div.removeEventListener("dragenter", handleDragIn)
23 div.removeEventListener("dragleave", handleDragOut)
24 div.removeEventListener("dragover", handleDrag)
25 div.removeEventListener("drop", handleDrop)
26 }
27 }
28 // eslint-disable-next-line react-hooks/exhaustive-deps
29 }, [])
30 const handleDrag = (e: DragEvent) => {
31 e.preventDefault()
32 e.stopPropagation()
33 }
34 const handleDragIn = (e: DragEvent) => {
35 e.preventDefault()
36 e.stopPropagation()
37 dragCounter++
38 if (e.dataTransfer && e.dataTransfer.items && e.dataTransfer.items.length > 0) {
39 setIsDragging(true)
40 }
41 }
42 const handleDragOut = (e: DragEvent) => {
43 e.preventDefault()
44 e.stopPropagation()
45 dragCounter--
46 if (dragCounter > 0) return
47
48 setIsDragging(false)
49 }
50 const handleDrop = (e: DragEvent) => {
51 e.preventDefault()
52 e.stopPropagation()
53 setIsDragging(false)
54 if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {
55 handleDropFiles(e.dataTransfer.files)
56 e.dataTransfer.clearData()
57 dragCounter = 0
58 }
59 }
60
61 return (
62 <div style={{ display: "flex", height: "100%", position: "relative", flex: 1 }} ref={dropRef}>
63 {isDragging && (
64 <div

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected