@@ -10,17 +10,31 @@ type options = {
10
10
"onSelect" : Js .Null .t <(Js .Date .t , Js .Date .t ) => unit >,
11
11
}
12
12
13
- type t
13
+ type t = { setDateRange : ( Js . Date . t , Js . Date . t ) => unit }
14
14
15
15
@new @module ("litepicker" )
16
16
external init : options => t = "default"
17
17
18
+ @module ("./litepicker-bindings" ) external bindPickerMethods : t => unit = "bindPickerMethods"
19
+
18
20
let containerSx = [Sx .rounded .sm , Sx .border .xs , Sx .border .color (Sx .gray300 )]
19
21
20
22
let elementSx = [Sx .border .none , Sx .text .semibold , Sx .text .sm , Sx .py .lg , Sx .px .xs , Sx .pointer ]
21
23
24
+ let getDefaultDateRange = {
25
+ let hourMs = 3600.0 *. 1000 .
26
+ let dayMs = hourMs *. 24 .
27
+ () => {
28
+ let ts2 = Js .Date .now ()
29
+ let ts1 = ts2 -. 90 . *. dayMs
30
+ (Js .Date .fromFloat (ts1 ), Js .Date .fromFloat (ts2 ))
31
+ }
32
+ }
33
+
22
34
@react.component
23
35
let make = (~sx as uSx = [], ~startDate = ?, ~endDate = ?, ~onSelect = ?) => {
36
+ let (showFullHistory , setShowFullHistory ) = React .useState (() => false )
37
+
24
38
let onSelect = switch onSelect {
25
39
| None => None
26
40
| Some (f ) =>
@@ -32,6 +46,27 @@ let make = (~sx as uSx=[], ~startDate=?, ~endDate=?, ~onSelect=?) => {
32
46
)
33
47
}
34
48
let elementRef = React .useRef (Js .Nullable .null )
49
+ let pickerRef = React .useRef (None )
50
+
51
+ let setDateRange = (startDate , endDate ) => {
52
+ switch pickerRef .current {
53
+ | None => ()
54
+ | Some (picker ) => picker .setDateRange (startDate , endDate )
55
+ }
56
+ }
57
+ let changeDateRange = _ => {
58
+ if showFullHistory {
59
+ // currently showing full history
60
+ let (startDate , endDate ) = getDefaultDateRange ()
61
+ setDateRange (startDate , endDate )
62
+ } else {
63
+ // currently showing short history
64
+ let startDate = Js .Date .makeWithYM (~year = 2000.0 , ~month = 0 ., ())
65
+ let endDate = Js .Date .makeWithYM (~year = 2100.0 , ~month = 0 ., ())
66
+ setDateRange (startDate , endDate )
67
+ }
68
+ setShowFullHistory (_ => ! showFullHistory )
69
+ }
35
70
36
71
React .useEffect0 (() => {
37
72
let options = {
@@ -43,14 +78,23 @@ let make = (~sx as uSx=[], ~startDate=?, ~endDate=?, ~onSelect=?) => {
43
78
"singleMode" : false ,
44
79
"onSelect" : onSelect |> Js .Null .fromOption ,
45
80
}
46
- let _self = init (options )
47
-
81
+ let picker = init (options )
82
+ pickerRef .current = Some (picker )
83
+ bindPickerMethods (picker )
48
84
None
49
85
})
50
86
51
87
let sx = Array .append (uSx , containerSx )
52
88
<Row sx alignX = #center alignY = #center >
53
89
<Icon svg = Icon .calendar />
54
90
<input className = {Sx .make (elementSx )} ref = {ReactDOM .Ref .domRef (elementRef )} />
91
+ <button
92
+ title = {showFullHistory ? "Show short history" : "Show full history" }
93
+ onClick = {changeDateRange }>
94
+ <Icon
95
+ sx = [Sx .unsafe ("width" , "24px" ), Sx .unsafe ("height" , "24px" )]
96
+ svg = {showFullHistory ? Icon .zoomIn : Icon .zoomOut }
97
+ />
98
+ </button >
55
99
</Row >
56
100
}
0 commit comments