Skip to content

Commit

Permalink
Add enum example to Android/iOS rn-tester TurboModule (facebook#35133)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: facebook#35133

Add enum example to Android/iOS rn-tester TurboModule

Changelog:
[General][Added] - Add enum example to Android/iOS rn-tester TurboModule

Reviewed By: javache

Differential Revision: D40711269

fbshipit-source-id: 4fb1be87072af62ad03c5cd5592343e7d0ce8ee0
  • Loading branch information
christophpurrer authored and facebook-github-bot committed Feb 2, 2023
1 parent bad2e32 commit 035fdee
Show file tree
Hide file tree
Showing 16 changed files with 120 additions and 7 deletions.
1 change: 1 addition & 0 deletions BUCK
Original file line number Diff line number Diff line change
Expand Up @@ -742,6 +742,7 @@ rn_library(
"//xplat/js:node_modules__base64_19js",
"//xplat/js:node_modules__deprecated_19react_19native_19prop_19types",
"//xplat/js:node_modules__event_19target_19shim",
"//xplat/js:node_modules__flow_19enums_19runtime",
"//xplat/js:node_modules__invariant",
"//xplat/js:node_modules__memoize_19one",
"//xplat/js:node_modules__nullthrows",
Expand Down
6 changes: 6 additions & 0 deletions Libraries/TurboModule/samples/NativeSampleTurboModule.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ import type {RootTag, TurboModule} from '../RCTExport';

import * as TurboModuleRegistry from '../TurboModuleRegistry';

export enum EnumInt {
A = 23,
B = 42,
}

export interface Spec extends TurboModule {
// Exported methods.
+getConstants: () => {|
Expand All @@ -22,6 +27,7 @@ export interface Spec extends TurboModule {
|};
+voidFunc: () => void;
+getBool: (arg: boolean) => boolean;
+getEnum?: (arg: EnumInt) => EnumInt;
+getNumber: (arg: number) => number;
+getString: (arg: string) => string;
+getArray: (arg: Array<any>) => Array<any>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ static jsi::Value __hostFunction_NativeSampleTurboCxxModuleSpecJSI_getBool(
->getBool(rt, args[0].getBool()));
}

static jsi::Value __hostFunction_NativeSampleTurboCxxModuleSpecJSI_getEnum(
jsi::Runtime &rt,
TurboModule &turboModule,
const jsi::Value *args,
size_t count) {
return jsi::Value(
static_cast<NativeSampleTurboCxxModuleSpecJSI *>(&turboModule)
->getEnum(rt, args[0].getNumber()));
}

static jsi::Value __hostFunction_NativeSampleTurboCxxModuleSpecJSI_getNumber(
jsi::Runtime &rt,
TurboModule &turboModule,
Expand Down Expand Up @@ -119,6 +129,8 @@ NativeSampleTurboCxxModuleSpecJSI::NativeSampleTurboCxxModuleSpecJSI(
0, __hostFunction_NativeSampleTurboCxxModuleSpecJSI_voidFunc};
methodMap_["getBool"] = MethodMetadata{
1, __hostFunction_NativeSampleTurboCxxModuleSpecJSI_getBool};
methodMap_["getEnum"] = MethodMetadata{
1, __hostFunction_NativeSampleTurboCxxModuleSpecJSI_getEnum};
methodMap_["getNumber"] = MethodMetadata{
1, __hostFunction_NativeSampleTurboCxxModuleSpecJSI_getNumber};
methodMap_["getString"] = MethodMetadata{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class JSI_EXPORT NativeSampleTurboCxxModuleSpecJSI : public TurboModule {
public:
virtual void voidFunc(jsi::Runtime &rt) = 0;
virtual bool getBool(jsi::Runtime &rt, bool arg) = 0;
virtual double getEnum(jsi::Runtime &rt, double arg) = 0;
virtual double getNumber(jsi::Runtime &rt, double arg) = 0;
virtual jsi::String getString(jsi::Runtime &rt, const jsi::String &arg) = 0;
virtual jsi::Array getArray(jsi::Runtime &rt, const jsi::Array &arg) = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ bool SampleTurboCxxModule::getBool(jsi::Runtime &rt, bool arg) {
return arg;
}

double SampleTurboCxxModule::getEnum(jsi::Runtime &rt, double arg) {
return arg;
}

double SampleTurboCxxModule::getNumber(jsi::Runtime &rt, double arg) {
return arg;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class SampleTurboCxxModule : public NativeSampleTurboCxxModuleSpecJSI {

void voidFunc(jsi::Runtime &rt) override;
bool getBool(jsi::Runtime &rt, bool arg) override;
double getEnum(jsi::Runtime &rt, double arg) override;
double getNumber(jsi::Runtime &rt, double arg) override;
jsi::String getString(jsi::Runtime &rt, const jsi::String &arg) override;
jsi::Array getArray(jsi::Runtime &rt, const jsi::Array &arg) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ public NativeSampleTurboModuleSpec(ReactApplicationContext reactContext) {
@ReactMethod(isBlockingSynchronousMethod = true)
public abstract boolean getBool(boolean arg);

@ReactMethod(isBlockingSynchronousMethod = true)
public abstract double getEnum(double arg);

protected abstract Map<String, Object> getTypedExportedConstants();

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,18 @@ __hostFunction_NativeSampleTurboModuleSpecJSI_getBool(
rt, BooleanKind, "getBool", "(Z)Z", args, count, cachedMethodId);
}

static facebook::jsi::Value
__hostFunction_NativeSampleTurboModuleSpecJSI_getEnum(
facebook::jsi::Runtime &rt,
TurboModule &turboModule,
const facebook::jsi::Value *args,
size_t count) {
static jmethodID cachedMethodId = nullptr;
return static_cast<JavaTurboModule &>(turboModule)
.invokeJavaMethod(
rt, NumberKind, "getEnum", "(D)D", args, count, cachedMethodId);
}

static facebook::jsi::Value
__hostFunction_NativeSampleTurboModuleSpecJSI_getNumber(
facebook::jsi::Runtime &rt,
Expand Down Expand Up @@ -195,6 +207,9 @@ NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI(
methodMap_["getBool"] =
MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getBool};

methodMap_["getEnum"] =
MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getEnum};

methodMap_["getNumber"] = MethodMetadata{
1, __hostFunction_NativeSampleTurboModuleSpecJSI_getNumber};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ public boolean getBool(boolean arg) {
return arg;
}

@DoNotStrip
@SuppressWarnings("unused")
@Override
public double getEnum(double arg) {
log("getEnum", arg, arg);
return arg;
}

@Override
protected Map<String, Object> getTypedExportedConstants() {
Map<String, Object> result = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

- (void)voidFunc;
- (NSNumber *)getBool:(BOOL)arg;
- (NSNumber *)getEnum:(double)arg;
- (NSNumber *)getNumber:(double)arg;
- (NSString *)getString:(NSString *)arg;
- (NSArray<id<NSObject>> *)getArray:(NSArray *)arg;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@
.invokeObjCMethod(rt, BooleanKind, "getBool", @selector(getBool:), args, count);
}

static facebook::jsi::Value __hostFunction_NativeSampleTurboModuleSpecJSI_getEnum(
facebook::jsi::Runtime &rt,
TurboModule &turboModule,
const facebook::jsi::Value *args,
size_t count)
{
return static_cast<ObjCTurboModule &>(turboModule)
.invokeObjCMethod(rt, NumberKind, "getEnum", @selector(getEnum:), args, count);
}

static facebook::jsi::Value __hostFunction_NativeSampleTurboModuleSpecJSI_getNumber(
facebook::jsi::Runtime &rt,
TurboModule &turboModule,
Expand Down Expand Up @@ -136,6 +146,7 @@
{
methodMap_["voidFunc"] = MethodMetadata{0, __hostFunction_NativeSampleTurboModuleSpecJSI_voidFunc};
methodMap_["getBool"] = MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getBool};
methodMap_["getEnum"] = MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getEnum};
methodMap_["getNumber"] = MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getNumber};
methodMap_["getString"] = MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getString};
methodMap_["getArray"] = MethodMetadata{1, __hostFunction_NativeSampleTurboModuleSpecJSI_getArray};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ - (NSDictionary *)constantsToExport
return @(arg);
}

RCT_EXPORT_SYNCHRONOUS_TYPED_METHOD(NSNumber *, getEnum : (double)arg)
{
return @(arg);
}

RCT_EXPORT_SYNCHRONOUS_TYPED_METHOD(NSNumber *, getNumber : (double)arg)
{
return @(arg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ std::vector<CxxModule::Method> SampleTurboCxxModuleLegacyImpl::getMethods() {
return getBool(xplat::jsArgAsBool(args, 0));
},
CxxModule::SyncTag),
CxxModule::Method(
"getEnum",
[this](folly::dynamic args) {
return getEnum(xplat::jsArgAsDouble(args, 0));
},
CxxModule::SyncTag),
CxxModule::Method(
"getNumber",
[this](folly::dynamic args) {
Expand Down Expand Up @@ -114,6 +120,10 @@ bool SampleTurboCxxModuleLegacyImpl::getBool(bool arg) {
return arg;
}

double SampleTurboCxxModuleLegacyImpl::getEnum(double arg) {
return arg;
}

double SampleTurboCxxModuleLegacyImpl::getNumber(double arg) {
return arg;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class SampleTurboCxxModuleLegacyImpl
// API
void voidFunc();
bool getBool(bool arg);
double getEnum(double arg);
double getNumber(double arg);
std::string getString(const std::string &arg);
folly::dynamic getArray(const folly::dynamic &arg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

exports[`Babel plugin inline view configs can inline config for FullNativeComponent.js 1`] = `
"// @flow
const codegenNativeCommands = require('codegenNativeCommands');
const codegenNativeComponent = require('codegenNativeComponent');
import type { Int32, BubblingEventHandler, DirectEventHandler, WithDefault } from 'CodegenFlowtypes';
import type { NativeComponentType } from 'codegenNativeComponent';
import type { ViewProps } from 'ViewPropTypes';
type ModuleProps = $ReadOnly<{|
...ViewProps,
type ModuleProps = $ReadOnly<{| ...ViewProps,
// Props
boolean_default_true_optional_both?: WithDefault<boolean, true>,
// Events
Expand All @@ -21,13 +21,17 @@ interface NativeCommands {
+hotspotUpdate: (viewRef: React.ElementRef<NativeType>, x: Int32, y: Int32) => void,
+scrollTo: (viewRef: React.ElementRef<NativeType>, y: Int32, animated: boolean) => void,
}
const NativeComponentRegistry = require('react-native/Libraries/NativeComponent/NativeComponentRegistry');
const {
ConditionallyIgnoredEventHandlers
} = require('react-native/Libraries/NativeComponent/ViewConfigIgnore');
const {
dispatchCommand
} = require(\\"react-native/Libraries/ReactNative/RendererProxy\\");
let nativeComponentName = 'RCTModule';
export const __INTERNAL_VIEW_CONFIG = {
uiViewClassName: 'RCTModule',
Expand Down Expand Up @@ -57,22 +61,24 @@ export const Commands = {
hotspotUpdate(ref, x, y) {
dispatchCommand(ref, \\"hotspotUpdate\\", [x, y]);
},
scrollTo(ref, y, animated) {
dispatchCommand(ref, \\"scrollTo\\", [y, animated]);
}
};"
`;
exports[`Babel plugin inline view configs can inline config for FullTypedNativeComponent.js 1`] = `
"// @flow
const codegenNativeCommands = require('codegenNativeCommands');
const codegenNativeComponent = require('codegenNativeComponent');
import type { NativeComponentType } from 'codegenNativeComponent';
import type { Int32, BubblingEventHandler, DirectEventHandler, WithDefault } from 'CodegenFlowtypes';
import type { ViewProps } from 'ViewPropTypes';
type ModuleProps = $ReadOnly<{|
...ViewProps,
type ModuleProps = $ReadOnly<{| ...ViewProps,
// Props
boolean_default_true_optional_both?: WithDefault<boolean, true>,
// Events
Expand All @@ -84,13 +90,17 @@ interface NativeCommands {
+hotspotUpdate: (viewRef: React.ElementRef<NativeType>, x: Int32, y: Int32) => void,
+scrollTo: (viewRef: React.ElementRef<NativeType>, y: Int32, animated: boolean) => void,
}
const NativeComponentRegistry = require('react-native/Libraries/NativeComponent/NativeComponentRegistry');
const {
ConditionallyIgnoredEventHandlers
} = require('react-native/Libraries/NativeComponent/ViewConfigIgnore');
const {
dispatchCommand
} = require(\\"react-native/Libraries/ReactNative/RendererProxy\\");
let nativeComponentName = 'RCTModule';
export const __INTERNAL_VIEW_CONFIG = {
uiViewClassName: 'RCTModule',
Expand Down Expand Up @@ -120,9 +130,11 @@ export const Commands = {
hotspotUpdate(ref, x, y) {
dispatchCommand(ref, \\"hotspotUpdate\\", [x, y]);
},
scrollTo(ref, y, animated) {
dispatchCommand(ref, \\"scrollTo\\", [y, animated]);
}
};"
`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*/

import NativeSampleTurboModule from 'react-native/Libraries/TurboModule/samples/NativeSampleTurboModule';
import {EnumInt} from 'react-native/Libraries/TurboModule/samples/NativeSampleTurboModule';
import type {RootTag} from 'react-native/Libraries/ReactNative/RootTag';
import {
StyleSheet,
Expand Down Expand Up @@ -57,6 +58,10 @@ class SampleTurboModuleExample extends React.Component<{||}, State> {
getConstants: () => NativeSampleTurboModule.getConstants(),
voidFunc: () => NativeSampleTurboModule.voidFunc(),
getBool: () => NativeSampleTurboModule.getBool(true),
getEnum: () =>
NativeSampleTurboModule.getEnum
? NativeSampleTurboModule.getEnum(EnumInt.A)
: null,
getNumber: () => NativeSampleTurboModule.getNumber(99.95),
getString: () => NativeSampleTurboModule.getString('Hello'),
getArray: () =>
Expand All @@ -80,6 +85,7 @@ class SampleTurboModuleExample extends React.Component<{||}, State> {
| 'callback'
| 'getArray'
| 'getBool'
| 'getEnum'
| 'getConstants'
| 'getNumber'
| 'getObject'
Expand Down Expand Up @@ -115,7 +121,23 @@ class SampleTurboModuleExample extends React.Component<{||}, State> {
}));
}

_renderResult(name: string): React.Node {
_renderResult(
name:
| 'callback'
| 'getArray'
| 'getBool'
| 'getEnum'
| 'getConstants'
| 'getNumber'
| 'getObject'
| 'getRootTag'
| 'getString'
| 'getUnsafeObject'
| 'getValue'
| 'promise'
| 'rejectPromise'
| 'voidFunc',
): React.Node {
const result = this.state.testResults[name] || {};
return (
<View style={styles.result}>
Expand Down

0 comments on commit 035fdee

Please sign in to comment.