Skip to content

Commit 46504b8

Browse files
authored
Merge pull request #421 from Flaain/patch-1
Update useDropZone.ts
2 parents 4e8446b + 9b12e77 commit 46504b8

1 file changed

Lines changed: 14 additions & 21 deletions

File tree

packages/core/src/hooks/useDropZone/useDropZone.ts

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)