@@ -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