Skip to content

Commit 095c6e1

Browse files
authored
Merge pull request #161 from teatimegames/section-list-scrollview-props
Expose more of ScrollView's props on SectionList
2 parents 0b23dd8 + 680c8b2 commit 095c6e1

File tree

5 files changed

+127
-17
lines changed

5 files changed

+127
-17
lines changed

lib/js/src/components/sectionList.js

Lines changed: 48 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/js/src/datePickerAndroid.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/sectionList.re

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ let renderAccessoryView =
136136
section: jsSectionToSection(jsRenderAccessory##section),
137137
});
138138

139+
[@bs.deriving jsConverter]
140+
type keyboardDismissMode = [ | `none | `interactive | `onDrag];
141+
142+
[@bs.deriving jsConverter]
143+
type keyboardShouldPersistTaps = [ | `always | `never | `handled];
144+
139145
let make:
140146
(
141147
~sections: sections('item),
@@ -161,6 +167,18 @@ let make:
161167
~renderSectionHeader: renderAccessoryView('item)=?,
162168
~renderSectionFooter: renderAccessoryView('item)=?,
163169
~stickySectionHeadersEnabled: bool=?,
170+
~keyboardDismissMode: keyboardDismissMode=?,
171+
~keyboardShouldPersistTaps: keyboardShouldPersistTaps=?,
172+
~showsHorizontalScrollIndicator: bool=?,
173+
~showsVerticalScrollIndicator: bool=?,
174+
~getItemLayout: (option(array('item)), int) =>
175+
{
176+
.
177+
"length": int,
178+
"offset": int,
179+
"index": int,
180+
}
181+
=?,
164182
array(ReasonReact.reactElement)
165183
) =>
166184
ReasonReact.component(
@@ -187,6 +205,11 @@ let make:
187205
~renderSectionHeader=?,
188206
~renderSectionFooter=?,
189207
~stickySectionHeadersEnabled=?,
208+
~keyboardDismissMode=?,
209+
~keyboardShouldPersistTaps=?,
210+
~showsHorizontalScrollIndicator=?,
211+
~showsVerticalScrollIndicator=?,
212+
~getItemLayout=?,
190213
_children,
191214
) =>
192215
ReasonReact.wrapJsForReason(
@@ -217,7 +240,32 @@ let make:
217240
fromOption(
218241
UtilsRN.optBoolToOptJsBoolean(stickySectionHeadersEnabled),
219242
),
243+
"keyboardDismissMode":
244+
fromOption(
245+
keyboardDismissMode
246+
|> UtilsRN.option_map(keyboardDismissModeToJs),
247+
),
248+
"keyboardShouldPersistTaps":
249+
fromOption(
250+
keyboardShouldPersistTaps
251+
|> UtilsRN.option_map(keyboardShouldPersistTapsToJs),
252+
),
253+
"showsHorizontalScrollIndicator":
254+
fromOption(
255+
UtilsRN.optBoolToOptJsBoolean(showsHorizontalScrollIndicator),
256+
),
257+
"showsVerticalScrollIndicator":
258+
fromOption(
259+
UtilsRN.optBoolToOptJsBoolean(showsVerticalScrollIndicator),
260+
),
261+
"getItemLayout":
262+
fromOption(
263+
UtilsRN.option_map(
264+
(f, data, index) => f(Js.Undefined.toOption(data), index),
265+
getItemLayout,
266+
),
267+
),
220268
}
221269
),
222270
_children,
223-
);
271+
);

src/components/sectionList.rei

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ type renderBag('item) = {
22
item: 'item,
33
index: int,
44
section: section('item),
5-
separators: {. "highlight": unit => unit, "unhighlight": unit => unit}
5+
separators: {
6+
.
7+
"highlight": unit => unit,
8+
"unhighlight": unit => unit,
9+
},
610
}
711
and section('item) = {
812
data: array('item),
913
key: option(string),
10-
renderItem: option((renderBag('item) => ReasonReact.reactElement))
14+
renderItem: option(renderBag('item) => ReasonReact.reactElement),
1115
};
1216

1317
let section:
@@ -25,7 +29,7 @@ type separatorProps('item) = {
2529
leadingSection: option(section('item)),
2630
section: section('item),
2731
trailingItem: option('item),
28-
trailingSection: option(section('item))
32+
trailingSection: option(section('item)),
2933
};
3034

3135
type sections('item);
@@ -34,27 +38,30 @@ let sections: array(section('item)) => sections('item);
3438

3539
type renderItem('item);
3640

37-
let renderItem: (renderBag('item) => ReasonReact.reactElement) => renderItem('item);
41+
let renderItem:
42+
(renderBag('item) => ReasonReact.reactElement) => renderItem('item);
3843

3944
type separatorComponent('item);
4045

4146
let separatorComponent:
42-
(separatorProps('item) => ReasonReact.reactElement) => separatorComponent('item);
47+
(separatorProps('item) => ReasonReact.reactElement) =>
48+
separatorComponent('item);
4349

4450
type renderAccessory('item) = {section: section('item)};
4551

4652
type renderAccessoryView('item);
4753

4854
let renderAccessoryView:
49-
(renderAccessory('item) => ReasonReact.reactElement) => renderAccessoryView('item);
55+
(renderAccessory('item) => ReasonReact.reactElement) =>
56+
renderAccessoryView('item);
5057

5158
type viewToken('item) = {
5259
.
5360
"index": Js.undefined(int),
5461
"isViewable": Js.boolean,
5562
"item": 'item,
5663
"key": string,
57-
"section": section('item)
64+
"section": section('item),
5865
};
5966

6067
let make:
@@ -74,14 +81,23 @@ let make:
7481
~onViewableItemsChanged: {
7582
.
7683
"changed": array(viewToken('item)),
77-
"viewableItems": array(viewToken('item))
84+
"viewableItems": array(viewToken('item)),
7885
}
7986
=?,
8087
~onRefresh: unit => unit=?,
8188
~refreshing: bool=?,
8289
~renderSectionHeader: renderAccessoryView('item)=?,
8390
~renderSectionFooter: renderAccessoryView('item)=?,
8491
~stickySectionHeadersEnabled: bool=?,
92+
~keyboardDismissMode: [ | `none | `interactive | `onDrag]=?,
93+
~keyboardShouldPersistTaps: [ | `always | `never | `handled]=?,
94+
~showsHorizontalScrollIndicator: bool=?,
95+
~showsVerticalScrollIndicator: bool=?,
96+
~getItemLayout: (option(array('item)), int) => {. "length": int, "offset": int, "index": int}=?,
8597
array(ReasonReact.reactElement)
8698
) =>
87-
ReasonReact.component(ReasonReact.stateless, ReasonReact.noRetainedProps, unit);
99+
ReasonReact.component(
100+
ReasonReact.stateless,
101+
ReasonReact.noRetainedProps,
102+
unit,
103+
);

src/datePickerAndroid.re

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ external _open : optsJs => Js.Promise.t(responseJs) = "open";
5252
let open_ = (~date: Js.Date.t, ~minDate=?, ~maxDate=?, ~mode=Default, ()) =>
5353
_open({
5454
"date": date,
55-
"minDate": Js.Nullable.from_opt(minDate),
56-
"maxDate": Js.Nullable.from_opt(maxDate),
55+
"minDate": Js.Nullable.fromOption(minDate),
56+
"maxDate": Js.Nullable.fromOption(maxDate),
5757
"mode":
5858
switch (mode) {
5959
| Default => "default"
@@ -63,4 +63,4 @@ let open_ = (~date: Js.Date.t, ~minDate=?, ~maxDate=?, ~mode=Default, ()) =>
6363
})
6464
|> Js.Promise.then_((resp: responseJs) =>
6565
resp |> action |> Js.Promise.resolve
66-
);
66+
);

0 commit comments

Comments
 (0)