diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js index 3198e29bcf3..89e770687f5 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js @@ -90,7 +90,7 @@ function getJavaValueForProp( return '(ReadableArray) value'; } case 'ObjectTypeAnnotation': { - throw new Error('Object type is not implemented'); + return '(ReadableMap) value'; } case 'StringEnumTypeAnnotation': return '(String) value'; diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js index 93ab68ffd16..d9e521b4058 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js @@ -69,7 +69,8 @@ function getJavaValueForProp(prop: PropTypeShape, imports): string { return '@Nullable ReadableArray value'; } case 'ObjectTypeAnnotation': { - throw new Error('Object type is not implemented'); + addNullable(imports); + return '@Nullable ReadableMap value'; } case 'StringEnumTypeAnnotation': addNullable(imports); diff --git a/packages/react-native-codegen/src/generators/components/JavaHelpers.js b/packages/react-native-codegen/src/generators/components/JavaHelpers.js index 61bcb365f86..04f89398b37 100644 --- a/packages/react-native-codegen/src/generators/components/JavaHelpers.js +++ b/packages/react-native-codegen/src/generators/components/JavaHelpers.js @@ -77,6 +77,10 @@ function getImports(component: ComponentShape): Set { if (typeAnnotation.type === 'ArrayTypeAnnotation') { imports.add('import com.facebook.react.bridge.ReadableArray;'); } + + if (typeAnnotation.type === 'ObjectTypeAnnotation') { + imports.add('import com.facebook.react.bridge.ReadableMap;'); + } }); return imports; diff --git a/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaDelegate-test.js b/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaDelegate-test.js index 1a63057da2f..b9c5724c914 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaDelegate-test.js +++ b/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaDelegate-test.js @@ -17,7 +17,6 @@ const generator = require('../GeneratePropsJavaDelegate.js'); describe('GeneratePropsJavaDelegate', () => { Object.keys(fixtures) .sort() - .filter(fixtureName => fixtureName !== 'OBJECT_PROPS') .forEach(fixtureName => { const fixture = fixtures[fixtureName]; diff --git a/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaInterface-test.js b/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaInterface-test.js index a160a61fdf3..a14ac875cc7 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaInterface-test.js +++ b/packages/react-native-codegen/src/generators/components/__tests__/GeneratePropsJavaInterface-test.js @@ -17,7 +17,6 @@ const generator = require('../GeneratePropsJavaInterface.js'); describe('GeneratePropsJavaInterface', () => { Object.keys(fixtures) .sort() - .filter(fixtureName => fixtureName !== 'OBJECT_PROPS') .forEach(fixtureName => { const fixture = fixtures[fixtureName]; diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap index 8ca6e476b0e..3dcd4e116e9 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap @@ -503,6 +503,37 @@ public class NoPropsNoEventsComponentManagerDelegate " +package com.facebook.react.viewmanagers; + +import android.view.View; +import androidx.annotation.Nullable; +import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.uimanager.BaseViewManager; +import com.facebook.react.uimanager.BaseViewManagerDelegate; +import com.facebook.react.uimanager.LayoutShadowNode; + +public class ObjectPropsManagerDelegate & ObjectPropsManagerInterface> extends BaseViewManagerDelegate { + public ObjectPropsManagerDelegate(U viewManager) { + super(viewManager); + } + @Override + public void setProperty(T view, String propName, @Nullable Object value) { + switch (propName) { + case \\"objectProp\\": + mViewManager.setObjectProp(view, (ReadableMap) value); + break; + default: + super.setProperty(view, propName, value); + } + } +} +", +} +`; + exports[`GeneratePropsJavaDelegate can generate fixture POINT_PROP 1`] = ` Map { "PointPropNativeComponentManagerDelegate.java" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap index 5e9faf2bfdd..ac3e2c27d29 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap @@ -241,6 +241,22 @@ public interface NoPropsNoEventsComponentManagerInterface { } `; +exports[`GeneratePropsJavaInterface can generate fixture OBJECT_PROPS 1`] = ` +Map { + "ObjectPropsManagerInterface.java" => " +package com.facebook.react.viewmanagers; + +import android.view.View; +import androidx.annotation.Nullable; +import com.facebook.react.bridge.ReadableMap; + +public interface ObjectPropsManagerInterface { + void setObjectProp(T view, @Nullable ReadableMap value); +} +", +} +`; + exports[`GeneratePropsJavaInterface can generate fixture POINT_PROP 1`] = ` Map { "PointPropNativeComponentManagerInterface.java" => "