@@ -6,8 +6,8 @@ import React, {
6
6
useEffect ,
7
7
useRef ,
8
8
useState ,
9
- type DragEventHandler ,
10
- type DragEvent as ReactDragEvent
9
+ type DragEvent as ReactDragEvent ,
10
+ type DragEventHandler
11
11
} from 'react' ;
12
12
import { useRefFrom } from 'use-ref-from' ;
13
13
@@ -19,7 +19,13 @@ import { useStyles } from '../../styles';
19
19
const { useLocalizer } = hooks ;
20
20
21
21
const handleDragOver = ( event : ReactDragEvent < unknown > | DragEvent ) => {
22
- // This is for preventing the browser from opening the dropped file in a new tab.
22
+ // Prevent default dragover behavior to enable drop event triggering.
23
+ // Browsers require this to fire subsequent drop events - without it,
24
+ // they would handle the drop directly (e.g., open files in new tabs).
25
+ // This is needed regardless of whether we prevent default drop behavior,
26
+ // as it ensures our dropzone receives the drop event first. If we allow
27
+ // default drop handling (by not calling preventDefault there), the browser
28
+ // will still process the drop after our event handlers complete.
23
29
event . preventDefault ( ) ;
24
30
} ;
25
31
@@ -86,17 +92,17 @@ const DropZone = (props: { readonly onFilesAdded: (files: File[]) => void }) =>
86
92
}
87
93
} ;
88
94
95
+ document . addEventListener ( 'dragend' , handleDragEnd ) ;
89
96
document . addEventListener ( 'dragenter' , handleDragEnter ) ;
90
97
document . addEventListener ( 'dragleave' , handleDragLeave ) ;
91
- document . addEventListener ( 'dragend' , handleDragEnd ) ;
92
98
document . addEventListener ( 'drop' , handleDocumentDrop ) ;
93
99
94
100
return ( ) => {
101
+ document . removeEventListener ( 'dragend' , handleDragEnd ) ;
95
102
document . removeEventListener ( 'dragenter' , handleDragEnter ) ;
96
103
document . removeEventListener ( 'dragleave' , handleDragLeave ) ;
97
- document . removeEventListener ( 'dragend' , handleDragEnd ) ;
98
- document . removeEventListener ( 'drop' , handleDocumentDrop ) ;
99
104
document . removeEventListener ( 'dragover' , handleDragOver ) ;
105
+ document . removeEventListener ( 'drop' , handleDocumentDrop ) ;
100
106
} ;
101
107
} , [ setDropZoneState ] ) ;
102
108
0 commit comments