@colisweb/rescript-toolkit 4.26.0 → 4.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -37,7 +37,7 @@ let useUpdate = () => {
|
|
|
37
37
|
React.useCallback1(() => setState(SafeIncrement.increment), [])
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
let useDebounceValue = (
|
|
40
|
+
let useDebounceValue = (~debounceDuration=200, value) => {
|
|
41
41
|
let (state, setState) = React.useState(() => value)
|
|
42
42
|
|
|
43
43
|
useDebounce(() => {
|
|
@@ -41,18 +41,19 @@ type dayCounter = Js.Dict.t<int>
|
|
|
41
41
|
|
|
42
42
|
@react.component
|
|
43
43
|
let make = (
|
|
44
|
-
~startOfWeek: option<Js.Date.t>=?,
|
|
45
44
|
~selectedDay: option<Js.Date.t>=?,
|
|
46
45
|
~className="",
|
|
47
46
|
~containerClassName="",
|
|
48
47
|
~counters: option<dayCounter>=?,
|
|
49
|
-
~periodLength
|
|
48
|
+
~periodLength=?, // desktop periodLength ! does'nt work on mobile (always 3 on mobile, default is 7 on desktop )
|
|
50
49
|
~children,
|
|
51
50
|
~onChange: option<state => unit>=?,
|
|
52
51
|
~disabledBefore: option<Js.Date.t>=?,
|
|
53
52
|
) => {
|
|
54
53
|
let {isSm} = Toolkit__Hooks.useMediaQuery()
|
|
55
54
|
|
|
55
|
+
let periodLength = isSm ? periodLength->Option.getWithDefault(7) : 3
|
|
56
|
+
|
|
56
57
|
let ({period, selectedDay}, dispatch) = ReactUpdate.useReducerWithMapState(
|
|
57
58
|
(state, action) =>
|
|
58
59
|
switch action {
|
|
@@ -107,37 +108,31 @@ let make = (
|
|
|
107
108
|
)
|
|
108
109
|
},
|
|
109
110
|
() => {
|
|
111
|
+
let today = Js.Date.make()
|
|
112
|
+
// selectedDay with default
|
|
113
|
+
let selectedDay = selectedDay->Option.getWithDefault(today)
|
|
114
|
+
// we check that the selectedDay is not in disabled range
|
|
115
|
+
let selectedDay =
|
|
116
|
+
disabledBefore->Option.mapWithDefault(selectedDay, disabledBefore =>
|
|
117
|
+
selectedDay->DateFns.isBefore(disabledBefore) ? disabledBefore : selectedDay
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
// we build the default displayed period around the selectedDay
|
|
110
121
|
let defaultPeriod: period = {
|
|
111
|
-
let
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
let
|
|
115
|
-
|
|
116
|
-
? DateFns.endOfWeek(today, {weekStartsOn: 1})
|
|
117
|
-
: today->DateFns.addDays(periodLength)
|
|
118
|
-
: today->DateFns.addDays(2)
|
|
122
|
+
let periodStart =
|
|
123
|
+
periodLength === 7 ? DateFns.startOfWeek(selectedDay, {weekStartsOn: 1}) : selectedDay
|
|
124
|
+
|
|
125
|
+
let periodEnd = periodStart->DateFns.addDays(periodLength - 1)
|
|
126
|
+
|
|
119
127
|
{
|
|
120
|
-
start:
|
|
121
|
-
end_:
|
|
128
|
+
start: periodStart,
|
|
129
|
+
end_: periodEnd,
|
|
122
130
|
}
|
|
123
131
|
}
|
|
124
132
|
|
|
125
|
-
let selectedDayWithDefault =
|
|
126
|
-
selectedDay->Option.getWithDefault(startOfWeek->Option.getWithDefault(defaultPeriod.start))
|
|
127
|
-
|
|
128
|
-
let selectedDayNotInDisabledRange =
|
|
129
|
-
disabledBefore->Option.mapWithDefault(selectedDayWithDefault, disabledBefore =>
|
|
130
|
-
selectedDayWithDefault->DateFns.isBefore(disabledBefore)
|
|
131
|
-
? disabledBefore
|
|
132
|
-
: selectedDayWithDefault
|
|
133
|
-
)
|
|
134
|
-
|
|
135
133
|
{
|
|
136
|
-
period:
|
|
137
|
-
|
|
138
|
-
end_: isSm ? start->DateFns.addDays(periodLength - 1) : start->DateFns.addDays(2),
|
|
139
|
-
}),
|
|
140
|
-
selectedDay: selectedDayNotInDisabledRange,
|
|
134
|
+
period: defaultPeriod,
|
|
135
|
+
selectedDay,
|
|
141
136
|
}
|
|
142
137
|
},
|
|
143
138
|
)
|