Skip to content

Commit abd7259

Browse files
javachefacebook-github-bot
authored andcommitted
Allow UnsafeMixed as Array value in codegen (#49324)
Summary: Pull Request resolved: #49324 Provide Android component codegen a bit more flexibility by allowing `$ReadOnlyArray<UnsafeMixed>` and avoid casting in the view manager. Changelog: [General][Added] Reviewed By: fabriziocucci Differential Revision: D69454101 fbshipit-source-id: c210647deffeb01b7db8aa07266e58c42acf14ba
1 parent aaa7279 commit abd7259

File tree

7 files changed

+14
-1
lines changed

7 files changed

+14
-1
lines changed

packages/react-native-codegen/e2e/__test_fixtures__/components/ArrayPropsNativeComponent.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import type {
2020
import type {
2121
Float,
2222
Int32,
23+
UnsafeMixed,
2324
WithDefault,
2425
} from 'react-native/Libraries/Types/CodegenTypes';
2526

@@ -41,6 +42,7 @@ type NativeProps = $ReadOnly<{
4142
sizes?: WithDefault<$ReadOnlyArray<'small' | 'large'>, 'small'>,
4243
object?: $ReadOnlyArray<$ReadOnly<{prop: string}>>,
4344
arrayOfObjects?: $ReadOnlyArray<$ReadOnly<{prop1: Float, prop2: Int32}>>,
45+
arrayOfMixed?: $ReadOnlyArray<UnsafeMixed>,
4446
}>;
4547

4648
export default (codegenNativeComponent<NativeProps>(

packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GeneratePropsCpp-test.js.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ ArrayPropsNativeComponentViewProps::ArrayPropsNativeComponentViewProps(
3636
dimensions(convertRawProp(context, rawProps, \\"dimensions\\", sourceProps.dimensions, {})),
3737
sizes(convertRawProp(context, rawProps, \\"sizes\\", ArrayPropsNativeComponentViewSizesMaskWrapped{ .value = sourceProps.sizes }, {static_cast<ArrayPropsNativeComponentViewSizesMask>(ArrayPropsNativeComponentViewSizes::Small)}).value),
3838
object(convertRawProp(context, rawProps, \\"object\\", sourceProps.object, {})),
39-
arrayOfObjects(convertRawProp(context, rawProps, \\"arrayOfObjects\\", sourceProps.arrayOfObjects, {}))
39+
arrayOfObjects(convertRawProp(context, rawProps, \\"arrayOfObjects\\", sourceProps.arrayOfObjects, {})),
40+
arrayOfMixed(convertRawProp(context, rawProps, \\"arrayOfMixed\\", sourceProps.arrayOfMixed, {}))
4041
{}
4142
4243
} // namespace facebook::react

packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GeneratePropsH-test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ class ArrayPropsNativeComponentViewProps final : public ViewProps {
162162
ArrayPropsNativeComponentViewSizesMask sizes{static_cast<ArrayPropsNativeComponentViewSizesMask>(ArrayPropsNativeComponentViewSizes::Small)};
163163
std::vector<ArrayPropsNativeComponentViewObjectStruct> object{};
164164
std::vector<ArrayPropsNativeComponentViewArrayOfObjectsStruct> arrayOfObjects{};
165+
std::vector<folly::dynamic> arrayOfMixed{};
165166
};
166167
167168
} // namespace facebook::react

packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GeneratePropsJavaDelegate-test.js.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ public class ArrayPropsNativeComponentViewManagerDelegate<T extends View, U exte
6363
case \\"arrayOfObjects\\":
6464
mViewManager.setArrayOfObjects(view, (ReadableArray) value);
6565
break;
66+
case \\"arrayOfMixed\\":
67+
mViewManager.setArrayOfMixed(view, (ReadableArray) value);
68+
break;
6669
default:
6770
super.setProperty(view, propName, value);
6871
}

packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GeneratePropsJavaInterface-test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public interface ArrayPropsNativeComponentViewManagerInterface<T extends View> e
3131
void setSizes(T view, @Nullable ReadableArray value);
3232
void setObject(T view, @Nullable ReadableArray value);
3333
void setArrayOfObjects(T view, @Nullable ReadableArray value);
34+
void setArrayOfMixed(T view, @Nullable ReadableArray value);
3435
}
3536
",
3637
}

packages/react-native-codegen/e2e/__tests__/components/__snapshots__/GenerateViewConfigJs-test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export const __INTERNAL_VIEW_CONFIG = {
4141
sizes: true,
4242
object: true,
4343
arrayOfObjects: true,
44+
arrayOfMixed: true,
4445
},
4546
};
4647

packages/react-native-codegen/src/parsers/flow/components/componentsUtils.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ function getTypeAnnotationForArray<+T>(
143143
return {
144144
type: 'StringTypeAnnotation',
145145
};
146+
case 'UnsafeMixed':
147+
return {
148+
type: 'MixedTypeAnnotation',
149+
};
146150
case 'UnionTypeAnnotation':
147151
typeAnnotation.types.reduce((lastType, currType) => {
148152
if (lastType && currType.type !== lastType.type) {

0 commit comments

Comments
 (0)