@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colisweb/rescript-toolkit",
3
- "version": "4.26.0",
3
+ "version": "4.26.1",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "clean": "rescript clean",
@@ -37,7 +37,7 @@ let useUpdate = () => {
37
37
  React.useCallback1(() => setState(SafeIncrement.increment), [])
38
38
  }
39
39
 
40
- let useDebounceValue = (value, ~debounceDuration=200) => {
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=7,
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 today = Js.Date.make()
112
- let timeSlotStart = isSm ? DateFns.startOfWeek(today, {weekStartsOn: 1}) : today
113
-
114
- let timeSlotEnd = isSm
115
- ? periodLength === 7
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: timeSlotStart,
121
- end_: timeSlotEnd,
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: startOfWeek->Option.mapWithDefault(defaultPeriod, start => {
137
- start,
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
  )