Skip to content

Commit d4db1b4

Browse files
Mamadukatyxla
andauthored
Composer: Fix React Compiler errors for 'useDropZone' (#66469)
Co-authored-by: Mamaduka <[email protected]> Co-authored-by: tyxla <[email protected]>
1 parent dc4bd05 commit d4db1b4

File tree

1 file changed

+21
-47
lines changed
  • packages/compose/src/hooks/use-drop-zone

1 file changed

+21
-47
lines changed

packages/compose/src/hooks/use-drop-zone/index.js

+21-47
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,8 @@
1-
/**
2-
* WordPress dependencies
3-
*/
4-
import { useRef } from '@wordpress/element';
5-
61
/**
72
* Internal dependencies
83
*/
94
import useRefEffect from '../use-ref-effect';
10-
11-
/* eslint-disable jsdoc/valid-types */
12-
/**
13-
* @template T
14-
* @param {T} value
15-
* @return {import('react').MutableRefObject<T|null>} A ref with the value.
16-
*/
17-
function useFreshRef( value ) {
18-
/* eslint-enable jsdoc/valid-types */
19-
/* eslint-disable jsdoc/no-undefined-types */
20-
/** @type {import('react').MutableRefObject<T>} */
21-
/* eslint-enable jsdoc/no-undefined-types */
22-
// Disable reason: We're doing something pretty JavaScript-y here where the
23-
// ref will always have a current value that is not null or undefined but it
24-
// needs to start as undefined. We don't want to change the return type so
25-
// it's easier to just ts-ignore this specific line that's complaining about
26-
// undefined not being part of T.
27-
// @ts-ignore
28-
const ref = useRef();
29-
ref.current = value;
30-
return ref;
31-
}
5+
import useEvent from '../use-event';
326

337
/**
348
* A hook to facilitate drag and drop handling.
@@ -55,12 +29,12 @@ export default function useDropZone( {
5529
onDragEnd: _onDragEnd,
5630
onDragOver: _onDragOver,
5731
} ) {
58-
const onDropRef = useFreshRef( _onDrop );
59-
const onDragStartRef = useFreshRef( _onDragStart );
60-
const onDragEnterRef = useFreshRef( _onDragEnter );
61-
const onDragLeaveRef = useFreshRef( _onDragLeave );
62-
const onDragEndRef = useFreshRef( _onDragEnd );
63-
const onDragOverRef = useFreshRef( _onDragOver );
32+
const onDropEvent = useEvent( _onDrop );
33+
const onDragStartEvent = useEvent( _onDragStart );
34+
const onDragEnterEvent = useEvent( _onDragEnter );
35+
const onDragLeaveEvent = useEvent( _onDragLeave );
36+
const onDragEndEvent = useEvent( _onDragEnd );
37+
const onDragOverEvent = useEvent( _onDragOver );
6438

6539
return useRefEffect(
6640
( elem ) => {
@@ -122,8 +96,8 @@ export default function useDropZone( {
12296
ownerDocument.addEventListener( 'dragend', maybeDragEnd );
12397
ownerDocument.addEventListener( 'mousemove', maybeDragEnd );
12498

125-
if ( onDragStartRef.current ) {
126-
onDragStartRef.current( event );
99+
if ( _onDragStart ) {
100+
onDragStartEvent( event );
127101
}
128102
}
129103

@@ -142,15 +116,15 @@ export default function useDropZone( {
142116
return;
143117
}
144118

145-
if ( onDragEnterRef.current ) {
146-
onDragEnterRef.current( event );
119+
if ( _onDragEnter ) {
120+
onDragEnterEvent( event );
147121
}
148122
}
149123

150124
function onDragOver( /** @type {DragEvent} */ event ) {
151125
// Only call onDragOver for the innermost hovered drop zones.
152-
if ( ! event.defaultPrevented && onDragOverRef.current ) {
153-
onDragOverRef.current( event );
126+
if ( ! event.defaultPrevented && _onDragOver ) {
127+
onDragOverEvent( event );
154128
}
155129

156130
// Prevent the browser default while also signalling to parent
@@ -171,8 +145,8 @@ export default function useDropZone( {
171145
return;
172146
}
173147

174-
if ( onDragLeaveRef.current ) {
175-
onDragLeaveRef.current( event );
148+
if ( _onDragLeave ) {
149+
onDragLeaveEvent( event );
176150
}
177151
}
178152

@@ -192,8 +166,8 @@ export default function useDropZone( {
192166
// eslint-disable-next-line no-unused-expressions
193167
event.dataTransfer && event.dataTransfer.files.length;
194168

195-
if ( onDropRef.current ) {
196-
onDropRef.current( event );
169+
if ( _onDrop ) {
170+
onDropEvent( event );
197171
}
198172

199173
maybeDragEnd( event );
@@ -209,12 +183,12 @@ export default function useDropZone( {
209183
ownerDocument.removeEventListener( 'dragend', maybeDragEnd );
210184
ownerDocument.removeEventListener( 'mousemove', maybeDragEnd );
211185

212-
if ( onDragEndRef.current ) {
213-
onDragEndRef.current( event );
186+
if ( _onDragEnd ) {
187+
onDragEndEvent( event );
214188
}
215189
}
216190

217-
element.dataset.isDropZone = 'true';
191+
element.setAttribute( 'data-is-drop-zone', 'true' );
218192
element.addEventListener( 'drop', onDrop );
219193
element.addEventListener( 'dragenter', onDragEnter );
220194
element.addEventListener( 'dragover', onDragOver );
@@ -224,7 +198,7 @@ export default function useDropZone( {
224198
ownerDocument.addEventListener( 'dragenter', maybeDragStart );
225199

226200
return () => {
227-
delete element.dataset.isDropZone;
201+
element.removeAttribute( 'data-is-drop-zone' );
228202
element.removeEventListener( 'drop', onDrop );
229203
element.removeEventListener( 'dragenter', onDragEnter );
230204
element.removeEventListener( 'dragover', onDragOver );

0 commit comments

Comments
 (0)