diff --git a/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap b/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap index 171674f0e90..0c0f3af3e22 100644 --- a/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap +++ b/packages/react-native-codegen/e2e/deep_imports/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap @@ -737,6 +737,9 @@ folly::dynamic MixedPropNativeComponentViewProps::getDiffProps( } folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps); + if (mixedProp != oldProps->mixedProp) { + result[\\"mixedProp\\"] = mixedProp; + } return result; } #endif diff --git a/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap b/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap index 524554979a7..31cf888ed2c 100644 --- a/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap +++ b/packages/react-native-codegen/e2e/namespaced/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap @@ -737,6 +737,9 @@ folly::dynamic MixedPropNativeComponentViewProps::getDiffProps( } folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps); + if (mixedProp != oldProps->mixedProp) { + result[\\"mixedProp\\"] = mixedProp; + } return result; } #endif diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsCpp.js b/packages/react-native-codegen/src/generators/components/GeneratePropsCpp.js index 02ae98c71f6..5f5f5ea4377 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsCpp.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsCpp.js @@ -152,6 +152,10 @@ function generatePropsDiffString( result["${prop.name}"] = toDynamic(${prop.name}); }`; case 'MixedTypeAnnotation': + return ` + if (${prop.name} != oldProps->${prop.name}) { + result["${prop.name}"] = ${prop.name}; + }`; default: // TODO: Implement diffProps for complex types return ''; diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js index 6c154a539b9..4fe83e16fad 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js @@ -755,10 +755,8 @@ function generateStruct( case 'Int32TypeAnnotation': case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': - return `result["${name}"] = ${name};`; case 'MixedTypeAnnotation': - // MixedTypeAnnotation does not support prop diffing codegen - return ''; + return `result["${name}"] = ${name};`; default: return `result["${name}"] = ::facebook::react::toDynamic(${name});`; } diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap index 0c01fb666d2..47aa78b823a 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap @@ -1152,6 +1152,9 @@ folly::dynamic MixedPropNativeComponentProps::getDiffProps( } folly::dynamic result = HostPlatformViewProps::getDiffProps(prevProps); + if (mixedProp != oldProps->mixedProp) { + result[\\"mixedProp\\"] = mixedProp; + } return result; } #endif