Skip to content

Commit 8ea378c

Browse files
authored
Keep Options struct (#6)
1 parent 7de39d1 commit 8ea378c

File tree

8 files changed

+46
-53
lines changed

8 files changed

+46
-53
lines changed

android/src/main/java/io/swan/rnbrowser/RNSwanBrowserModuleImpl.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import com.facebook.react.bridge.Promise;
1313
import com.facebook.react.bridge.ReactApplicationContext;
14+
import com.facebook.react.bridge.ReadableMap;
1415
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
1516

1617
import io.swan.rnbrowser.helpers.CustomTabActivityHelper;
@@ -29,7 +30,7 @@ protected static void onHostResume(final ReactApplicationContext reactContext) {
2930

3031
protected static void open(final Activity activity,
3132
final String url,
32-
final Double barTintColor,
33+
final ReadableMap options,
3334
final Promise promise) {
3435
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
3536
intentBuilder.setShowTitle(false);
@@ -44,13 +45,13 @@ protected static void open(final Activity activity,
4445
CustomTabColorSchemeParams.Builder paramsBuilder = new CustomTabColorSchemeParams.Builder();
4546
paramsBuilder.setNavigationBarColor(blackColor);
4647

47-
if (barTintColor != null) {
48-
@ColorInt int intValue = barTintColor.intValue();
48+
if (options.hasKey("barTintColor")) {
49+
@ColorInt int barTintColor = options.getInt("barTintColor");
4950

50-
paramsBuilder.setToolbarColor(intValue);
51-
paramsBuilder.setSecondaryToolbarColor(intValue);
51+
paramsBuilder.setToolbarColor(barTintColor);
52+
paramsBuilder.setSecondaryToolbarColor(barTintColor);
5253

53-
intentBuilder.setColorScheme(ColorUtils.calculateLuminance(intValue) > 0.5
54+
intentBuilder.setColorScheme(ColorUtils.calculateLuminance(barTintColor) > 0.5
5455
? CustomTabsIntent.COLOR_SCHEME_LIGHT
5556
: CustomTabsIntent.COLOR_SCHEME_DARK);
5657
}

android/src/newarch/io/swan/rnbrowser/RNSwanBrowserModule.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import android.app.Activity;
44

55
import androidx.annotation.NonNull;
6-
import androidx.annotation.Nullable;
76

87
import com.facebook.react.bridge.LifecycleEventListener;
98
import com.facebook.react.bridge.Promise;
109
import com.facebook.react.bridge.ReactApplicationContext;
10+
import com.facebook.react.bridge.ReadableMap;
1111
import com.facebook.react.module.annotations.ReactModule;
1212

1313
@ReactModule(name = RNSwanBrowserModuleImpl.NAME)
@@ -41,11 +41,7 @@ public void onHostPause() {}
4141
public void onHostDestroy() {}
4242

4343
@Override
44-
public void open(String url,
45-
@Nullable String dismissButtonStyle,
46-
@Nullable Double barTintColor,
47-
@Nullable Double controlTintColor,
48-
Promise promise) {
44+
public void open(String url, ReadableMap options, Promise promise) {
4945
if (mBrowserVisible) {
5046
promise.reject("swan_browser_visible",
5147
"An instance of the swan browser is already visible");
@@ -61,7 +57,7 @@ public void open(String url,
6157
}
6258

6359
mBrowserVisible = true;
64-
RNSwanBrowserModuleImpl.open(activity, url, barTintColor, promise);
60+
RNSwanBrowserModuleImpl.open(activity, url, options, promise);
6561
}
6662

6763
@Override

android/src/oldarch/io/swan/rnbrowser/RNSwanBrowserModule.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import android.app.Activity;
44

55
import androidx.annotation.NonNull;
6-
import androidx.annotation.Nullable;
76

87
import com.facebook.react.bridge.LifecycleEventListener;
98
import com.facebook.react.bridge.Promise;
109
import com.facebook.react.bridge.ReactApplicationContext;
1110
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1211
import com.facebook.react.bridge.ReactMethod;
12+
import com.facebook.react.bridge.ReadableMap;
1313
import com.facebook.react.module.annotations.ReactModule;
1414

1515
@ReactModule(name = RNSwanBrowserModuleImpl.NAME)
@@ -43,11 +43,7 @@ public void onHostPause() {}
4343
public void onHostDestroy() {}
4444

4545
@ReactMethod
46-
public void open(String url,
47-
@Nullable String dismissButtonStyle,
48-
@Nullable Double barTintColor,
49-
@Nullable Double controlTintColor,
50-
Promise promise) {
46+
public void open(String url, ReadableMap options, Promise promise) {
5147
if (mBrowserVisible) {
5248
promise.reject("swan_browser_visible",
5349
"An instance of the swan browser is already visible");
@@ -63,7 +59,7 @@ public void open(String url,
6359
}
6460

6561
mBrowserVisible = true;
66-
RNSwanBrowserModuleImpl.open(activity, url, barTintColor, promise);
62+
RNSwanBrowserModuleImpl.open(activity, url, options, promise);
6763
}
6864

6965
@ReactMethod

example/ios/Podfile.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,7 @@ PODS:
11631163
- React-logger (= 0.74.0-rc.8)
11641164
- React-perflogger (= 0.74.0-rc.8)
11651165
- React-utils (= 0.74.0-rc.8)
1166-
- RNSwanBrowser (0.2.0):
1166+
- RNSwanBrowser (0.2.1):
11671167
- React-Core
11681168
- SocketRocket (0.7.0)
11691169
- Yoga (0.0.0)
@@ -1398,7 +1398,7 @@ SPEC CHECKSUMS:
13981398
React-runtimescheduler: 91c3069839ca10d2dd1d18dbe60a478f2bb77405
13991399
React-utils: b3ef4d6a2c13c343b9150e3070fa1984a1c1ee27
14001400
ReactCommon: a2081027a321e7dd4825855111d57954a01fb02a
1401-
RNSwanBrowser: 82802945bfe1142eb5aad8c9f1276df17864cbaa
1401+
RNSwanBrowser: 57d20670f4461b8bc3842665189937250560f18e
14021402
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
14031403
Yoga: 553006c695f727afa3d30fdac7542f7ea6e2a4f9
14041404

ios/RNSwanBrowser.mm

+14-8
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,24 @@ - (void)safariViewControllerDidFinish:(SFSafariViewController *)controller {
5757
}
5858

5959
- (void)open:(NSString *)url
60-
dismissButtonStyle:(NSString *)dismissButtonStyle
61-
barTintColor:(NSNumber *)barTintColor
62-
controlTintColor:(NSNumber *)controlTintColor
63-
resolve:(RCTPromiseResolveBlock)resolve
64-
reject:(RCTPromiseRejectBlock)reject {
60+
options:(JS::NativeRNSwanBrowser::Options &)options
61+
resolve:(RCTPromiseResolveBlock)resolve
62+
reject:(RCTPromiseRejectBlock)reject {
63+
64+
NSString *dismissButtonStyle = options.dismissButtonStyle();
65+
NSNumber *barTintColor = options.barTintColor().has_value() ? [NSNumber numberWithDouble:options.barTintColor().value()] : nil;
66+
NSNumber *controlTintColor = options.controlTintColor().has_value() ? [NSNumber numberWithDouble:options.controlTintColor().value()] : nil;
67+
6568
#else
6669
RCT_EXPORT_METHOD(open:(NSString *)url
67-
dismissButtonStyle:(NSString *)dismissButtonStyle
68-
barTintColor:(NSNumber *)barTintColor
69-
controlTintColor:(NSNumber *)controlTintColor
70+
options:(NSDictionary * _Nonnull)options
7071
resolve:(RCTPromiseResolveBlock)resolve
7172
reject:(RCTPromiseRejectBlock)reject) {
73+
74+
NSString *dismissButtonStyle = [options valueForKey:@"dismissButtonStyle"];
75+
NSNumber *barTintColor = [options valueForKey:@"barTintColor"];
76+
NSNumber *controlTintColor = [options valueForKey:@"controlTintColor"];
77+
7278
#endif
7379
if (_safariVC != nil) {
7480
return reject(@"swan_browser_visible", @"An instance of the swan browser is already visible", nil);

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@swan-io/react-native-browser",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"license": "MIT",
55
"description": "An easy-to-use in-app browser module for React Native.",
66
"author": "Mathieu Acthernoene <[email protected]>",

src/NativeRNSwanBrowser.ts

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
import type { TurboModule } from "react-native";
22
import { TurboModuleRegistry } from "react-native";
33

4-
export interface Spec extends TurboModule {
5-
open(
6-
url: string,
7-
dismissButtonStyle?: string,
8-
barTintColor?: number,
9-
controlTintColor?: number,
10-
): Promise<null>;
4+
type Options = {
5+
dismissButtonStyle?: string;
6+
barTintColor?: number;
7+
controlTintColor?: number;
8+
};
119

10+
export interface Spec extends TurboModule {
11+
open(url: string, options: Options): Promise<null>;
1212
close(): void;
13-
1413
// Events
1514
addListener: (eventName: string) => void;
1615
removeListeners: (count: number) => void;

src/index.ts

+9-14
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,15 @@ const convertColorToNumber = (
2424
};
2525

2626
export const openBrowser = (url: string, options: Options): Promise<void> => {
27-
const {
28-
dismissButtonStyle,
29-
barTintColor,
30-
controlTintColor,
31-
onOpen,
32-
onClose,
33-
} = options;
34-
35-
return NativeModule.open(
36-
url,
37-
dismissButtonStyle,
38-
convertColorToNumber(barTintColor),
39-
convertColorToNumber(controlTintColor),
40-
).then(() => {
27+
const { dismissButtonStyle, onOpen, onClose } = options;
28+
const barTintColor = convertColorToNumber(options.barTintColor);
29+
const controlTintColor = convertColorToNumber(options.controlTintColor);
30+
31+
return NativeModule.open(url, {
32+
...(dismissButtonStyle != null && { dismissButtonStyle }),
33+
...(barTintColor != null && { barTintColor }),
34+
...(controlTintColor != null && { controlTintColor }),
35+
}).then(() => {
4136
let deeplink: string | undefined;
4237

4338
onOpen?.();

0 commit comments

Comments
 (0)