forked from rescript-react-native/rescript-react-native
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatePickerAndroid.re
More file actions
61 lines (52 loc) · 1.43 KB
/
datePickerAndroid.re
File metadata and controls
61 lines (52 loc) · 1.43 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
[@bs.scope "DatePickerAndroid"] [@bs.module "react-native"]
external dateSet: string = "dateSetAction";
[@bs.scope "DatePickerAndroid"] [@bs.module "react-native"]
external dismissed: string = "dismissedAction";
[@bs.deriving jsConverter]
type mode = [ | `calendar | `spinner | `default];
type response = {
year: int,
month: int,
day: int,
};
type action =
| Dismissed
| Set(response);
[@bs.deriving abstract]
type responseJs = {
action: string,
year: int,
month: int,
day: int,
};
[@bs.deriving abstract]
type optsJs = {
date: Js.Date.t,
minDate: Js.Nullable.t(Js.Date.t),
maxDate: Js.Nullable.t(Js.Date.t),
mode: string,
};
let action = resp =>
if (actionGet(resp) == dateSet) {
Set({year: yearGet(resp), month: monthGet(resp), day: dayGet(resp)});
} else if (actionGet(resp) == dismissed) {
Dismissed;
} else {
failwith(
"Unknown action received from DatePickerAndroid. Please report this in the bs-react-native repository",
);
};
[@bs.scope "DatePickerAndroid"] [@bs.module "react-native"]
external _open: optsJs => Js.Promise.t(responseJs) = "open";
let open_ = (~date: Js.Date.t, ~minDate=?, ~maxDate=?, ~mode=`default, ()) =>
_open(
optsJs(
~date,
~minDate=minDate |> Js.Nullable.fromOption,
~maxDate=maxDate |> Js.Nullable.fromOption,
~mode=modeToJs(mode),
),
)
|> Js.Promise.then_((resp: responseJs) =>
resp |> action |> Js.Promise.resolve
);