Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Flare] Move unstable_createEventComponent to ReactDOM #15890

Merged
merged 5 commits into from
Jun 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 9 additions & 1 deletion packages/react-dom/src/client/ReactDOM.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import {
} from 'react-reconciler/inline.dom';
import {createPortal as createPortalImpl} from 'shared/ReactPortal';
import {canUseDOM} from 'shared/ExecutionEnvironment';
import createEventComponent from 'shared/createEventComponent';
import {setBatchingImplementation} from 'events/ReactGenericBatching';
import {
setRestoreImplementation,
Expand All @@ -63,7 +64,10 @@ import getComponentName from 'shared/getComponentName';
import invariant from 'shared/invariant';
import lowPriorityWarning from 'shared/lowPriorityWarning';
import warningWithoutStack from 'shared/warningWithoutStack';
import {enableStableConcurrentModeAPIs} from 'shared/ReactFeatureFlags';
import {
enableStableConcurrentModeAPIs,
enableEventAPI,
} from 'shared/ReactFeatureFlags';

import {
getInstanceFromNode,
Expand Down Expand Up @@ -877,6 +881,10 @@ if (enableStableConcurrentModeAPIs) {
ReactDOM.createSyncRoot = createSyncRoot;
}

if (enableEventAPI) {
ReactDOM.unstable_createEventComponent = createEventComponent;
}

const foundDevTools = injectIntoDevTools({
findFiberByHostInstance: getClosestInstanceFromNode,
bundleType: __DEV__ ? 1 : 0,
Expand Down
4 changes: 2 additions & 2 deletions packages/react-dom/src/client/ReactDOMComponent.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {registrationNameModules} from 'events/EventPluginRegistry';
import warning from 'shared/warning';
import {canUseDOM} from 'shared/ExecutionEnvironment';
import warningWithoutStack from 'shared/warningWithoutStack';
import type {ReactEventResponderEventType} from 'shared/ReactTypes';
import type {ReactDOMEventResponderEventType} from 'shared/ReactDOMTypes';
import type {DOMTopLevelEventType} from 'events/TopLevelEventTypes';
import {
setListenToResponderEventTypes,
Expand Down Expand Up @@ -1287,7 +1287,7 @@ export function restoreControlledState(
}

export function listenToEventResponderEventTypes(
eventTypes: Array<ReactEventResponderEventType>,
eventTypes: Array<ReactDOMEventResponderEventType>,
element: Element | Document,
): void {
if (enableEventAPI) {
Expand Down
7 changes: 6 additions & 1 deletion packages/react-dom/src/client/ReactDOMHostConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import dangerousStyleValue from '../shared/dangerousStyleValue';

import type {DOMContainer} from './ReactDOM';
import type {ReactEventComponentInstance} from 'shared/ReactTypes';
import type {ReactDOMEventResponder} from 'shared/ReactDOMTypes';
import {
mountEventResponder,
unmountEventResponder,
Expand Down Expand Up @@ -101,6 +102,7 @@ export type UpdatePayload = Array<mixed>;
export type ChildSet = void; // Unused
export type TimeoutHandle = TimeoutID;
export type NoTimeout = -1;
export type EventResponder = ReactDOMEventResponder;

import {
enableSuspenseServerRenderer,
Expand Down Expand Up @@ -905,7 +907,10 @@ export function mountEventComponent(
const doc = rootContainerInstance.ownerDocument;
const documentBody = doc.body || doc;
const responder = eventComponentInstance.responder;
const {rootEventTypes, targetEventTypes} = responder;
const {
rootEventTypes,
targetEventTypes,
} = ((responder: any): ReactDOMEventResponder);
if (targetEventTypes !== undefined) {
listenToEventResponderEventTypes(targetEventTypes, documentBody);
}
Expand Down
58 changes: 30 additions & 28 deletions packages/react-dom/src/events/DOMEventResponderSystem.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ import {
HostComponent,
} from 'shared/ReactWorkTags';
import type {
ReactEventResponder,
ReactEventResponderEventType,
ReactEventComponentInstance,
ReactResponderContext,
ReactResponderEvent,
EventPriority,
} from 'shared/ReactTypes';
import type {
ReactDOMEventResponder,
ReactDOMEventResponderEventType,
ReactDOMResponderContext,
ReactDOMResponderEvent,
} from 'shared/ReactDOMTypes';
import type {DOMTopLevelEventType} from 'events/TopLevelEventTypes';
import {
batchedEventUpdates,
Expand Down Expand Up @@ -95,7 +97,7 @@ const rootEventTypesToEventComponentInstances: Map<
Set<ReactEventComponentInstance>,
> = new Map();
const targetEventTypeCached: Map<
Array<ReactEventResponderEventType>,
Array<ReactDOMEventResponderEventType>,
Set<string>,
> = new Map();
const ownershipChangeListeners: Set<ReactEventComponentInstance> = new Set();
Expand All @@ -116,7 +118,7 @@ let currentInstance: null | ReactEventComponentInstance = null;
let currentEventQueue: null | EventQueue = null;
let currentTimerIDCounter = 0;

const eventResponderContext: ReactResponderContext = {
const eventResponderContext: ReactDOMResponderContext = {
dispatchEvent(
possibleEventObject: Object,
listener: ($Shape<PartialEventObject>) => void,
Expand Down Expand Up @@ -186,7 +188,7 @@ const eventResponderContext: ReactResponderContext = {
eventListeners.set(eventObject, listener);
eventQueue.events.push(eventObject);
},
isEventWithinTouchHitTarget(event: ReactResponderEvent): boolean {
isEventWithinTouchHitTarget(event: ReactDOMResponderEvent): boolean {
validateResponderContext();
const target = event.target;
const nativeEvent = event.nativeEvent;
Expand Down Expand Up @@ -254,7 +256,9 @@ const eventResponderContext: ReactResponderContext = {
}
return false;
},
addRootEventTypes(rootEventTypes: Array<ReactEventResponderEventType>): void {
addRootEventTypes(
rootEventTypes: Array<ReactDOMEventResponderEventType>,
): void {
validateResponderContext();
const activeDocument = getActiveDocument();
listenToResponderEventTypesImpl(rootEventTypes, activeDocument);
Expand All @@ -265,7 +269,7 @@ const eventResponderContext: ReactResponderContext = {
}
},
removeRootEventTypes(
rootEventTypes: Array<ReactEventResponderEventType>,
rootEventTypes: Array<ReactDOMEventResponderEventType>,
): void {
validateResponderContext();
for (let i = 0; i < rootEventTypes.length; i++) {
Expand Down Expand Up @@ -375,7 +379,7 @@ const eventResponderContext: ReactResponderContext = {
},
getActiveDocument,
objectAssign: Object.assign,
getEventCurrentTarget(event: ReactResponderEvent): Element {
getEventCurrentTarget(event: ReactDOMResponderEvent): Element {
validateResponderContext();
const target = event.target;
let fiber = getClosestInstanceFromNode(target);
Expand Down Expand Up @@ -531,13 +535,13 @@ function processTimers(
}
}

function createResponderEvent(
function createDOMResponderEvent(
topLevelType: string,
nativeEvent: AnyNativeEvent,
nativeEventTarget: Element | Document,
passive: boolean,
passiveSupported: boolean,
): ReactResponderEvent {
): ReactDOMResponderEvent {
const {pointerType} = (nativeEvent: any);
let eventPointerType = '';
let pointerId = null;
Expand Down Expand Up @@ -589,7 +593,7 @@ function processEvents(events: Array<EventObjectType>): void {
}
}

export function processEventQueue(): void {
function processEventQueue(): void {
const {events, eventPriority} = ((currentEventQueue: any): EventQueue);

if (events.length === 0) {
Expand Down Expand Up @@ -622,8 +626,8 @@ export function processEventQueue(): void {
}
}

function getTargetEventTypesSet(
eventTypes: Array<ReactEventResponderEventType>,
function getDOMTargetEventTypesSet(
eventTypes: Array<ReactDOMEventResponderEventType>,
): Set<string> {
let cachedSet = targetEventTypeCached.get(eventTypes);

Expand Down Expand Up @@ -669,7 +673,7 @@ function getTargetEventResponderInstances(
const targetEventTypes = responder.targetEventTypes;
// Validate the target event type exists on the responder
if (targetEventTypes !== undefined) {
const targetEventTypesSet = getTargetEventTypesSet(targetEventTypes);
const targetEventTypesSet = getDOMTargetEventTypesSet(targetEventTypes);
if (targetEventTypesSet.has(listeningName)) {
eventResponderInstances.push(eventComponentInstance);
}
Expand Down Expand Up @@ -700,8 +704,8 @@ function getRootEventResponderInstances(

function shouldSkipEventComponent(
eventResponderInstance: ReactEventComponentInstance,
responder: ReactEventResponder,
propagatedEventResponders: null | Set<ReactEventResponder>,
responder: ReactDOMEventResponder,
propagatedEventResponders: null | Set<ReactDOMEventResponder>,
): boolean {
if (propagatedEventResponders !== null) {
if (propagatedEventResponders.has(responder)) {
Expand All @@ -716,9 +720,9 @@ function shouldSkipEventComponent(
}

function checkForLocalPropagationContinuation(
responder: ReactEventResponder,
propagatedEventResponders: Set<ReactEventResponder>,
) {
responder: ReactDOMEventResponder,
propagatedEventResponders: Set<ReactDOMEventResponder>,
): void {
if (continueLocalPropagation === true) {
propagatedEventResponders.delete(responder);
continueLocalPropagation = false;
Expand Down Expand Up @@ -748,14 +752,14 @@ function traverseAndHandleEventResponderInstances(
listeningName,
targetFiber,
);
const responderEvent = createResponderEvent(
const responderEvent = createDOMResponderEvent(
((topLevelType: any): string),
nativeEvent,
((nativeEventTarget: any): Element | Document),
isPassiveEvent,
isPassiveSupported,
);
const propagatedEventResponders: Set<ReactEventResponder> = new Set();
const propagatedEventResponders: Set<ReactDOMEventResponder> = new Set();
let length = targetEventResponderInstances.length;
let i;

Expand Down Expand Up @@ -964,7 +968,7 @@ export function dispatchEventForResponderEventSystem(

export function addRootEventTypesForComponentInstance(
eventComponentInstance: ReactEventComponentInstance,
rootEventTypes: Array<ReactEventResponderEventType>,
rootEventTypes: Array<ReactDOMEventResponderEventType>,
): void {
for (let i = 0; i < rootEventTypes.length; i++) {
const rootEventType = rootEventTypes[i];
Expand All @@ -973,7 +977,7 @@ export function addRootEventTypesForComponentInstance(
}

function registerRootEventType(
rootEventType: ReactEventResponderEventType,
rootEventType: ReactDOMEventResponderEventType,
eventComponentInstance: ReactEventComponentInstance,
): void {
let name = rootEventType;
Expand Down Expand Up @@ -1013,9 +1017,7 @@ function registerRootEventType(
name,
);
rootEventTypesSet.add(listeningName);
rootEventComponentInstances.add(
((eventComponentInstance: any): ReactEventComponentInstance),
);
rootEventComponentInstances.add(eventComponentInstance);
}

export function generateListeningKey(
Expand Down
24 changes: 12 additions & 12 deletions packages/react-events/src/Drag.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
*/

import type {
ReactResponderEvent,
ReactResponderContext,
EventPriority,
} from 'shared/ReactTypes';
ReactDOMResponderEvent,
ReactDOMResponderContext,
} from 'shared/ReactDOMTypes';
import type {EventPriority} from 'shared/ReactTypes';

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

const targetEventTypes = ['pointerdown'];
Expand Down Expand Up @@ -58,7 +58,7 @@ type DragEvent = {|
|};

function createDragEvent(
context: ReactResponderContext,
context: ReactDOMResponderContext,
type: DragEventType,
target: Element | Document,
eventData?: EventData,
Expand All @@ -72,7 +72,7 @@ function createDragEvent(
}

function dispatchDragEvent(
context: ReactResponderContext,
context: ReactDOMResponderContext,
name: DragEventType,
listener: DragEvent => void,
state: DragState,
Expand All @@ -99,8 +99,8 @@ const DragResponder = {
},
allowMultipleHostChildren: false,
onEvent(
event: ReactResponderEvent,
context: ReactResponderContext,
event: ReactDOMResponderEvent,
context: ReactDOMResponderContext,
props: Object,
state: DragState,
): void {
Expand Down Expand Up @@ -142,8 +142,8 @@ const DragResponder = {
}
},
onRootEvent(
event: ReactResponderEvent,
context: ReactResponderContext,
event: ReactDOMResponderEvent,
context: ReactDOMResponderContext,
props: Object,
state: DragState,
): void {
Expand Down Expand Up @@ -259,4 +259,4 @@ const DragResponder = {
},
};

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