Skip to content

Commit c4e191c

Browse files
committed
fix: drop logic
1 parent 746ab3c commit c4e191c

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

src/AjaxUploader.tsx

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -66,28 +66,11 @@ class AjaxUploader extends Component<UploadProps> {
6666
}
6767
};
6868

69-
onFileDropOrPaste = async (e: React.DragEvent<HTMLDivElement> | ClipboardEvent) => {
70-
if (e.type === 'dragover') {
71-
return;
72-
}
73-
69+
onDataTransferFiles = async (dataTransfer: DataTransfer) => {
7470
const { multiple, accept, directory } = this.props;
75-
let items: DataTransferItem[] = [];
76-
let files: File[] = [];
77-
78-
if (e.type === 'drop') {
79-
const dataTransfer = (e as React.DragEvent<HTMLDivElement>).dataTransfer;
80-
items = [...(dataTransfer.items || [])];
81-
files = [...(dataTransfer.files || [])];
82-
} else if (e.type === 'paste') {
83-
const clipboardData = (e as ClipboardEvent).clipboardData;
84-
items = [...(clipboardData.items || [])];
85-
files = [...(clipboardData.files || [])];
86-
}
8771

88-
if (files.length > 0 || items.some(item => item.kind === 'file')) {
89-
e.preventDefault();
90-
}
72+
const items: DataTransferItem[] = [...(dataTransfer.items || [])];
73+
let files: File[] = [...(dataTransfer.files || [])];
9174

9275
if (directory) {
9376
files = await traverseFileTree(Array.prototype.slice.call(items), (_file: RcFile) =>
@@ -105,11 +88,30 @@ class AjaxUploader extends Component<UploadProps> {
10588
}
10689
};
10790

108-
onPrePaste = (e: ClipboardEvent) => {
91+
onFilePaste = async (e: ClipboardEvent) => {
10992
const { pastable } = this.props;
11093

111-
if (pastable) {
112-
this.onFileDropOrPaste(e);
94+
if (!pastable) {
95+
return;
96+
}
97+
98+
if (e.type === 'paste') {
99+
const clipboardData = (e as ClipboardEvent).clipboardData;
100+
return this.onDataTransferFiles(clipboardData);
101+
}
102+
};
103+
104+
onFileDragOver = (e: React.DragEvent<HTMLDivElement>) => {
105+
e.preventDefault();
106+
};
107+
108+
onFileDrop = async (e: React.DragEvent<HTMLDivElement>) => {
109+
e.preventDefault();
110+
111+
if (e.type === 'drop') {
112+
const dataTransfer = (e as React.DragEvent<HTMLDivElement>).dataTransfer;
113+
114+
return this.onDataTransferFiles(dataTransfer);
113115
}
114116
};
115117

@@ -119,23 +121,23 @@ class AjaxUploader extends Component<UploadProps> {
119121
const { pastable } = this.props;
120122

121123
if (pastable) {
122-
document.addEventListener('paste', this.onPrePaste);
124+
document.addEventListener('paste', this.onFilePaste);
123125
}
124126
}
125127

126128
componentWillUnmount() {
127129
this._isMounted = false;
128130
this.abort();
129-
document.removeEventListener('paste', this.onPrePaste);
131+
document.removeEventListener('paste', this.onFilePaste);
130132
}
131133

132134
componentDidUpdate(prevProps: UploadProps) {
133135
const { pastable } = this.props;
134136

135137
if (pastable && !prevProps.pastable) {
136-
document.addEventListener('paste', this.onPrePaste);
138+
document.addEventListener('paste', this.onFilePaste);
137139
} else if (!pastable && prevProps.pastable) {
138-
document.removeEventListener('paste', this.onPrePaste);
140+
document.removeEventListener('paste', this.onFilePaste);
139141
}
140142
}
141143

@@ -335,8 +337,8 @@ class AjaxUploader extends Component<UploadProps> {
335337
onKeyDown: openFileDialogOnClick ? this.onKeyDown : () => {},
336338
onMouseEnter,
337339
onMouseLeave,
338-
onDrop: this.onFileDropOrPaste,
339-
onDragOver: this.onFileDropOrPaste,
340+
onDrop: this.onFileDrop,
341+
onDragOver: this.onFileDragOver,
340342
tabIndex: hasControlInside ? undefined : '0',
341343
};
342344
return (

0 commit comments

Comments
 (0)