From e408749c31fd6242cfc93c6166de36d58042b5e4 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Wed, 19 Feb 2020 13:05:47 +0000 Subject: [PATCH] Add modern event system flag + rename legacy plugin module Add module --- .../ReactBrowserEventEmitter-test.internal.js | 16 ++++++++-------- .../react-dom/src/client/ReactDOMComponent.js | 4 ++-- ...inSystem.js => DOMLegacyEventPluginSystem.js} | 2 +- .../src/events/ReactDOMEventListener.js | 2 +- .../src/events/ReactDOMEventReplaying.js | 2 +- .../react-dom/src/events/SelectEventPlugin.js | 2 +- packages/shared/ReactFeatureFlags.js | 3 +++ .../shared/forks/ReactFeatureFlags.native-fb.js | 1 + .../shared/forks/ReactFeatureFlags.native-oss.js | 1 + .../shared/forks/ReactFeatureFlags.persistent.js | 1 + .../forks/ReactFeatureFlags.test-renderer.js | 1 + .../forks/ReactFeatureFlags.test-renderer.www.js | 1 + .../shared/forks/ReactFeatureFlags.testing.js | 1 + .../forks/ReactFeatureFlags.testing.www.js | 1 + packages/shared/forks/ReactFeatureFlags.www.js | 2 ++ 15 files changed, 26 insertions(+), 14 deletions(-) rename packages/react-dom/src/events/{DOMEventPluginSystem.js => DOMLegacyEventPluginSystem.js} (99%) diff --git a/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js b/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js index 0b377d16ece..64099b4b8fe 100644 --- a/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js @@ -14,7 +14,7 @@ let EventPluginRegistry; let React; let ReactDOM; let ReactDOMComponentTree; -let DOMEventPluginSystem; +let listenToEvent; let ReactDOMEventListener; let ReactTestUtils; @@ -54,8 +54,7 @@ function registerSimpleTestHandler() { } // We should probably remove this file at some point, it's just full of -// internal API usage. ReactBrowserEventEmitter was refactored out in -// #18056 too. The majority of this code lives in DOMEventPluginSystem. +// internal API usage. describe('ReactBrowserEventEmitter', () => { beforeEach(() => { jest.resetModules(); @@ -66,7 +65,8 @@ describe('ReactBrowserEventEmitter', () => { React = require('react'); ReactDOM = require('react-dom'); ReactDOMComponentTree = require('../client/ReactDOMComponentTree'); - DOMEventPluginSystem = require('../events/DOMEventPluginSystem'); + listenToEvent = require('../events/DOMLegacyEventPluginSystem') + .legacyListenToEvent; ReactDOMEventListener = require('../events/ReactDOMEventListener'); ReactTestUtils = require('react-dom/test-utils'); @@ -350,15 +350,15 @@ describe('ReactBrowserEventEmitter', () => { it('should listen to events only once', () => { spyOnDevAndProd(EventTarget.prototype, 'addEventListener'); - DOMEventPluginSystem.listenToEvent(ON_CLICK_KEY, document); - DOMEventPluginSystem.listenToEvent(ON_CLICK_KEY, document); + listenToEvent(ON_CLICK_KEY, document); + listenToEvent(ON_CLICK_KEY, document); expect(EventTarget.prototype.addEventListener).toHaveBeenCalledTimes(1); }); it('should work with event plugins without dependencies', () => { spyOnDevAndProd(EventTarget.prototype, 'addEventListener'); - DOMEventPluginSystem.listenToEvent(ON_CLICK_KEY, document); + listenToEvent(ON_CLICK_KEY, document); expect(EventTarget.prototype.addEventListener.calls.argsFor(0)[0]).toBe( 'click', @@ -368,7 +368,7 @@ describe('ReactBrowserEventEmitter', () => { it('should work with event plugins with dependencies', () => { spyOnDevAndProd(EventTarget.prototype, 'addEventListener'); - DOMEventPluginSystem.listenToEvent(ON_CHANGE_KEY, document); + listenToEvent(ON_CHANGE_KEY, document); const setEventListeners = []; const listenCalls = EventTarget.prototype.addEventListener.calls.allArgs(); diff --git a/packages/react-dom/src/client/ReactDOMComponent.js b/packages/react-dom/src/client/ReactDOMComponent.js index aa01964f9bf..854137dec6f 100644 --- a/packages/react-dom/src/client/ReactDOMComponent.js +++ b/packages/react-dom/src/client/ReactDOMComponent.js @@ -87,7 +87,7 @@ import { enableDeprecatedFlareAPI, enableTrustedTypesIntegration, } from 'shared/ReactFeatureFlags'; -import {listenToEvent} from '../events/DOMEventPluginSystem'; +import {legacyListenToEvent} from '../events/DOMLegacyEventPluginSystem'; let didWarnInvalidHydration = false; let didWarnShadyDOM = false; @@ -272,7 +272,7 @@ function ensureListeningTo( const doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument; - listenToEvent(registrationName, doc); + legacyListenToEvent(registrationName, doc); } function getOwnerDocumentFromRootContainer( diff --git a/packages/react-dom/src/events/DOMEventPluginSystem.js b/packages/react-dom/src/events/DOMLegacyEventPluginSystem.js similarity index 99% rename from packages/react-dom/src/events/DOMEventPluginSystem.js rename to packages/react-dom/src/events/DOMLegacyEventPluginSystem.js index ad8b38f794f..064dd2ee1f5 100644 --- a/packages/react-dom/src/events/DOMEventPluginSystem.js +++ b/packages/react-dom/src/events/DOMLegacyEventPluginSystem.js @@ -307,7 +307,7 @@ export function dispatchEventForPluginEventSystem( * @param {string} registrationName Name of listener (e.g. `onClick`). * @param {object} mountAt Container where to mount the listener */ -export function listenToEvent( +export function legacyListenToEvent( registrationName: string, mountAt: Document | Element | Node, ): void { diff --git a/packages/react-dom/src/events/ReactDOMEventListener.js b/packages/react-dom/src/events/ReactDOMEventListener.js index e119fafa48e..dfeb91508a3 100644 --- a/packages/react-dom/src/events/ReactDOMEventListener.js +++ b/packages/react-dom/src/events/ReactDOMEventListener.js @@ -60,7 +60,7 @@ import { DiscreteEvent, } from 'shared/ReactTypes'; import {getEventPriorityForPluginSystem} from './DOMEventProperties'; -import {dispatchEventForPluginEventSystem} from './DOMEventPluginSystem'; +import {dispatchEventForPluginEventSystem} from './DOMLegacyEventPluginSystem'; const { unstable_UserBlockingPriority: UserBlockingPriority, diff --git a/packages/react-dom/src/events/ReactDOMEventReplaying.js b/packages/react-dom/src/events/ReactDOMEventReplaying.js index 36a78b5d0fc..90a671666e0 100644 --- a/packages/react-dom/src/events/ReactDOMEventReplaying.js +++ b/packages/react-dom/src/events/ReactDOMEventReplaying.js @@ -117,7 +117,7 @@ import { TOP_BLUR, } from './DOMTopLevelEventTypes'; import {IS_REPLAYED} from 'legacy-events/EventSystemFlags'; -import {listenToTopLevelEvent} from './DOMEventPluginSystem'; +import {listenToTopLevelEvent} from './DOMLegacyEventPluginSystem'; type QueuedReplayableEvent = {| blockedOn: null | Container | SuspenseInstance, diff --git a/packages/react-dom/src/events/SelectEventPlugin.js b/packages/react-dom/src/events/SelectEventPlugin.js index 2c3da14bbe1..d1ab609abde 100644 --- a/packages/react-dom/src/events/SelectEventPlugin.js +++ b/packages/react-dom/src/events/SelectEventPlugin.js @@ -26,7 +26,7 @@ import getActiveElement from '../client/getActiveElement'; import {getNodeFromInstance} from '../client/ReactDOMComponentTree'; import {hasSelectionCapabilities} from '../client/ReactInputSelection'; import {DOCUMENT_NODE} from '../shared/HTMLNodeType'; -import {isListeningToAllDependencies} from './DOMEventPluginSystem'; +import {isListeningToAllDependencies} from './DOMLegacyEventPluginSystem'; const skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11; diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index 0dd89f7674a..6b944204ccb 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -130,3 +130,6 @@ export const warnUnstableRenderSubtreeIntoContainer = false; // Disables ReactDOM.unstable_createPortal export const disableUnstableCreatePortal = false; + +// Modern event system where events get registered at roots +export const enableModernEventSystem = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index aad18e8e78b..19409ce925c 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -54,6 +54,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = false; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = false; +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index f25f6d5ff61..df188fe760d 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -49,6 +49,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = false; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = false; +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.persistent.js b/packages/shared/forks/ReactFeatureFlags.persistent.js index 0a20f79fd9e..5a9cc55e0c0 100644 --- a/packages/shared/forks/ReactFeatureFlags.persistent.js +++ b/packages/shared/forks/ReactFeatureFlags.persistent.js @@ -49,6 +49,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = false; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = false; +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index 15e7314dfe7..822367acf40 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -49,6 +49,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = false; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = true; // this should probably *never* change +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index 924aece014e..f27e4eb97a1 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -49,6 +49,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = false; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = true; // this should probably *never* change +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.testing.js b/packages/shared/forks/ReactFeatureFlags.testing.js index 64af39fb501..09ecab1560b 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.js @@ -49,6 +49,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = false; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = true; +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.testing.www.js b/packages/shared/forks/ReactFeatureFlags.testing.www.js index 1bc7b9f0788..31acf556ffd 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.www.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.www.js @@ -49,6 +49,7 @@ export const warnUnstableRenderSubtreeIntoContainer = false; export const disableUnstableCreatePortal = __EXPERIMENTAL__; export const deferPassiveEffectCleanupDuringUnmount = false; export const isTestEnvironment = true; +export const enableModernEventSystem = false; // Only used in www builds. export function addUserTimingListener() { diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index eff0275c99f..eba43580bf8 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -111,6 +111,8 @@ export const disableUnstableCreatePortal = __EXPERIMENTAL__; export const isTestEnvironment = false; +export const enableModernEventSystem = false; + // Flow magic to verify the exports of this file match the original version. // eslint-disable-next-line no-unused-vars type Check<_X, Y: _X, X: Y = _X> = null;