Skip to content

Commit 10c96a0

Browse files
committed
Fix drag drop image upload issue - velopert#84, velopert#86
1 parent fbba311 commit 10c96a0

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

src/components/common/DragDropUpload.tsx

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@ const DragDropUpload: React.FC<DragDropUploadProps> = ({ onUpload }) => {
3131
const [dragging, setDragging] = useState(false);
3232

3333
useEffect(() => {
34-
const onDrop = (e: any) => {
34+
const onDrop = (e: DragEvent) => {
3535
e.preventDefault();
36-
const { files } = e.dataTransfer;
37-
console.log(files);
36+
const { files } = e.dataTransfer || { files: null };
3837
if (!files) return;
3938
if (!files[0]) return;
4039
onUpload(files[0]);
@@ -57,6 +56,17 @@ const DragDropUpload: React.FC<DragDropUploadProps> = ({ onUpload }) => {
5756
setDragging(true);
5857
}
5958
};
59+
60+
const onDragOver = (e: DragEvent) => {
61+
e.preventDefault();
62+
if (e.dataTransfer) {
63+
e.dataTransfer.dropEffect = 'copy';
64+
}
65+
if (!dragging) {
66+
setDragging(true);
67+
}
68+
};
69+
6070
const onDragLeave = () => {
6171
if (down.current) return;
6272
dragIndex.current -= 1;
@@ -65,20 +75,30 @@ const DragDropUpload: React.FC<DragDropUploadProps> = ({ onUpload }) => {
6575
}
6676
};
6777

78+
const onMouseLeave = () => {
79+
if (dragging) {
80+
setDragging(false);
81+
}
82+
};
83+
6884
window.addEventListener('drop', onDrop);
85+
window.addEventListener('dragover', onDragOver);
6986
window.addEventListener('mousedown', onMouseDown);
7087
window.addEventListener('mouseup', onMouseUp);
7188
window.addEventListener('dragenter', onDragEnter);
7289
window.addEventListener('dragleave', onDragLeave);
90+
document.addEventListener('mouseleave', onMouseLeave);
7391

7492
return () => {
7593
window.removeEventListener('drop', onDrop);
94+
window.removeEventListener('dragover', onDragOver);
7695
window.removeEventListener('mousedown', onMouseDown);
7796
window.removeEventListener('mouseup', onMouseUp);
78-
window.addEventListener('dragenter', onDragEnter);
97+
window.removeEventListener('dragenter', onDragEnter);
7998
window.removeEventListener('dragleave', onDragLeave);
99+
document.removeEventListener('mouseleave', onMouseLeave);
80100
};
81-
}, [onUpload]);
101+
}, [dragging, onUpload]);
82102

83103
return dragging ? (
84104
<DragDropUploadBlock>

src/components/write/WriteMarkdownEditor.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,12 @@ export default class WriteMarkdownEditor extends React.Component<
285285
}
286286
});
287287

288+
this.codemirror.on('dragover', (cm, e) => {
289+
if (e.dataTransfer) {
290+
e.dataTransfer.dropEffect = 'copy';
291+
}
292+
});
293+
288294
this.codemirror.on('mousewheel', cm => {
289295
console.log(cm.getScrollInfo());
290296
});

src/lib/jazzbar/Jazzbar.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { JazzbarContext } from '.';
44

55
export interface JazzbarProps {}
66

7+
const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
78
const Jazzbar: React.FC<JazzbarProps> = props => {
89
const jazzbar = useContext(JazzbarContext);
910
const [visible, setVisible] = useState(false);
@@ -14,10 +15,13 @@ const Jazzbar: React.FC<JazzbarProps> = props => {
1415

1516
const hide = useCallback(() => {
1617
setHiding(true);
17-
setTimeout(() => {
18-
setHiding(false);
18+
const run = async () => {
19+
await sleep(200);
1920
setZero(true);
20-
}, 200);
21+
await sleep(400);
22+
setHiding(false);
23+
};
24+
run();
2125
}, []);
2226

2327
useEffect(() => {

0 commit comments

Comments
 (0)