MCPcopy
hub / github.com/realdennis/md2pdf / useDrop

Function useDrop

src/App/Container/Hooks/useDrop.js:3–56  ·  view source on GitHub ↗
(ref, onLoad = () => {})

Source from the content-addressed store, hash-verified

1import { useEffect, useState } from 'react';
2
3function useDrop(ref, onLoad = () => {}) {
4 const [uploading, setUploading] = useState(false);
5 const [isOver, setOver] = useState(false);
6 const stopDefault = e => {
7 e.preventDefault();
8 e.stopPropagation();
9 };
10 useEffect(() => {
11 const dragLeaveHandler = e => {
12 setOver(false);
13 stopDefault(e);
14 };
15 const dragOverHandler = e => {
16 setOver(true);
17 stopDefault(e);
18 };
19 const dropHandler = e => {
20 setOver(false);
21 stopDefault(e);
22 uploadHandler(e.dataTransfer.files);
23 };
24
25 const uploadHandler = files => {
26 if (
27 files &&
28 files[0] &&
29 files[0].name &&
30 /\.(md)$/i.test(files[0].name) &&
31 !uploading
32 ) {
33 const reader = new FileReader();
34 reader.onload = e => {
35 setUploading(false);
36 onLoad(e.target.result);
37 };
38 reader.readAsText(files[0]);
39 setUploading(true);
40 }
41 };
42 const target = ref.current;
43 if (!target) return;
44 target.addEventListener('dragenter', stopDefault, true);
45 target.addEventListener('dragover', dragOverHandler, true);
46 target.addEventListener('dragleave', dragLeaveHandler, true);
47 target.addEventListener('drop', dropHandler, true);
48 return () => {
49 target.removeEventListener('dragenter', stopDefault, true);
50 target.removeEventListener('dragover', dragOverHandler, true);
51 target.removeEventListener('dragleave', dragLeaveHandler, true);
52 target.removeEventListener('drop', dropHandler, true);
53 };
54 }, [ref, onLoad, uploading, isOver]);
55 return [uploading, isOver];
56}
57
58export default useDrop;

Callers 1

MarkdownFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected