Skip to content

Commit 689beef

Browse files
authored
[Flare] Move unstable_createEventComponent to ReactDOM (#15890)
1 parent 9845437 commit 689beef

20 files changed

Lines changed: 318 additions & 290 deletions

File tree

packages/react-dom/src/client/ReactDOM.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import {
4242
} from 'react-reconciler/inline.dom';
4343
import {createPortal as createPortalImpl} from 'shared/ReactPortal';
4444
import {canUseDOM} from 'shared/ExecutionEnvironment';
45+
import createEventComponent from 'shared/createEventComponent';
4546
import {setBatchingImplementation} from 'events/ReactGenericBatching';
4647
import {
4748
setRestoreImplementation,
@@ -63,7 +64,10 @@ import getComponentName from 'shared/getComponentName';
6364
import invariant from 'shared/invariant';
6465
import lowPriorityWarning from 'shared/lowPriorityWarning';
6566
import warningWithoutStack from 'shared/warningWithoutStack';
66-
import {enableStableConcurrentModeAPIs} from 'shared/ReactFeatureFlags';
67+
import {
68+
enableStableConcurrentModeAPIs,
69+
enableEventAPI,
70+
} from 'shared/ReactFeatureFlags';
6771

6872
import {
6973
getInstanceFromNode,
@@ -877,6 +881,10 @@ if (enableStableConcurrentModeAPIs) {
877881
ReactDOM.createSyncRoot = createSyncRoot;
878882
}
879883

884+
if (enableEventAPI) {
885+
ReactDOM.unstable_createEventComponent = createEventComponent;
886+
}
887+
880888
const foundDevTools = injectIntoDevTools({
881889
findFiberByHostInstance: getClosestInstanceFromNode,
882890
bundleType: __DEV__ ? 1 : 0,

packages/react-dom/src/client/ReactDOMComponent.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {registrationNameModules} from 'events/EventPluginRegistry';
1313
import warning from 'shared/warning';
1414
import {canUseDOM} from 'shared/ExecutionEnvironment';
1515
import warningWithoutStack from 'shared/warningWithoutStack';
16-
import type {ReactEventResponderEventType} from 'shared/ReactTypes';
16+
import type {ReactDOMEventResponderEventType} from 'shared/ReactDOMTypes';
1717
import type {DOMTopLevelEventType} from 'events/TopLevelEventTypes';
1818
import {
1919
setListenToResponderEventTypes,
@@ -1287,7 +1287,7 @@ export function restoreControlledState(
12871287
}
12881288

12891289
export function listenToEventResponderEventTypes(
1290-
eventTypes: Array<ReactEventResponderEventType>,
1290+
eventTypes: Array<ReactDOMEventResponderEventType>,
12911291
element: Element | Document,
12921292
): void {
12931293
if (enableEventAPI) {

packages/react-dom/src/client/ReactDOMHostConfig.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import dangerousStyleValue from '../shared/dangerousStyleValue';
4646

4747
import type {DOMContainer} from './ReactDOM';
4848
import type {ReactEventComponentInstance} from 'shared/ReactTypes';
49+
import type {ReactDOMEventResponder} from 'shared/ReactDOMTypes';
4950
import {
5051
mountEventResponder,
5152
unmountEventResponder,
@@ -101,6 +102,7 @@ export type UpdatePayload = Array<mixed>;
101102
export type ChildSet = void; // Unused
102103
export type TimeoutHandle = TimeoutID;
103104
export type NoTimeout = -1;
105+
export type EventResponder = ReactDOMEventResponder;
104106

105107
import {
106108
enableSuspenseServerRenderer,
@@ -905,7 +907,10 @@ export function mountEventComponent(
905907
const doc = rootContainerInstance.ownerDocument;
906908
const documentBody = doc.body || doc;
907909
const responder = eventComponentInstance.responder;
908-
const {rootEventTypes, targetEventTypes} = responder;
910+
const {
911+
rootEventTypes,
912+
targetEventTypes,
913+
} = ((responder: any): ReactDOMEventResponder);
909914
if (targetEventTypes !== undefined) {
910915
listenToEventResponderEventTypes(targetEventTypes, documentBody);
911916
}

packages/react-dom/src/events/DOMEventResponderSystem.js

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ import {
1818
HostComponent,
1919
} from 'shared/ReactWorkTags';
2020
import type {
21-
ReactEventResponder,
22-
ReactEventResponderEventType,
2321
ReactEventComponentInstance,
24-
ReactResponderContext,
25-
ReactResponderEvent,
2622
EventPriority,
2723
} from 'shared/ReactTypes';
24+
import type {
25+
ReactDOMEventResponder,
26+
ReactDOMEventResponderEventType,
27+
ReactDOMResponderContext,
28+
ReactDOMResponderEvent,
29+
} from 'shared/ReactDOMTypes';
2830
import type {DOMTopLevelEventType} from 'events/TopLevelEventTypes';
2931
import {
3032
batchedEventUpdates,
@@ -95,7 +97,7 @@ const rootEventTypesToEventComponentInstances: Map<
9597
Set<ReactEventComponentInstance>,
9698
> = new Map();
9799
const targetEventTypeCached: Map<
98-
Array<ReactEventResponderEventType>,
100+
Array<ReactDOMEventResponderEventType>,
99101
Set<string>,
100102
> = new Map();
101103
const ownershipChangeListeners: Set<ReactEventComponentInstance> = new Set();
@@ -116,7 +118,7 @@ let currentInstance: null | ReactEventComponentInstance = null;
116118
let currentEventQueue: null | EventQueue = null;
117119
let currentTimerIDCounter = 0;
118120

119-
const eventResponderContext: ReactResponderContext = {
121+
const eventResponderContext: ReactDOMResponderContext = {
120122
dispatchEvent(
121123
possibleEventObject: Object,
122124
listener: ($Shape<PartialEventObject>) => void,
@@ -186,7 +188,7 @@ const eventResponderContext: ReactResponderContext = {
186188
eventListeners.set(eventObject, listener);
187189
eventQueue.events.push(eventObject);
188190
},
189-
isEventWithinTouchHitTarget(event: ReactResponderEvent): boolean {
191+
isEventWithinTouchHitTarget(event: ReactDOMResponderEvent): boolean {
190192
validateResponderContext();
191193
const target = event.target;
192194
const nativeEvent = event.nativeEvent;
@@ -254,7 +256,9 @@ const eventResponderContext: ReactResponderContext = {
254256
}
255257
return false;
256258
},
257-
addRootEventTypes(rootEventTypes: Array<ReactEventResponderEventType>): void {
259+
addRootEventTypes(
260+
rootEventTypes: Array<ReactDOMEventResponderEventType>,
261+
): void {
258262
validateResponderContext();
259263
const activeDocument = getActiveDocument();
260264
listenToResponderEventTypesImpl(rootEventTypes, activeDocument);
@@ -265,7 +269,7 @@ const eventResponderContext: ReactResponderContext = {
265269
}
266270
},
267271
removeRootEventTypes(
268-
rootEventTypes: Array<ReactEventResponderEventType>,
272+
rootEventTypes: Array<ReactDOMEventResponderEventType>,
269273
): void {
270274
validateResponderContext();
271275
for (let i = 0; i < rootEventTypes.length; i++) {
@@ -375,7 +379,7 @@ const eventResponderContext: ReactResponderContext = {
375379
},
376380
getActiveDocument,
377381
objectAssign: Object.assign,
378-
getEventCurrentTarget(event: ReactResponderEvent): Element {
382+
getEventCurrentTarget(event: ReactDOMResponderEvent): Element {
379383
validateResponderContext();
380384
const target = event.target;
381385
let fiber = getClosestInstanceFromNode(target);
@@ -531,13 +535,13 @@ function processTimers(
531535
}
532536
}
533537

534-
function createResponderEvent(
538+
function createDOMResponderEvent(
535539
topLevelType: string,
536540
nativeEvent: AnyNativeEvent,
537541
nativeEventTarget: Element | Document,
538542
passive: boolean,
539543
passiveSupported: boolean,
540-
): ReactResponderEvent {
544+
): ReactDOMResponderEvent {
541545
const {pointerType} = (nativeEvent: any);
542546
let eventPointerType = '';
543547
let pointerId = null;
@@ -589,7 +593,7 @@ function processEvents(events: Array<EventObjectType>): void {
589593
}
590594
}
591595

592-
export function processEventQueue(): void {
596+
function processEventQueue(): void {
593597
const {events, eventPriority} = ((currentEventQueue: any): EventQueue);
594598

595599
if (events.length === 0) {
@@ -622,8 +626,8 @@ export function processEventQueue(): void {
622626
}
623627
}
624628

625-
function getTargetEventTypesSet(
626-
eventTypes: Array<ReactEventResponderEventType>,
629+
function getDOMTargetEventTypesSet(
630+
eventTypes: Array<ReactDOMEventResponderEventType>,
627631
): Set<string> {
628632
let cachedSet = targetEventTypeCached.get(eventTypes);
629633

@@ -669,7 +673,7 @@ function getTargetEventResponderInstances(
669673
const targetEventTypes = responder.targetEventTypes;
670674
// Validate the target event type exists on the responder
671675
if (targetEventTypes !== undefined) {
672-
const targetEventTypesSet = getTargetEventTypesSet(targetEventTypes);
676+
const targetEventTypesSet = getDOMTargetEventTypesSet(targetEventTypes);
673677
if (targetEventTypesSet.has(listeningName)) {
674678
eventResponderInstances.push(eventComponentInstance);
675679
}
@@ -700,8 +704,8 @@ function getRootEventResponderInstances(
700704

701705
function shouldSkipEventComponent(
702706
eventResponderInstance: ReactEventComponentInstance,
703-
responder: ReactEventResponder,
704-
propagatedEventResponders: null | Set<ReactEventResponder>,
707+
responder: ReactDOMEventResponder,
708+
propagatedEventResponders: null | Set<ReactDOMEventResponder>,
705709
): boolean {
706710
if (propagatedEventResponders !== null) {
707711
if (propagatedEventResponders.has(responder)) {
@@ -716,9 +720,9 @@ function shouldSkipEventComponent(
716720
}
717721

718722
function checkForLocalPropagationContinuation(
719-
responder: ReactEventResponder,
720-
propagatedEventResponders: Set<ReactEventResponder>,
721-
) {
723+
responder: ReactDOMEventResponder,
724+
propagatedEventResponders: Set<ReactDOMEventResponder>,
725+
): void {
722726
if (continueLocalPropagation === true) {
723727
propagatedEventResponders.delete(responder);
724728
continueLocalPropagation = false;
@@ -748,14 +752,14 @@ function traverseAndHandleEventResponderInstances(
748752
listeningName,
749753
targetFiber,
750754
);
751-
const responderEvent = createResponderEvent(
755+
const responderEvent = createDOMResponderEvent(
752756
((topLevelType: any): string),
753757
nativeEvent,
754758
((nativeEventTarget: any): Element | Document),
755759
isPassiveEvent,
756760
isPassiveSupported,
757761
);
758-
const propagatedEventResponders: Set<ReactEventResponder> = new Set();
762+
const propagatedEventResponders: Set<ReactDOMEventResponder> = new Set();
759763
let length = targetEventResponderInstances.length;
760764
let i;
761765

@@ -964,7 +968,7 @@ export function dispatchEventForResponderEventSystem(
964968

965969
export function addRootEventTypesForComponentInstance(
966970
eventComponentInstance: ReactEventComponentInstance,
967-
rootEventTypes: Array<ReactEventResponderEventType>,
971+
rootEventTypes: Array<ReactDOMEventResponderEventType>,
968972
): void {
969973
for (let i = 0; i < rootEventTypes.length; i++) {
970974
const rootEventType = rootEventTypes[i];
@@ -973,7 +977,7 @@ export function addRootEventTypesForComponentInstance(
973977
}
974978

975979
function registerRootEventType(
976-
rootEventType: ReactEventResponderEventType,
980+
rootEventType: ReactDOMEventResponderEventType,
977981
eventComponentInstance: ReactEventComponentInstance,
978982
): void {
979983
let name = rootEventType;
@@ -1013,9 +1017,7 @@ function registerRootEventType(
10131017
name,
10141018
);
10151019
rootEventTypesSet.add(listeningName);
1016-
rootEventComponentInstances.add(
1017-
((eventComponentInstance: any): ReactEventComponentInstance),
1018-
);
1020+
rootEventComponentInstances.add(eventComponentInstance);
10191021
}
10201022

10211023
export function generateListeningKey(

packages/react-events/src/Drag.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
*/
99

1010
import type {
11-
ReactResponderEvent,
12-
ReactResponderContext,
13-
EventPriority,
14-
} from 'shared/ReactTypes';
11+
ReactDOMResponderEvent,
12+
ReactDOMResponderContext,
13+
} from 'shared/ReactDOMTypes';
14+
import type {EventPriority} from 'shared/ReactTypes';
1515

16-
import React from 'react';
16+
import ReactDOM from 'react-dom';
1717
import {DiscreteEvent, UserBlockingEvent} from 'shared/ReactTypes';
1818

1919
const targetEventTypes = ['pointerdown'];
@@ -58,7 +58,7 @@ type DragEvent = {|
5858
|};
5959

6060
function createDragEvent(
61-
context: ReactResponderContext,
61+
context: ReactDOMResponderContext,
6262
type: DragEventType,
6363
target: Element | Document,
6464
eventData?: EventData,
@@ -72,7 +72,7 @@ function createDragEvent(
7272
}
7373

7474
function dispatchDragEvent(
75-
context: ReactResponderContext,
75+
context: ReactDOMResponderContext,
7676
name: DragEventType,
7777
listener: DragEvent => void,
7878
state: DragState,
@@ -99,8 +99,8 @@ const DragResponder = {
9999
},
100100
allowMultipleHostChildren: false,
101101
onEvent(
102-
event: ReactResponderEvent,
103-
context: ReactResponderContext,
102+
event: ReactDOMResponderEvent,
103+
context: ReactDOMResponderContext,
104104
props: Object,
105105
state: DragState,
106106
): void {
@@ -142,8 +142,8 @@ const DragResponder = {
142142
}
143143
},
144144
onRootEvent(
145-
event: ReactResponderEvent,
146-
context: ReactResponderContext,
145+
event: ReactDOMResponderEvent,
146+
context: ReactDOMResponderContext,
147147
props: Object,
148148
state: DragState,
149149
): void {
@@ -259,4 +259,4 @@ const DragResponder = {
259259
},
260260
};
261261

262-
export default React.unstable_createEventComponent(DragResponder, 'Drag');
262+
export default ReactDOM.unstable_createEventComponent(DragResponder, 'Drag');

0 commit comments

Comments
 (0)