diff --git a/React/Base/RCTBridge.h b/React/Base/RCTBridge.h index cb9a0b11abd..0033a40579a 100644 --- a/React/Base/RCTBridge.h +++ b/React/Base/RCTBridge.h @@ -164,6 +164,11 @@ RCT_EXTERN void RCTEnableTurboModuleSharedMutexInit(BOOL enabled); RCT_EXTERN BOOL RCTTurboModuleManagerDelegateLockingDisabled(void); RCT_EXTERN void RCTDisableTurboModuleManagerDelegateLocking(BOOL enabled); +// Turn off validAttribute: entries inside ViewConfigs for events +// TODO(109509380): Remove this gating +RCT_EXTERN BOOL RCTViewConfigEventValidAttributesDisabled(void); +RCT_EXTERN void RCTDisableViewConfigEventValidAttributes(BOOL disabled); + typedef enum { kRCTGlobalScope, kRCTGlobalScopeUsingRetainJSCallback, diff --git a/React/Base/RCTBridge.m b/React/Base/RCTBridge.m index 278fc399d30..421dc451c40 100644 --- a/React/Base/RCTBridge.m +++ b/React/Base/RCTBridge.m @@ -162,6 +162,18 @@ void RCTDisableTurboModuleManagerDelegateLocking(BOOL disabled) turboModuleManagerDelegateLockingDisabled = disabled; } +// Turn off TurboModule delegate locking +static BOOL viewConfigEventValidAttributesDisabled = NO; +BOOL RCTViewConfigEventValidAttributesDisabled(void) +{ + return viewConfigEventValidAttributesDisabled; +} + +void RCTDisableViewConfigEventValidAttributes(BOOL disabled) +{ + viewConfigEventValidAttributesDisabled = disabled; +} + @interface RCTBridge () @end diff --git a/React/Views/RCTComponentData.m b/React/Views/RCTComponentData.m index ac4505a9d3e..99807d4debe 100644 --- a/React/Views/RCTComponentData.m +++ b/React/Views/RCTComponentData.m @@ -428,10 +428,18 @@ static RCTPropBlock createNSInvocationSetter(NSMethodSignature *typeSignature, S if ([type isEqualToString:@"RCTBubblingEventBlock"]) { [bubblingEvents addObject:RCTNormalizeInputEventName(name)]; - propTypes[name] = @"BOOL"; + + // TODO(109509380): Remove this gating + if (!RCTViewConfigEventValidAttributesDisabled()) { + propTypes[name] = @"BOOL"; + } } else if ([type isEqualToString:@"RCTDirectEventBlock"]) { [directEvents addObject:RCTNormalizeInputEventName(name)]; - propTypes[name] = @"BOOL"; + + // TODO(109509380): Remove this gating + if (!RCTViewConfigEventValidAttributesDisabled()) { + propTypes[name] = @"BOOL"; + } } else { propTypes[name] = type; } diff --git a/packages/babel-plugin-codegen/__tests__/__snapshots__/index-test.js.snap b/packages/babel-plugin-codegen/__tests__/__snapshots__/index-test.js.snap index c324b68b283..57d6ddbdfac 100644 --- a/packages/babel-plugin-codegen/__tests__/__snapshots__/index-test.js.snap +++ b/packages/babel-plugin-codegen/__tests__/__snapshots__/index-test.js.snap @@ -45,9 +45,7 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ } }, validAttributes: { - boolean_default_true_optional_both: true, - onDirectEventDefinedInlineNull: true, - onBubblingEventDefinedInlineNull: true + boolean_default_true_optional_both: true } })); export const Commands = { @@ -107,9 +105,7 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ } }, validAttributes: { - boolean_default_true_optional_both: true, - onDirectEventDefinedInlineNull: true, - onBubblingEventDefinedInlineNull: true + boolean_default_true_optional_both: true } })); export const Commands = { diff --git a/packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GenerateViewConfigJs-test.js.snap b/packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GenerateViewConfigJs-test.js.snap index cd6c6d430bb..48d7345e998 100644 --- a/packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GenerateViewConfigJs-test.js.snap +++ b/packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GenerateViewConfigJs-test.js.snap @@ -202,7 +202,6 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ validAttributes: { disabled: true, - onChange: true, }, })); ", @@ -293,12 +292,6 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ validAttributes: { disabled: true, - onChange: true, - onEventDirect: true, - onEventDirectWithPaperName: true, - onOrientationChange: true, - onEnd: true, - onEventBubblingWithPaperName: true, }, })); ", @@ -442,7 +435,6 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ validAttributes: { title: true, - onChange: true, }, })); ", diff --git a/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js b/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js index 16ef8142a44..7e69231a9a2 100644 --- a/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js +++ b/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js @@ -155,13 +155,6 @@ function normalizeInputEventName(name) { return name; } -// Replicates the behavior of viewConfig in RCTComponentData.m -function getValidAttributesForEvents(events) { - return events.map(eventType => { - return j.property('init', j.identifier(eventType.name), j.literal(true)); - }); -} - function generateBubblingEventInfo(event, nameOveride) { return j.property( 'init', @@ -234,7 +227,6 @@ function buildViewConfig( getReactDiffProcessValue(schemaProp.typeAnnotation), ); }), - ...getValidAttributesForEvents(componentEvents), ]); const bubblingEventNames = component.events diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap index c17ea039c37..2978af1e757 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap @@ -291,7 +291,6 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ validAttributes: { disabled: true, - onChange: true, }, })); ", @@ -349,10 +348,6 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ validAttributes: { disabled: true, - onChange: true, - onEventDirect: true, - onOrientationChange: true, - onEnd: true, }, })); ", @@ -408,10 +403,7 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ }, }, - validAttributes: { - onChange: true, - onDire tChange: true, - }, + validAttributes: {}, })); ", } @@ -673,7 +665,6 @@ export default NativeComponentRegistry.get(nativeComponentName, () => ({ validAttributes: { accessibilityHint: true, - onChange: true, }, })); ",