@@ -154,8 +154,11 @@ export const useDropZone = ((...params: any[]) => {
154154 const element = target ? isTarget . getElement ( target ) : internalRef . current ;
155155
156156 if ( ! element ) return ;
157-
158- const onEvent = ( event : DragEvent , type : 'drop' | 'enter' | 'leave' | 'over' ) => {
157+
158+ const controller = new AbortController ( ) ;
159+ const options = { signal : controller . signal } ;
160+
161+ const onEvent = ( event : DragEvent ) => {
159162 if ( ! event . dataTransfer ) return ;
160163
161164 const isValid = checkValidity ( event . dataTransfer . items ) ;
@@ -169,47 +172,37 @@ export const useDropZone = ((...params: any[]) => {
169172
170173 const currentFiles = getFiles ( event ) ;
171174
172- if ( type === 'drop' ) {
175+ if ( event . type === 'drop' ) {
173176 counterRef . current = 0 ;
174177 setOvered ( false ) ;
175178 setFiles ( currentFiles ) ;
176179 options . onDrop ?.( currentFiles , event ) ;
177180 return ;
178181 }
179182
180- if ( type === 'enter ' ) {
183+ if ( event . type === 'dragenter ' ) {
181184 counterRef . current += 1 ;
182185 setOvered ( true ) ;
183186 options . onEnter ?.( event ) ;
184187 return ;
185188 }
186189
187- if ( type === 'leave' ) {
188- counterRef . current -= 1 ;
189- if ( counterRef . current !== 0 ) return ;
190+ if ( event . type === 'dragleave' && ( counterRef . current -= 1 ) === 0 ) {
190191 setOvered ( false ) ;
191192 options . onLeave ?.( event ) ;
192193 return ;
193194 }
194195
195- if ( type === 'over ' ) options . onOver ?.( event ) ;
196+ if ( event . type === 'dragover ' ) options . onOver ?.( event ) ;
196197 } ;
197198
198- const onDrop = ( ( event : DragEvent ) => onEvent ( event , 'drop' ) ) as EventListener ;
199- const onDragOver = ( ( event : DragEvent ) => onEvent ( event , 'over' ) ) as EventListener ;
200- const onDragEnter = ( ( event : DragEvent ) => onEvent ( event , 'enter' ) ) as EventListener ;
201- const onDragLeave = ( ( event : DragEvent ) => onEvent ( event , 'leave' ) ) as EventListener ;
202-
203- element . addEventListener ( 'dragenter' , onDragEnter ) ;
204- element . addEventListener ( 'dragover' , onDragOver ) ;
205- element . addEventListener ( 'dragleave' , onDragLeave ) ;
206- element . addEventListener ( 'drop' , onDrop ) ;
199+ element . addEventListener ( 'dragenter' , onEvent , options ) ;
200+ element . addEventListener ( 'dragover' , onEvent , options ) ;
201+ element . addEventListener ( 'dragleave' , onEvent , options ) ;
202+ element . addEventListener ( 'drop' , onEvent , options ) ;
207203
208204 return ( ) => {
209- element . removeEventListener ( 'dragenter' , onDragEnter ) ;
210- element . removeEventListener ( 'dragover' , onDragOver ) ;
211- element . removeEventListener ( 'dragleave' , onDragLeave ) ;
212- element . removeEventListener ( 'drop' , onDrop ) ;
205+ controller . abort ( ) ;
213206 } ;
214207 } , [ target && isTarget . getRawElement ( target ) , internalRef . state ] ) ;
215208
0 commit comments