diff --git a/packages/react-native-codegen/src/CodegenSchema.js b/packages/react-native-codegen/src/CodegenSchema.js index cf17f07061e..ee66a2ec920 100644 --- a/packages/react-native-codegen/src/CodegenSchema.js +++ b/packages/react-native-codegen/src/CodegenSchema.js @@ -101,6 +101,10 @@ type PropTypeTypeAnnotation = type: 'NativePrimitiveTypeAnnotation', name: 'ColorPrimitive' | 'ImageSourcePrimitive' | 'PointPrimitive', |}> + | $ReadOnly<{| + type: 'ObjectTypeAnnotation', + properties: ?$ReadOnlyArray, + |}> | $ReadOnly<{| type: 'ArrayTypeAnnotation', elementType: diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js index 64ffc352ead..c321fa6fd29 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js @@ -173,6 +173,9 @@ function getNativeTypeFromAnnotation(componentName: string, prop): string { }); return `std::vector<${itemAnnotation}>`; } + case 'ObjectTypeAnnotation': { + throw new Error('Object type is not implemented'); + } case 'StringEnumTypeAnnotation': return getEnumName(componentName, prop.name); default: @@ -228,6 +231,9 @@ function convertDefaultTypeToString(componentName: string, prop): string { return ''; } } + case 'ObjectTypeAnnotation': { + throw new Error('Object type is not implemented'); + } case 'StringEnumTypeAnnotation': return `${getEnumName(componentName, prop.name)}::${toSafeCppString( typeAnnotation.default, diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js index cb8fefbda33..3198e29bcf3 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js @@ -89,6 +89,9 @@ function getJavaValueForProp( case 'ArrayTypeAnnotation': { return '(ReadableArray) value'; } + case 'ObjectTypeAnnotation': { + throw new Error('Object type is not implemented'); + } case 'StringEnumTypeAnnotation': return '(String) value'; default: diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js index 853dd89c32b..93ab68ffd16 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js @@ -68,6 +68,9 @@ function getJavaValueForProp(prop: PropTypeShape, imports): string { addNullable(imports); return '@Nullable ReadableArray value'; } + case 'ObjectTypeAnnotation': { + throw new Error('Object type is not implemented'); + } case 'StringEnumTypeAnnotation': addNullable(imports); return '@Nullable String value'; diff --git a/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js b/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js index 75b45669fff..0062b0219dd 100644 --- a/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js +++ b/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js @@ -80,6 +80,8 @@ function getReactDiffProcessValue(typeAnnotation) { } } return j.literal(true); + case 'ObjectTypeAnnotation': + throw new Error('Object type is not implemented'); default: (typeAnnotation: empty); throw new Error( diff --git a/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js index 5cdbb151059..4bc9eac973a 100644 --- a/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js @@ -523,6 +523,133 @@ const ARRAY_PROPS: SchemaType = { }, }; +const OBJECT_PROPS: SchemaType = { + modules: { + ObjectPropsNativeComponent: { + components: { + ObjectProps: { + extendsProps: [ + { + type: 'ReactNativeBuiltInType', + knownTypeName: 'ReactNativeCoreViewProps', + }, + ], + events: [], + props: [ + { + name: 'objectProp', + optional: true, + typeAnnotation: { + type: 'ObjectTypeAnnotation', + properties: [ + { + name: 'stringProp', + optional: true, + typeAnnotation: { + type: 'StringTypeAnnotation', + default: '', + }, + }, + { + name: 'booleanProp', + optional: true, + typeAnnotation: { + type: 'BooleanTypeAnnotation', + default: false, + }, + }, + { + name: 'floatProp', + optional: true, + typeAnnotation: { + type: 'FloatTypeAnnotation', + default: 0.0, + }, + }, + { + name: 'intProp', + optional: true, + typeAnnotation: { + type: 'Int32TypeAnnotation', + default: 0, + }, + }, + { + name: 'stringEnumProp', + optional: true, + typeAnnotation: { + type: 'StringEnumTypeAnnotation', + default: 'option1', + options: [ + { + name: 'option1', + }, + ], + }, + }, + { + name: 'objectArrayProp', + optional: false, + typeAnnotation: { + type: 'ObjectTypeAnnotation', + properties: [ + { + name: 'array', + optional: true, + typeAnnotation: { + type: 'ArrayTypeAnnotation', + elementType: { + type: 'StringTypeAnnotation', + }, + }, + }, + ], + }, + }, + { + name: 'objectPrimitiveRequiredProp', + optional: false, + typeAnnotation: { + type: 'ObjectTypeAnnotation', + properties: [ + { + name: 'image', + optional: true, + typeAnnotation: { + type: 'NativePrimitiveTypeAnnotation', + name: 'ImageSourcePrimitive', + }, + }, + { + name: 'color', + optional: true, + typeAnnotation: { + type: 'NativePrimitiveTypeAnnotation', + name: 'ColorPrimitive', + }, + }, + { + name: 'point', + optional: true, + typeAnnotation: { + type: 'NativePrimitiveTypeAnnotation', + name: 'PointPrimitive', + }, + }, + ], + }, + }, + ], + }, + }, + ], + commands: [], + }, + }, + }, + }, +}; + const MULTI_NATIVE_PROP: SchemaType = { modules: { Slider: { @@ -1025,6 +1152,7 @@ module.exports = { IMAGE_PROP, POINT_PROP, ARRAY_PROPS, + // OBJECT_PROPS, MULTI_NATIVE_PROP, ENUM_PROP, EVENT_PROPS,