-
-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathAppContainer.re
More file actions
90 lines (82 loc) · 2.34 KB
/
Copy pathAppContainer.re
File metadata and controls
90 lines (82 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// There are two ways to use the AppContainer module.
//
// 1. With React.createElement, zero-cost
// ======================================
//
// open ReactNavigation;
//
// let appContainer = AppContainer.makeAppContainer(MyStackNavigator.navigator);
//
// [@react.component]
// let make = () => {
// let screenProps = {"someProp": 42};
//
// React.createElement(
// appContainer,
// AppContainer.makeProps(~screenProps, ()),
// );
// };
type persistNavigationState = NavigationState.t => Js.Promise.t(unit);
type loadNavigationState = unit => Js.Promise.t(option(NavigationState.t));
type appContainerProps('screenProps) = {
.
"persistNavigationState": option(persistNavigationState),
"loadNavigationState": option(loadNavigationState),
"screenProps": option('screenProps),
"ref": Js.Nullable.t(NavigationContainer.t) => unit,
};
[@bs.obj]
external makeProps:
(
~persistNavigationState: persistNavigationState=?,
~loadNavigationState: loadNavigationState=?,
~screenProps: 'screenProps=?,
~ref: Js.Nullable.t(NavigationContainer.t) => unit=?,
~key: string=?,
unit
) =>
appContainerProps('screenProps) =
"";
[@bs.module "react-navigation"]
external makeAppContainer:
Navigator.t => React.component(appContainerProps('screenProps)) =
"createAppContainer";
// 2. Without create element, using a functor instead
// ==================================================
//
// open ReactNavigation;
//
// module MyAppContainer =
// AppContainer.Make({
// type screenProps = {. "someProp": int};
// let navigator = MyStackNavigator.navigator;
// });
//
// [@react.component]
// let make = () => {
// let screenProps = {"someProp": 42};
//
// <MyAppContainer screenProps />;
// };
module Make = (S: {
type screenProps;
let navigator: Navigator.t;
}) => {
[@bs.module "react-navigation"]
external make:
Navigator.t => React.component(appContainerProps(S.screenProps)) =
"createAppContainer";
[@bs.obj]
external makeProps:
(
~persistNavigationState: persistNavigationState=?,
~loadNavigationState: loadNavigationState=?,
~screenProps: S.screenProps=?,
~ref: Js.Nullable.t(NavigationContainer.t) => unit=?,
~key: string=?,
unit
) =>
appContainerProps(S.screenProps) =
"";
let make = make(S.navigator);
};