@@ -66,28 +66,11 @@ class AjaxUploader extends Component<UploadProps> {
66
66
}
67
67
} ;
68
68
69
- onFileDropOrPaste = async ( e : React . DragEvent < HTMLDivElement > | ClipboardEvent ) => {
70
- if ( e . type === 'dragover' ) {
71
- return ;
72
- }
73
-
69
+ onDataTransferFiles = async ( dataTransfer : DataTransfer ) => {
74
70
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
- }
87
71
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 || [ ] ) ] ;
91
74
92
75
if ( directory ) {
93
76
files = await traverseFileTree ( Array . prototype . slice . call ( items ) , ( _file : RcFile ) =>
@@ -105,11 +88,30 @@ class AjaxUploader extends Component<UploadProps> {
105
88
}
106
89
} ;
107
90
108
- onPrePaste = ( e : ClipboardEvent ) => {
91
+ onFilePaste = async ( e : ClipboardEvent ) => {
109
92
const { pastable } = this . props ;
110
93
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 ) ;
113
115
}
114
116
} ;
115
117
@@ -119,23 +121,23 @@ class AjaxUploader extends Component<UploadProps> {
119
121
const { pastable } = this . props ;
120
122
121
123
if ( pastable ) {
122
- document . addEventListener ( 'paste' , this . onPrePaste ) ;
124
+ document . addEventListener ( 'paste' , this . onFilePaste ) ;
123
125
}
124
126
}
125
127
126
128
componentWillUnmount ( ) {
127
129
this . _isMounted = false ;
128
130
this . abort ( ) ;
129
- document . removeEventListener ( 'paste' , this . onPrePaste ) ;
131
+ document . removeEventListener ( 'paste' , this . onFilePaste ) ;
130
132
}
131
133
132
134
componentDidUpdate ( prevProps : UploadProps ) {
133
135
const { pastable } = this . props ;
134
136
135
137
if ( pastable && ! prevProps . pastable ) {
136
- document . addEventListener ( 'paste' , this . onPrePaste ) ;
138
+ document . addEventListener ( 'paste' , this . onFilePaste ) ;
137
139
} else if ( ! pastable && prevProps . pastable ) {
138
- document . removeEventListener ( 'paste' , this . onPrePaste ) ;
140
+ document . removeEventListener ( 'paste' , this . onFilePaste ) ;
139
141
}
140
142
}
141
143
@@ -335,8 +337,8 @@ class AjaxUploader extends Component<UploadProps> {
335
337
onKeyDown : openFileDialogOnClick ? this . onKeyDown : ( ) => { } ,
336
338
onMouseEnter,
337
339
onMouseLeave,
338
- onDrop : this . onFileDropOrPaste ,
339
- onDragOver : this . onFileDropOrPaste ,
340
+ onDrop : this . onFileDrop ,
341
+ onDragOver : this . onFileDragOver ,
340
342
tabIndex : hasControlInside ? undefined : '0' ,
341
343
} ;
342
344
return (
0 commit comments