Skip to content

Commit 33601ed

Browse files
committed
update Elements bindings
1 parent fc0ac66 commit 33601ed

File tree

2 files changed

+122
-46
lines changed

2 files changed

+122
-46
lines changed

src/Elements.bs.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,15 @@ var Header = {};
55

66
var HeaderBackground = {};
77

8+
var HeaderTitle = {};
9+
10+
var HeaderButton = {};
11+
812
var HeaderBackButton = {};
913

1014
exports.Header = Header;
1115
exports.HeaderBackground = HeaderBackground;
16+
exports.HeaderTitle = HeaderTitle;
17+
exports.HeaderButton = HeaderButton;
1218
exports.HeaderBackButton = HeaderBackButton;
1319
/* No side effect */

src/Elements.res

Lines changed: 116 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ open ReactNative
22

33
module Header = {
44
type headerTitleProps = {
5-
allowFontScaling: option<bool>,
6-
tintColor: option<Color.t>,
7-
style: option<Style.t>,
5+
allowFontScaling?: bool,
6+
tintColor?: Color.t,
7+
style?: Style.t,
88
children: string,
99
}
1010

@@ -15,63 +15,133 @@ module Header = {
1515

1616
type displayMode = [#default | #generic | #minimal]
1717

18-
type headerLeftProps = {
19-
tintColor: option<Color.t>,
20-
pressColor: option<Color.t>,
21-
pressOpacity: option<float>,
22-
displayMode: option<displayMode>,
18+
type headerButtonCommonProps = {
19+
tintColor?: Color.t,
20+
pressColor?: Color.t,
21+
pressOpacity?: float,
2322
}
2423

2524
type headerRightProps = {
26-
tintColor: option<Color.t>,
27-
pressColor: option<Color.t>,
28-
pressOpacity: option<float>,
25+
...headerButtonCommonProps,
26+
canGoBack?: bool,
27+
}
28+
type headerLeftProps = {
29+
...headerRightProps,
30+
displayMode?: displayMode,
31+
href?: string,
2932
}
3033

31-
type headerBackgroundOptions = {style: option<Style.t>}
34+
type headerBackgroundOptions = {style?: Style.t}
3235

3336
type headerTitleAlign = [#left | #center]
3437

35-
@react.component @module("@react-navigation/elements")
36-
external make: (
37-
~title: string=?,
38-
~headerTitle: headerTitle=?,
39-
~headerTitleAlign: headerTitleAlign=?,
40-
~headerTitleAllowFontScaling: bool=?,
41-
~headerTitleStyle: Style.t=?,
42-
~headerTitleContainerStyle: Style.t=?,
43-
~headerLeft: headerLeftProps => React.element=?,
44-
~headerLeftLabelVisible: bool=?,
45-
~headerLeftContainerStyle: Style.t=?,
46-
~headerRight: headerRightProps => React.element=?,
47-
~headerRightContainerStyle: Style.t=?,
48-
~headerPressColor: Color.t=?,
49-
~headerPressOpacity: float=?,
50-
~headerTintColor: Color.t=?,
51-
~headerBackground: headerBackgroundOptions => React.element=?,
52-
~headerBackgroundContainerStyle: Style.t=?,
53-
~headerTransparent: bool=?,
54-
~headerStyle: Style.t=?,
55-
~headerShadowVisible: bool=?,
56-
~headerStatusBarHeight: Style.size=?,
57-
) => React.element = "Header"
38+
type inputType = [
39+
| #text
40+
| #phone
41+
| #number
42+
| #email
43+
]
44+
45+
type headerSearchBarOptions = {
46+
ref?: TextInputElement.ref,
47+
autoCapitalize?: TextInput.autoCapitalize,
48+
autoFocus?: bool,
49+
cancelButtonText?: string,
50+
inputType?: inputType,
51+
onBlur?: Event.targetEvent => unit,
52+
onChangeText?: string => unit,
53+
onClose?: unit => unit,
54+
onFocus?: Event.targetEvent => unit,
55+
placeholder?: string,
56+
}
57+
58+
type headerOptions = {
59+
headerTitle?: headerTitle,
60+
headerTitleAlign?: headerTitleAlign,
61+
headerTitleAllowFontScaling?: bool,
62+
headerTitleStyle?: Style.t,
63+
headerTitleContainerStyle?: Style.t,
64+
headerLeft?: headerLeftProps => React.element,
65+
headerLeftContainerStyle?: Style.t,
66+
headerRight?: headerRightProps => React.element,
67+
headerRightContainerStyle?: Style.t,
68+
headerSearchBarOptions?: headerSearchBarOptions,
69+
headerPressColor?: Color.t,
70+
headerPressOpacity?: float,
71+
headerTintColor?: Color.t,
72+
headerBackground?: headerBackgroundOptions => React.element,
73+
headerBackgroundContainerStyle?: Style.t,
74+
headerTransparent?: bool,
75+
headerStyle?: Style.t,
76+
headerShadowVisible?: bool,
77+
headerStatusBarHeight?: Style.size,
78+
}
79+
80+
type backProp = {
81+
title?: string,
82+
href?: string,
83+
}
84+
85+
type props = {
86+
...headerOptions,
87+
backProp?: backProp,
88+
modal?: bool,
89+
layout?: Core.layout,
90+
title: string,
91+
}
92+
93+
@module("@react-navigation/elements")
94+
external make: React.component<props> = "Header"
5895
}
5996

6097
module HeaderBackground = {
61-
@react.component @module("@react-navigation/elements")
62-
external make: (
63-
// actually all RN view props
64-
~children: React.element=?,
65-
) => React.element = "HeaderBackground"
98+
@module("@react-navigation/elements")
99+
external make: React.component<View.props> = "HeaderBackground"
100+
}
101+
102+
module HeaderTitle = {
103+
@module("@react-navigation/elements")
104+
external make: React.component<Text.props> = "HeaderTitle"
105+
}
106+
107+
module HeaderButton = {
108+
type headerButtonProps = {
109+
...Header.headerButtonCommonProps,
110+
onPress?: unit => unit,
111+
href?: string,
112+
disabled?: bool,
113+
accessibilityLabel?: string,
114+
testID?: string,
115+
style?: Style.t,
116+
}
117+
118+
type props = {
119+
...headerButtonProps,
120+
children: React.element,
121+
}
122+
123+
@module("@react-navigation/elements")
124+
external make: React.component<props> = "HeaderTitle"
66125
}
67126

68127
module HeaderBackButton = {
69-
@react.component @module("@react-navigation/elements")
70-
external make: (
71-
~displayMode: Header.displayMode=?,
72-
~tintColor: Color.t=?,
73-
~onPress: unit => unit,
74-
) => React.element = "HeaderBackButton"
128+
type backImageProps = {tintColor?: Color.t}
129+
130+
type props = {
131+
...HeaderButton.headerButtonProps,
132+
backImage?: backImageProps => React.element,
133+
label?: string,
134+
truncatedLabel?: string,
135+
displayMode?: Header.displayMode,
136+
labelStyle?: Style.t,
137+
allowFontScaling?: bool,
138+
onLabelLayout?: Event.layoutEvent => unit,
139+
screenLayout?: Core.layout,
140+
titleLayout?: Core.layout,
141+
}
142+
143+
@module("@react-navigation/elements")
144+
external make: React.component<props> = "HeaderBackButton"
75145
}
76146

77147
@module("@react-navigation/elements")

0 commit comments

Comments
 (0)