Skip to content

Commit 26472c8

Browse files
authored
Bubble onSubmit/onReset behind a feature flag (facebook#19333)
1 parent e2d73e9 commit 26472c8

11 files changed

+26
-5
lines changed

packages/react-dom/src/__tests__/ReactDOMEventListener-test.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ describe('ReactDOMEventListener', () => {
281281
// This is a special case for submit and reset events as they are listened on
282282
// at the element level and not the document.
283283
// @see https://github.com/facebook/react/pull/13462
284-
it('should not receive submit events if native, interim DOM handler prevents it', () => {
284+
it('should (or not) receive submit events if native, interim DOM handler prevents it', () => {
285285
const container = document.createElement('div');
286286
document.body.appendChild(container);
287287

@@ -316,8 +316,13 @@ describe('ReactDOMEventListener', () => {
316316
}),
317317
);
318318

319-
expect(handleSubmit).toHaveBeenCalled();
320-
expect(handleReset).toHaveBeenCalled();
319+
if (gate(flags => flags.enableFormEventDelegation)) {
320+
expect(handleSubmit).not.toHaveBeenCalled();
321+
expect(handleReset).not.toHaveBeenCalled();
322+
} else {
323+
expect(handleSubmit).toHaveBeenCalled();
324+
expect(handleReset).toHaveBeenCalled();
325+
}
321326
} finally {
322327
document.body.removeChild(container);
323328
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ import getListener from './getListener';
8585
import {passiveBrowserEventsSupported} from './checkPassiveEvents';
8686

8787
import {
88+
enableFormEventDelegation,
8889
enableLegacyFBSupport,
8990
enableCreateEventHandleAPI,
9091
enableScopeAPI,
@@ -222,8 +223,6 @@ export const capturePhaseEvents: Set<DOMTopLevelEventType> = new Set([
222223
TOP_CANCEL,
223224
TOP_CLOSE,
224225
TOP_INVALID,
225-
TOP_RESET,
226-
TOP_SUBMIT,
227226
TOP_ABORT,
228227
TOP_CAN_PLAY,
229228
TOP_CAN_PLAY_THROUGH,
@@ -249,6 +248,11 @@ export const capturePhaseEvents: Set<DOMTopLevelEventType> = new Set([
249248
TOP_WAITING,
250249
]);
251250

251+
if (!enableFormEventDelegation) {
252+
capturePhaseEvents.add(TOP_SUBMIT);
253+
capturePhaseEvents.add(TOP_RESET);
254+
}
255+
252256
if (enableCreateEventHandleAPI) {
253257
capturePhaseEvents.add(TOP_AFTER_BLUR);
254258
}

packages/shared/ReactFeatureFlags.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,6 @@ export const deferRenderPhaseUpdateToNextBatch = true;
127127

128128
// Replacement for runWithPriority in React internals.
129129
export const decoupleUpdatePriorityFromScheduler = false;
130+
131+
// Enables delegation for submit and reset events.
132+
export const enableFormEventDelegation = false;

packages/shared/forks/ReactFeatureFlags.native-fb.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const warnAboutSpreadingKeyToJSX = false;
4444
export const enableComponentStackLocations = false;
4545
export const enableLegacyFBSupport = false;
4646
export const enableFilterEmptyStringAttributesDOM = false;
47+
export const enableFormEventDelegation = false;
4748

4849
export const enableNewReconciler = false;
4950
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.native-oss.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const warnAboutSpreadingKeyToJSX = false;
4343
export const enableComponentStackLocations = false;
4444
export const enableLegacyFBSupport = false;
4545
export const enableFilterEmptyStringAttributesDOM = false;
46+
export const enableFormEventDelegation = false;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const warnAboutSpreadingKeyToJSX = false;
4343
export const enableComponentStackLocations = true;
4444
export const enableLegacyFBSupport = false;
4545
export const enableFilterEmptyStringAttributesDOM = false;
46+
export const enableFormEventDelegation = false;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.www.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const warnAboutSpreadingKeyToJSX = false;
4343
export const enableComponentStackLocations = true;
4444
export const enableLegacyFBSupport = false;
4545
export const enableFilterEmptyStringAttributesDOM = false;
46+
export const enableFormEventDelegation = false;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.testing.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const warnAboutSpreadingKeyToJSX = false;
4343
export const enableComponentStackLocations = true;
4444
export const enableLegacyFBSupport = false;
4545
export const enableFilterEmptyStringAttributesDOM = false;
46+
export const enableFormEventDelegation = false;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.testing.www.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const warnAboutSpreadingKeyToJSX = false;
4343
export const enableComponentStackLocations = true;
4444
export const enableLegacyFBSupport = !__EXPERIMENTAL__;
4545
export const enableFilterEmptyStringAttributesDOM = false;
46+
export const enableFormEventDelegation = false;
4647

4748
export const enableNewReconciler = false;
4849
export const deferRenderPhaseUpdateToNextBatch = true;

packages/shared/forks/ReactFeatureFlags.www-dynamic.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
4343
// to __VARIANT__.
4444
export const enableTrustedTypesIntegration = false;
4545
export const disableSchedulerTimeoutBasedOnReactExpirationTime = false;
46+
47+
export const enableFormEventDelegation = __VARIANT__;

0 commit comments

Comments
 (0)