@colisweb/rescript-toolkit 4.26.1 → 4.26.3
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 +2 -2
- package/src/decoders/Toolkit__Decoders.res +4 -0
- package/src/intl/Toolkit__Intl.res +7 -0
- package/src/ui/Toolkit__Ui_WeekDateFilter.res +2 -4
- package/src/ui/Toolkit__Ui_WeekdayNavigation.res +1 -2
- package/src/utils/Toolkit__Utils_UnitMeasure.res +38 -15
- package/src/vendors/DateFns.res +24 -24
- package/src/vendors/ReactDayPicker.res +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colisweb/rescript-toolkit",
|
|
3
|
-
"version": "4.26.
|
|
3
|
+
"version": "4.26.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rescript clean",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"case": "1.6.3",
|
|
41
41
|
"click-outside-hook": "1.1.0",
|
|
42
42
|
"copy-to-clipboard": "3.3.3",
|
|
43
|
-
"date-fns": "2.
|
|
43
|
+
"date-fns": "3.2.0",
|
|
44
44
|
"decco": "1.6.0",
|
|
45
45
|
"dedent": "0.7.0",
|
|
46
46
|
"lenses-ppx": "6.1.10",
|
|
@@ -358,6 +358,10 @@ module UnitMeasure = {
|
|
|
358
358
|
let errorPrefix = "Time with unit"
|
|
359
359
|
})
|
|
360
360
|
|
|
361
|
+
module S = Make({
|
|
362
|
+
include Config
|
|
363
|
+
let wrapValue = Config.wrapValue(#s)
|
|
364
|
+
})
|
|
361
365
|
module Min = Make({
|
|
362
366
|
include Config
|
|
363
367
|
let wrapValue = Config.wrapValue(#min)
|
|
@@ -93,6 +93,13 @@ module Make = (Config: IntlConfig) => {
|
|
|
93
93
|
@react.component
|
|
94
94
|
let make = (~children) => {
|
|
95
95
|
let intl = useIntl()
|
|
96
|
+
let locale = useCurrentLocale()
|
|
97
|
+
|
|
98
|
+
React.useLayoutEffect1(() => {
|
|
99
|
+
DateFns.setDefaultOptions({locale: locale->getDateFnsLocale})
|
|
100
|
+
None
|
|
101
|
+
}, [locale])
|
|
102
|
+
|
|
96
103
|
<RawIntlProvider value=intl> children </RawIntlProvider>
|
|
97
104
|
}
|
|
98
105
|
}
|
|
@@ -115,11 +115,9 @@ let make = (~initialStart=?, ~selectedDay=?, ~children: state => React.element)
|
|
|
115
115
|
() => {
|
|
116
116
|
let defaultTimeslot: Toolkit__Decoders.DatetimeTimeSlot.t = {
|
|
117
117
|
let today = Js.Date.make()
|
|
118
|
-
let timeSlotStart = isSm ? DateFns.startOfWeek(today
|
|
118
|
+
let timeSlotStart = isSm ? DateFns.startOfWeek(today) : today
|
|
119
119
|
|
|
120
|
-
let timeSlotEnd = isSm
|
|
121
|
-
? DateFns.endOfWeek(today, {weekStartsOn: 1})
|
|
122
|
-
: today->DateFns.addDays(2)
|
|
120
|
+
let timeSlotEnd = isSm ? DateFns.endOfWeek(today) : today->DateFns.addDays(2)
|
|
123
121
|
{
|
|
124
122
|
start: timeSlotStart,
|
|
125
123
|
end_: timeSlotEnd,
|
|
@@ -119,8 +119,7 @@ let make = (
|
|
|
119
119
|
|
|
120
120
|
// we build the default displayed period around the selectedDay
|
|
121
121
|
let defaultPeriod: period = {
|
|
122
|
-
let periodStart =
|
|
123
|
-
periodLength === 7 ? DateFns.startOfWeek(selectedDay, {weekStartsOn: 1}) : selectedDay
|
|
122
|
+
let periodStart = periodLength === 7 ? DateFns.startOfWeek(selectedDay) : selectedDay
|
|
124
123
|
|
|
125
124
|
let periodEnd = periodStart->DateFns.addDays(periodLength - 1)
|
|
126
125
|
|
|
@@ -68,24 +68,33 @@ module Weight = {
|
|
|
68
68
|
module Time = {
|
|
69
69
|
include Unit({
|
|
70
70
|
@deriving(jsConverter)
|
|
71
|
-
type unitEnum = [#min | #h]
|
|
71
|
+
type unitEnum = [#min | #h | #s]
|
|
72
72
|
})
|
|
73
73
|
|
|
74
|
-
type t = [#min(float) | #h(float)]
|
|
74
|
+
type t = [#min(float) | #h(float) | #s(float)]
|
|
75
75
|
|
|
76
76
|
let wrapValue = (unit, value) => {
|
|
77
77
|
switch unit {
|
|
78
78
|
| #min => #min(value)
|
|
79
79
|
| #h => #h(value)
|
|
80
|
+
| #s => #s(value)
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
let toValue = value =>
|
|
84
85
|
switch value {
|
|
86
|
+
| #s(v)
|
|
85
87
|
| #min(v)
|
|
86
88
|
| #h(v) => v
|
|
87
89
|
}
|
|
88
90
|
|
|
91
|
+
let toString = value =>
|
|
92
|
+
switch value {
|
|
93
|
+
| #min(v) => v->Float.toString ++ " min"
|
|
94
|
+
| #h(v) => v->Float.toString ++ " h"
|
|
95
|
+
| #s(v) => v->Float.toString ++ " s"
|
|
96
|
+
}
|
|
97
|
+
|
|
89
98
|
let display = (value, ~digits as _=2, ()) => {
|
|
90
99
|
let _initialDate = Js.Date.make()
|
|
91
100
|
|
|
@@ -101,23 +110,37 @@ module Time = {
|
|
|
101
110
|
DateFns.intervalToDuration(
|
|
102
111
|
~interval={start: _initialDate, end_: _initialDate->DateFns.addHours(v)},
|
|
103
112
|
)
|
|
113
|
+
| #s(v) =>
|
|
114
|
+
DateFns.intervalToDuration(
|
|
115
|
+
~interval={start: _initialDate, end_: _initialDate->DateFns.addSeconds(v)},
|
|
116
|
+
)
|
|
104
117
|
}
|
|
105
118
|
|
|
106
|
-
switch (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
119
|
+
switch (
|
|
120
|
+
duration.years,
|
|
121
|
+
duration.months,
|
|
122
|
+
duration.days,
|
|
123
|
+
duration.hours,
|
|
124
|
+
duration.minutes,
|
|
125
|
+
duration.seconds,
|
|
126
|
+
) {
|
|
127
|
+
| (None, None, None, Some(h), Some(min), sec) =>
|
|
128
|
+
let secondsAsMinutesRounded = sec->Option.mapWithDefault(0, sec => sec > 30 ? 1 : 0)
|
|
129
|
+
let minRounded =
|
|
130
|
+
(min + secondsAsMinutesRounded === 60 ? 0 : min + secondsAsMinutesRounded)->Int.toString
|
|
131
|
+
let hRounded = min + secondsAsMinutesRounded === 60 ? h + 1 : h
|
|
132
|
+
|
|
133
|
+
`${hRounded->Int.toString} : ${minRounded->String.length === 1
|
|
134
|
+
? "0" ++ minRounded
|
|
135
|
+
: minRounded}`
|
|
136
|
+
| (None, None, None, Some(h), None, _) => `${h->Int.toString} h`
|
|
137
|
+
| (None, None, None, None, Some(min), sec) =>
|
|
138
|
+
let secondsAsMinutesRounded = sec->Option.mapWithDefault(0, sec => sec > 30 ? 1 : 0)
|
|
139
|
+
`${(min + secondsAsMinutesRounded)->Int.toString} min`
|
|
140
|
+
| (None, None, None, None, None, Some(sec)) => `${sec->Int.toString} sec`
|
|
141
|
+
| _ => DateFns.formatDuration(duration)
|
|
113
142
|
}
|
|
114
143
|
}
|
|
115
|
-
|
|
116
|
-
let toString = value =>
|
|
117
|
-
switch value {
|
|
118
|
-
| #min(v) => v->Float.toString ++ " min"
|
|
119
|
-
| #h(v) => v->Float.toString ++ " h"
|
|
120
|
-
}
|
|
121
144
|
}
|
|
122
145
|
|
|
123
146
|
module Dimension = {
|
package/src/vendors/DateFns.res
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
type startOfWeekOptions = {weekStartsOn: int}
|
|
2
|
-
|
|
3
1
|
type intervalObject = {
|
|
4
2
|
start: Js.Date.t,
|
|
5
3
|
@as("end")
|
|
@@ -15,27 +13,29 @@ type durationObject = {
|
|
|
15
13
|
seconds: option<int>,
|
|
16
14
|
}
|
|
17
15
|
|
|
16
|
+
type dateFnsLocale
|
|
17
|
+
@module("date-fns/locale")
|
|
18
|
+
external frLocale: dateFnsLocale = "fr"
|
|
19
|
+
@module("date-fns/locale")
|
|
20
|
+
external enLocale: dateFnsLocale = "enUS"
|
|
21
|
+
|
|
22
|
+
type options = {locale: dateFnsLocale}
|
|
23
|
+
|
|
24
|
+
@module("date-fns") external setDefaultOptions: options => unit = "setDefaultOptions"
|
|
25
|
+
|
|
18
26
|
// intervals
|
|
19
27
|
|
|
20
28
|
@module("date-fns")
|
|
21
29
|
external intervalToDuration: (~interval: intervalObject) => durationObject = "intervalToDuration"
|
|
22
30
|
|
|
23
|
-
type dateFnsLocale
|
|
24
|
-
@module("date-fns/locale/fr")
|
|
25
|
-
external frLocale: dateFnsLocale = "default"
|
|
26
|
-
@module("date-fns/locale/en-US")
|
|
27
|
-
external enLocale: dateFnsLocale = "default"
|
|
28
|
-
|
|
29
|
-
type formatDistanceToNowOptions = {locale: dateFnsLocale}
|
|
30
31
|
@module("date-fns")
|
|
31
|
-
external distanceInWordsToNow:
|
|
32
|
-
"formatDistanceToNow"
|
|
32
|
+
external distanceInWordsToNow: Js.Date.t => string = "formatDistanceToNow"
|
|
33
33
|
|
|
34
34
|
@module("date-fns/differenceInMinutes")
|
|
35
|
-
external differenceInMinutes: (Js.Date.t, Js.Date.t) => float = "
|
|
35
|
+
external differenceInMinutes: (Js.Date.t, Js.Date.t) => float = "differenceInMinutes"
|
|
36
36
|
|
|
37
37
|
@module("date-fns/differenceInDays")
|
|
38
|
-
external differenceInDays: (Js.Date.t, Js.Date.t) => int = "
|
|
38
|
+
external differenceInDays: (Js.Date.t, Js.Date.t) => int = "differenceInDays"
|
|
39
39
|
|
|
40
40
|
@module("date-fns")
|
|
41
41
|
external areIntervalsOverlapping: (intervalObject, intervalObject, Js.t<'a>) => bool =
|
|
@@ -56,15 +56,18 @@ external parseISO: string => Js.Date.t = "parseISO"
|
|
|
56
56
|
|
|
57
57
|
@module("date-fns") external formatWithPattern: (Js.Date.t, string) => string = "format"
|
|
58
58
|
|
|
59
|
-
type formatWithPatternOptions = {
|
|
60
|
-
|
|
61
|
-
weekStartsOn?: int,
|
|
62
|
-
firstWeekContainsDate?: int,
|
|
63
|
-
}
|
|
59
|
+
type formatWithPatternOptions = {firstWeekContainsDate?: int}
|
|
60
|
+
|
|
64
61
|
@module("date-fns")
|
|
65
62
|
external formatWithPatternWithOptions: (Js.Date.t, string, formatWithPatternOptions) => string =
|
|
66
63
|
"format"
|
|
67
64
|
|
|
65
|
+
@module("date-fns")
|
|
66
|
+
external lightFormat: (Js.Date.t, string) => string = "lightFormat"
|
|
67
|
+
|
|
68
|
+
@module("date-fns")
|
|
69
|
+
external formatDuration: durationObject => string = "formatDuration"
|
|
70
|
+
|
|
68
71
|
// set
|
|
69
72
|
|
|
70
73
|
@module("date-fns")
|
|
@@ -90,9 +93,9 @@ external startOfDay: Js.Date.t => Js.Date.t = "startOfDay"
|
|
|
90
93
|
@module("date-fns")
|
|
91
94
|
external endOfDay: Js.Date.t => Js.Date.t = "endOfDay"
|
|
92
95
|
@module("date-fns")
|
|
93
|
-
external startOfWeek:
|
|
96
|
+
external startOfWeek: Js.Date.t => Js.Date.t = "startOfWeek"
|
|
94
97
|
@module("date-fns")
|
|
95
|
-
external endOfWeek:
|
|
98
|
+
external endOfWeek: Js.Date.t => Js.Date.t = "endOfWeek"
|
|
96
99
|
@module("date-fns")
|
|
97
100
|
external addWeeks: (Js.Date.t, float) => Js.Date.t = "addWeeks"
|
|
98
101
|
@module("date-fns")
|
|
@@ -137,7 +140,7 @@ external isFirstDayOfMonth: Js.Date.t => bool = "isFirstDayOfMonth"
|
|
|
137
140
|
// other
|
|
138
141
|
|
|
139
142
|
@module("date-fns")
|
|
140
|
-
external getWeekNumber:
|
|
143
|
+
external getWeekNumber: Js.Date.t => int = "getWeek"
|
|
141
144
|
|
|
142
145
|
@module("date-fns")
|
|
143
146
|
external getTime: Js.Date.t => float = "getTime"
|
|
@@ -179,6 +182,3 @@ external isSunday: Js.Date.t => bool = "isSunday"
|
|
|
179
182
|
|
|
180
183
|
@module("date-fns")
|
|
181
184
|
external minutesToHours: int => int = "minutesToHours"
|
|
182
|
-
|
|
183
|
-
@module("date-fns")
|
|
184
|
-
external lightFormat: (Js.Date.t, string) => string = "lightFormat"
|
|
@@ -317,8 +317,8 @@ module RangeDayPickerInput = {
|
|
|
317
317
|
to: now->DateFns.endOfDay,
|
|
318
318
|
}
|
|
319
319
|
let currentWeekRange: range = {
|
|
320
|
-
from: now->DateFns.startOfWeek
|
|
321
|
-
to: now->DateFns.endOfWeek
|
|
320
|
+
from: now->DateFns.startOfWeek,
|
|
321
|
+
to: now->DateFns.endOfWeek,
|
|
322
322
|
}
|
|
323
323
|
let currentMonthRange: range = {
|
|
324
324
|
from: now->DateFns.startOfMonth,
|
|
@@ -497,7 +497,7 @@ module RangeDayPickerInput = {
|
|
|
497
497
|
<p className="ml-4">
|
|
498
498
|
<ReactIntl.FormattedMessage
|
|
499
499
|
defaultMessage="Semaine {number}"
|
|
500
|
-
values={"number": DateFns.getWeekNumber(Js.Date.make()
|
|
500
|
+
values={"number": DateFns.getWeekNumber(Js.Date.make())}
|
|
501
501
|
/>
|
|
502
502
|
</p>
|
|
503
503
|
</div>
|