Skip to content

Commit 27d9388

Browse files
committed
Improve
1 parent 866e8b9 commit 27d9388

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

packages/fluent-theme/src/components/dropZone/DropZone.tsx

+12-6
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import React, {
66
useEffect,
77
useRef,
88
useState,
9-
type DragEventHandler,
10-
type DragEvent as ReactDragEvent
9+
type DragEvent as ReactDragEvent,
10+
type DragEventHandler
1111
} from 'react';
1212
import { useRefFrom } from 'use-ref-from';
1313

@@ -19,7 +19,13 @@ import { useStyles } from '../../styles';
1919
const { useLocalizer } = hooks;
2020

2121
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.
2329
event.preventDefault();
2430
};
2531

@@ -86,17 +92,17 @@ const DropZone = (props: { readonly onFilesAdded: (files: File[]) => void }) =>
8692
}
8793
};
8894

95+
document.addEventListener('dragend', handleDragEnd);
8996
document.addEventListener('dragenter', handleDragEnter);
9097
document.addEventListener('dragleave', handleDragLeave);
91-
document.addEventListener('dragend', handleDragEnd);
9298
document.addEventListener('drop', handleDocumentDrop);
9399

94100
return () => {
101+
document.removeEventListener('dragend', handleDragEnd);
95102
document.removeEventListener('dragenter', handleDragEnter);
96103
document.removeEventListener('dragleave', handleDragLeave);
97-
document.removeEventListener('dragend', handleDragEnd);
98-
document.removeEventListener('drop', handleDocumentDrop);
99104
document.removeEventListener('dragover', handleDragOver);
105+
document.removeEventListener('drop', handleDocumentDrop);
100106
};
101107
}, [setDropZoneState]);
102108

0 commit comments

Comments
 (0)