@@ -155,8 +155,11 @@ export const useDropZone = ((...params: any[]) => {
155155 const element = target ? isTarget . getElement ( target ) : internalRef . current ;
156156
157157 if ( ! element ) return ;
158-
159- const onEvent = ( event : DragEvent , type : 'drop' | 'enter' | 'leave' | 'over' ) => {
158+
159+ const controller = new AbortController ( ) ;
160+ const options = { signal : controller . signal } ;
161+
162+ const onEvent = ( event : DragEvent ) => {
160163 if ( ! event . dataTransfer ) return ;
161164
162165 const isValid = checkValidity ( event . dataTransfer . items ) ;
@@ -170,47 +173,37 @@ export const useDropZone = ((...params: any[]) => {
170173
171174 const currentFiles = getFiles ( event ) ;
172175
173- if ( type === 'drop' ) {
176+ if ( event . type === 'drop' ) {
174177 counterRef . current = 0 ;
175178 setOvered ( false ) ;
176179 setFiles ( currentFiles ) ;
177180 options . onDrop ?.( currentFiles , event ) ;
178181 return ;
179182 }
180183
181- if ( type === 'enter ' ) {
184+ if ( event . type === 'dragenter ' ) {
182185 counterRef . current += 1 ;
183186 setOvered ( true ) ;
184187 options . onEnter ?.( event ) ;
185188 return ;
186189 }
187190
188- if ( type === 'leave' ) {
189- counterRef . current -= 1 ;
190- if ( counterRef . current !== 0 ) return ;
191+ if ( event . type === 'dragleave' && ( counterRef . current -= 1 ) === 0 ) {
191192 setOvered ( false ) ;
192193 options . onLeave ?.( event ) ;
193194 return ;
194195 }
195196
196- if ( type === 'over ' ) options . onOver ?.( event ) ;
197+ if ( event . type === 'dragover ' ) options . onOver ?.( event ) ;
197198 } ;
198199
199- const onDrop = ( ( event : DragEvent ) => onEvent ( event , 'drop' ) ) as EventListener ;
200- const onDragOver = ( ( event : DragEvent ) => onEvent ( event , 'over' ) ) as EventListener ;
201- const onDragEnter = ( ( event : DragEvent ) => onEvent ( event , 'enter' ) ) as EventListener ;
202- const onDragLeave = ( ( event : DragEvent ) => onEvent ( event , 'leave' ) ) as EventListener ;
203-
204- element . addEventListener ( 'dragenter' , onDragEnter ) ;
205- element . addEventListener ( 'dragover' , onDragOver ) ;
206- element . addEventListener ( 'dragleave' , onDragLeave ) ;
207- element . addEventListener ( 'drop' , onDrop ) ;
200+ element . addEventListener ( 'dragenter' , onEvent , options ) ;
201+ element . addEventListener ( 'dragover' , onEvent , options ) ;
202+ element . addEventListener ( 'dragleave' , onEvent , options ) ;
203+ element . addEventListener ( 'drop' , onEvent , options ) ;
208204
209205 return ( ) => {
210- element . removeEventListener ( 'dragenter' , onDragEnter ) ;
211- element . removeEventListener ( 'dragover' , onDragOver ) ;
212- element . removeEventListener ( 'dragleave' , onDragLeave ) ;
213- element . removeEventListener ( 'drop' , onDrop ) ;
206+ controller . abort ( ) ;
214207 } ;
215208 } , [ target , internalRef . current ] ) ;
216209
0 commit comments