@navikt/ds-react 1.4.1 → 1.4.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/_docs.json +120 -0
- package/cjs/date/hooks/useDatepicker.js +36 -11
- package/cjs/date/hooks/useMonthPicker.js +34 -10
- package/cjs/date/hooks/useRangeDatepicker.js +181 -65
- package/cjs/date/utils/format-date.js +3 -3
- package/cjs/date/utils/parse-date.js +14 -8
- package/esm/date/hooks/index.d.ts +3 -0
- package/esm/date/hooks/index.js.map +1 -1
- package/esm/date/hooks/useDatepicker.d.ts +18 -0
- package/esm/date/hooks/useDatepicker.js +36 -11
- package/esm/date/hooks/useDatepicker.js.map +1 -1
- package/esm/date/hooks/useMonthPicker.d.ts +17 -0
- package/esm/date/hooks/useMonthPicker.js +34 -10
- package/esm/date/hooks/useMonthPicker.js.map +1 -1
- package/esm/date/hooks/useRangeDatepicker.d.ts +12 -2
- package/esm/date/hooks/useRangeDatepicker.js +181 -65
- package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
- package/esm/date/utils/format-date.d.ts +1 -1
- package/esm/date/utils/format-date.js +3 -3
- package/esm/date/utils/format-date.js.map +1 -1
- package/esm/date/utils/parse-date.d.ts +1 -1
- package/esm/date/utils/parse-date.js +14 -8
- package/esm/date/utils/parse-date.js.map +1 -1
- package/package.json +2 -2
- package/src/date/datepicker/datepicker.stories.tsx +30 -5
- package/src/date/hooks/index.ts +3 -0
- package/src/date/hooks/useDatepicker.tsx +73 -10
- package/src/date/hooks/useMonthPicker.tsx +68 -10
- package/src/date/hooks/useRangeDatepicker.test.tsx +59 -0
- package/src/date/hooks/useRangeDatepicker.tsx +285 -92
- package/src/date/monthpicker/monthpicker.stories.tsx +20 -0
- package/src/date/utils/__tests__/format-dates.test.ts +4 -4
- package/src/date/utils/__tests__/parse-dates.test.ts +0 -40
- package/src/date/utils/format-date.ts +5 -3
- package/src/date/utils/parse-date.ts +18 -9
|
@@ -9,12 +9,76 @@ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
|
|
|
9
9
|
const react_1 = require("react");
|
|
10
10
|
const react_day_picker_1 = require("react-day-picker");
|
|
11
11
|
const utils_1 = require("../utils");
|
|
12
|
+
const getValidationMessage = (from = {}, to = {}) => ({
|
|
13
|
+
from: Object.assign({ isDisabled: false, isWeekend: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isValidDate: true }, from),
|
|
14
|
+
to: Object.assign({ isDisabled: false, isWeekend: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isBeforeFrom: false, isValidDate: true }, to),
|
|
15
|
+
});
|
|
12
16
|
const RANGE = {
|
|
13
17
|
FROM: "FROM",
|
|
14
18
|
TO: "TO",
|
|
15
19
|
};
|
|
20
|
+
const fromValidation = (day, opt) => {
|
|
21
|
+
const isBefore = (opt === null || opt === void 0 ? void 0 : opt.fromDate) && day && (0, differenceInCalendarDays_1.default)(opt === null || opt === void 0 ? void 0 : opt.fromDate, day) > 0;
|
|
22
|
+
const isAfter = (opt === null || opt === void 0 ? void 0 : opt.toDate) && day && (0, differenceInCalendarDays_1.default)(day, opt === null || opt === void 0 ? void 0 : opt.toDate) > 0;
|
|
23
|
+
if ((0, utils_1.isValidDate)(day) &&
|
|
24
|
+
!((opt === null || opt === void 0 ? void 0 : opt.disableWeekends) && (0, isWeekend_1.default)(day)) &&
|
|
25
|
+
!((opt === null || opt === void 0 ? void 0 : opt.disabled) && (0, react_day_picker_1.isMatch)(day, opt.disabled))) {
|
|
26
|
+
return {
|
|
27
|
+
isValidDate: false,
|
|
28
|
+
isInvalid: !(0, utils_1.isValidDate)(day),
|
|
29
|
+
isWeekend: (opt === null || opt === void 0 ? void 0 : opt.disableWeekends) && (0, isWeekend_1.default)(day),
|
|
30
|
+
isDisabled: (opt === null || opt === void 0 ? void 0 : opt.disabled) && (0, react_day_picker_1.isMatch)(day, opt.disabled),
|
|
31
|
+
isBefore: isBefore,
|
|
32
|
+
isAfter: isAfter,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (isBefore || isAfter) {
|
|
36
|
+
return {
|
|
37
|
+
isValidDate: false,
|
|
38
|
+
isBefore: isBefore,
|
|
39
|
+
isAfter: isAfter,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const toValidation = (day, from, opt) => {
|
|
44
|
+
var _a;
|
|
45
|
+
const isBefore = (opt === null || opt === void 0 ? void 0 : opt.fromDate) && day && (0, differenceInCalendarDays_1.default)(opt === null || opt === void 0 ? void 0 : opt.fromDate, day) > 0;
|
|
46
|
+
const isAfter = (opt === null || opt === void 0 ? void 0 : opt.toDate) && day && (0, differenceInCalendarDays_1.default)(day, opt === null || opt === void 0 ? void 0 : opt.toDate) > 0;
|
|
47
|
+
const isBeforeFrom = (_a = (from && (0, differenceInCalendarDays_1.default)(from, day) > 0)) !== null && _a !== void 0 ? _a : false;
|
|
48
|
+
if ((0, utils_1.isValidDate)(day) &&
|
|
49
|
+
!((opt === null || opt === void 0 ? void 0 : opt.disableWeekends) && (0, isWeekend_1.default)(day)) &&
|
|
50
|
+
!((opt === null || opt === void 0 ? void 0 : opt.disabled) && (0, react_day_picker_1.isMatch)(day, opt.disabled))) {
|
|
51
|
+
return {
|
|
52
|
+
isValidDate: false,
|
|
53
|
+
isInvalid: !(0, utils_1.isValidDate)(day),
|
|
54
|
+
isWeekend: (opt === null || opt === void 0 ? void 0 : opt.disableWeekends) && (0, isWeekend_1.default)(day),
|
|
55
|
+
isDisabled: (opt === null || opt === void 0 ? void 0 : opt.disabled) && (0, react_day_picker_1.isMatch)(day, opt.disabled),
|
|
56
|
+
isBefore,
|
|
57
|
+
isAfter,
|
|
58
|
+
isBeforeFrom,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (isBefore || isAfter || isBeforeFrom) {
|
|
62
|
+
return {
|
|
63
|
+
isValidDate: false,
|
|
64
|
+
isBefore,
|
|
65
|
+
isAfter,
|
|
66
|
+
isBeforeFrom,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const initialValidation = (range, opt) => {
|
|
71
|
+
if (!range || !(range === null || range === void 0 ? void 0 : range.from)) {
|
|
72
|
+
return getValidationMessage({ isEmpty: true, isValidDate: false }, { isEmpty: true, isValidDate: false });
|
|
73
|
+
}
|
|
74
|
+
const fromVal = fromValidation(range.from, opt);
|
|
75
|
+
const toVal = range.to
|
|
76
|
+
? toValidation(range.to, range.from, opt)
|
|
77
|
+
: { isEmpty: true, isValidDate: false };
|
|
78
|
+
return getValidationMessage(Object.assign({}, fromVal), Object.assign({}, toVal));
|
|
79
|
+
};
|
|
16
80
|
const useRangeDatepicker = (opt = {}) => {
|
|
17
|
-
const { locale: _locale = "nb", defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onRangeChange, } = opt;
|
|
81
|
+
const { locale: _locale = "nb", defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onRangeChange, inputFormat, onValidate, } = opt;
|
|
18
82
|
const locale = (0, utils_1.getLocaleFromString)(_locale);
|
|
19
83
|
const inputRefTo = (0, react_1.useRef)(null);
|
|
20
84
|
const inputRefFrom = (0, react_1.useRef)(null);
|
|
@@ -24,16 +88,22 @@ const useRangeDatepicker = (opt = {}) => {
|
|
|
24
88
|
const [month, setMonth] = (0, react_1.useState)(defaultSelected ? defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from : today);
|
|
25
89
|
const [selectedRange, setSelectedRange] = (0, react_1.useState)(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : { from: undefined, to: undefined });
|
|
26
90
|
const [fromInputValue, setFromInputValue] = (0, react_1.useState)((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from)
|
|
27
|
-
? (0, utils_1.formatDateForInput)(defaultSelected.from, locale, "date")
|
|
91
|
+
? (0, utils_1.formatDateForInput)(defaultSelected.from, locale, "date", inputFormat)
|
|
28
92
|
: "");
|
|
29
93
|
const [toInputValue, setToInputValue] = (0, react_1.useState)((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.to)
|
|
30
|
-
? (0, utils_1.formatDateForInput)(defaultSelected.to, locale, "date")
|
|
94
|
+
? (0, utils_1.formatDateForInput)(defaultSelected.to, locale, "date", inputFormat)
|
|
31
95
|
: "");
|
|
96
|
+
const [validation, setValidation] = (0, react_1.useState)(initialValidation(selectedRange, opt));
|
|
32
97
|
const [open, setOpen] = (0, react_1.useState)(false);
|
|
33
98
|
const updateRange = (range) => {
|
|
34
99
|
onRangeChange === null || onRangeChange === void 0 ? void 0 : onRangeChange(range);
|
|
35
100
|
setSelectedRange(range);
|
|
36
101
|
};
|
|
102
|
+
const updateValidation = (from = {}, to = {}) => {
|
|
103
|
+
const msg = getValidationMessage(from, to);
|
|
104
|
+
setValidation(msg);
|
|
105
|
+
onValidate === null || onValidate === void 0 ? void 0 : onValidate(msg);
|
|
106
|
+
};
|
|
37
107
|
const handleFocusIn = (0, react_1.useCallback)((e) => {
|
|
38
108
|
var _a, _b, _c;
|
|
39
109
|
if (!(e === null || e === void 0 ? void 0 : e.target) || !((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.nodeType)) {
|
|
@@ -61,18 +131,24 @@ const useRangeDatepicker = (opt = {}) => {
|
|
|
61
131
|
const reset = () => {
|
|
62
132
|
updateRange(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : { from: undefined, to: undefined });
|
|
63
133
|
setMonth(defaultSelected ? defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from : today);
|
|
134
|
+
setValidation(initialValidation(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : { from: undefined, to: undefined }, opt));
|
|
64
135
|
setFromInputValue((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from)
|
|
65
|
-
? (0, utils_1.formatDateForInput)(defaultSelected.from, locale, "date")
|
|
136
|
+
? (0, utils_1.formatDateForInput)(defaultSelected.from, locale, "date", inputFormat)
|
|
66
137
|
: "");
|
|
67
138
|
setToInputValue((defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.to)
|
|
68
|
-
? (0, utils_1.formatDateForInput)(defaultSelected.to, locale, "date")
|
|
139
|
+
? (0, utils_1.formatDateForInput)(defaultSelected.to, locale, "date", inputFormat)
|
|
69
140
|
: "");
|
|
70
141
|
setDefaultSelected(_defaultSelected);
|
|
71
142
|
};
|
|
72
143
|
const setSelected = (range) => {
|
|
73
144
|
updateRange(range);
|
|
74
|
-
setFromInputValue((range === null || range === void 0 ? void 0 : range.from)
|
|
75
|
-
|
|
145
|
+
setFromInputValue((range === null || range === void 0 ? void 0 : range.from)
|
|
146
|
+
? (0, utils_1.formatDateForInput)(range.from, locale, "date", inputFormat)
|
|
147
|
+
: "");
|
|
148
|
+
setToInputValue((range === null || range === void 0 ? void 0 : range.to)
|
|
149
|
+
? (0, utils_1.formatDateForInput)(range === null || range === void 0 ? void 0 : range.to, locale, "date", inputFormat)
|
|
150
|
+
: "");
|
|
151
|
+
setValidation(initialValidation(range, opt));
|
|
76
152
|
};
|
|
77
153
|
const handleFocus = (e, src) => {
|
|
78
154
|
!open && setOpen(true);
|
|
@@ -80,32 +156,8 @@ const useRangeDatepicker = (opt = {}) => {
|
|
|
80
156
|
if ((0, utils_1.isValidDate)(day)) {
|
|
81
157
|
setMonth(day);
|
|
82
158
|
src === RANGE.FROM
|
|
83
|
-
? setFromInputValue((0, utils_1.formatDateForInput)(day, locale, "date"))
|
|
84
|
-
: setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const handleInputs = (day, src) => {
|
|
88
|
-
if (src === RANGE.FROM) {
|
|
89
|
-
const isAfter = toInputValue &&
|
|
90
|
-
(0, differenceInCalendarDays_1.default)(day, (0, utils_1.parseDate)(toInputValue, today, locale, "date")) > 0;
|
|
91
|
-
if (isAfter) {
|
|
92
|
-
setFromInputValue((0, utils_1.formatDateForInput)((0, utils_1.parseDate)(toInputValue, today, locale, "date"), locale, "date"));
|
|
93
|
-
setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
setFromInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else if (src === RANGE.TO) {
|
|
100
|
-
const isBefore = fromInputValue &&
|
|
101
|
-
(0, differenceInCalendarDays_1.default)((0, utils_1.parseDate)(fromInputValue, today, locale, "date"), day) > 0;
|
|
102
|
-
if (isBefore) {
|
|
103
|
-
setToInputValue((0, utils_1.formatDateForInput)((0, utils_1.parseDate)(fromInputValue, today, locale, "date"), locale, "date"));
|
|
104
|
-
setFromInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date"));
|
|
108
|
-
}
|
|
159
|
+
? setFromInputValue((0, utils_1.formatDateForInput)(day, locale, "date", inputFormat))
|
|
160
|
+
: setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date", inputFormat));
|
|
109
161
|
}
|
|
110
162
|
};
|
|
111
163
|
const handleBlur = (e, src) => {
|
|
@@ -113,7 +165,17 @@ const useRangeDatepicker = (opt = {}) => {
|
|
|
113
165
|
if (!(0, utils_1.isValidDate)(day)) {
|
|
114
166
|
return;
|
|
115
167
|
}
|
|
116
|
-
|
|
168
|
+
if (src === RANGE.FROM) {
|
|
169
|
+
setFromInputValue((0, utils_1.formatDateForInput)(day, locale, "date", inputFormat));
|
|
170
|
+
}
|
|
171
|
+
else if (src === RANGE.TO) {
|
|
172
|
+
setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date", inputFormat));
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const validateDay = (day) => {
|
|
176
|
+
return ((0, utils_1.isValidDate)(day) &&
|
|
177
|
+
!(disableWeekends && (0, isWeekend_1.default)(day)) &&
|
|
178
|
+
!(disabled && (0, react_day_picker_1.isMatch)(day, disabled)));
|
|
117
179
|
};
|
|
118
180
|
const handleSelect = (range) => {
|
|
119
181
|
if ((range === null || range === void 0 ? void 0 : range.from) && (range === null || range === void 0 ? void 0 : range.to)) {
|
|
@@ -121,54 +183,106 @@ const useRangeDatepicker = (opt = {}) => {
|
|
|
121
183
|
}
|
|
122
184
|
const prevToRange = !(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) && (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) ? selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to : range === null || range === void 0 ? void 0 : range.to;
|
|
123
185
|
(range === null || range === void 0 ? void 0 : range.from)
|
|
124
|
-
? setFromInputValue((0, utils_1.formatDateForInput)(range === null || range === void 0 ? void 0 : range.from, locale, "date"))
|
|
186
|
+
? setFromInputValue((0, utils_1.formatDateForInput)(range === null || range === void 0 ? void 0 : range.from, locale, "date", inputFormat))
|
|
125
187
|
: setFromInputValue("");
|
|
126
188
|
prevToRange
|
|
127
|
-
? setToInputValue((0, utils_1.formatDateForInput)(prevToRange, locale, "date"))
|
|
189
|
+
? setToInputValue((0, utils_1.formatDateForInput)(prevToRange, locale, "date", inputFormat))
|
|
128
190
|
: setToInputValue("");
|
|
191
|
+
updateValidation({ isValidDate: !!(range === null || range === void 0 ? void 0 : range.from), isEmpty: !(range === null || range === void 0 ? void 0 : range.from) }, { isValidDate: !!(range === null || range === void 0 ? void 0 : range.to), isEmpty: !prevToRange });
|
|
129
192
|
updateRange({ from: range === null || range === void 0 ? void 0 : range.from, to: prevToRange });
|
|
130
193
|
};
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
194
|
+
const fromChange = (val = "", day, isBefore = false, isAfter = false) => {
|
|
195
|
+
setFromInputValue(val);
|
|
196
|
+
if (!validateDay(day)) {
|
|
197
|
+
updateRange(Object.assign(Object.assign({}, selectedRange), { from: undefined }));
|
|
198
|
+
updateValidation({
|
|
199
|
+
isEmpty: !val,
|
|
200
|
+
isValidDate: false,
|
|
201
|
+
isInvalid: !(0, utils_1.isValidDate)(day),
|
|
202
|
+
isWeekend: disableWeekends && (0, isWeekend_1.default)(day),
|
|
203
|
+
isDisabled: disabled && (0, react_day_picker_1.isMatch)(day, disabled),
|
|
204
|
+
isBefore,
|
|
205
|
+
isAfter,
|
|
206
|
+
}, validation.to);
|
|
142
207
|
return;
|
|
143
208
|
}
|
|
144
|
-
const isBefore = fromDate && (0, differenceInCalendarDays_1.default)(fromDate, day) > 0;
|
|
145
|
-
const isAfter = toDate && (0, differenceInCalendarDays_1.default)(day, toDate) > 0;
|
|
146
209
|
if (isBefore || isAfter) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
:
|
|
210
|
+
updateRange(Object.assign(Object.assign({}, selectedRange), { from: undefined }));
|
|
211
|
+
updateValidation({
|
|
212
|
+
isValidDate: false,
|
|
213
|
+
isBefore,
|
|
214
|
+
isAfter,
|
|
215
|
+
}, validation.to);
|
|
150
216
|
return;
|
|
151
217
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
(
|
|
155
|
-
(0,
|
|
156
|
-
updateRange({ from: day, to: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from });
|
|
218
|
+
if ((selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) &&
|
|
219
|
+
(0, differenceInCalendarDays_1.default)(day, selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) > 0) {
|
|
220
|
+
updateRange({ to: day, from: day });
|
|
221
|
+
setToInputValue((0, utils_1.formatDateForInput)(day, locale, "date", inputFormat));
|
|
157
222
|
setMonth(day);
|
|
223
|
+
updateValidation();
|
|
158
224
|
return;
|
|
159
225
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
226
|
+
if (toInputValue && !(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to)) {
|
|
227
|
+
const toDay = (0, utils_1.parseDate)(toInputValue, today, locale, "date");
|
|
228
|
+
if (validateDay(toDay)) {
|
|
229
|
+
updateRange({ from: day, to: toDay });
|
|
230
|
+
setMonth(day);
|
|
231
|
+
updateValidation();
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
updateRange(Object.assign(Object.assign({}, selectedRange), { from: day }));
|
|
236
|
+
updateValidation({}, validation.to);
|
|
237
|
+
setMonth(day);
|
|
238
|
+
};
|
|
239
|
+
const toChange = (val = "", day, isBefore = false, isAfter = false) => {
|
|
240
|
+
setToInputValue(val);
|
|
241
|
+
if (!validateDay(day)) {
|
|
242
|
+
updateRange({ from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: undefined });
|
|
243
|
+
updateValidation(validation.from, {
|
|
244
|
+
isEmpty: !val,
|
|
245
|
+
isValidDate: false,
|
|
246
|
+
isInvalid: !(0, utils_1.isValidDate)(day),
|
|
247
|
+
isWeekend: disableWeekends && (0, isWeekend_1.default)(day),
|
|
248
|
+
isDisabled: disabled && (0, react_day_picker_1.isMatch)(day, disabled),
|
|
249
|
+
isBefore,
|
|
250
|
+
isAfter,
|
|
251
|
+
});
|
|
166
252
|
return;
|
|
167
253
|
}
|
|
168
|
-
|
|
169
|
-
|
|
254
|
+
if (isBefore || isAfter) {
|
|
255
|
+
updateRange({ from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: undefined });
|
|
256
|
+
updateValidation(validation.from, {
|
|
257
|
+
isValidDate: false,
|
|
258
|
+
isBefore,
|
|
259
|
+
isAfter,
|
|
260
|
+
});
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
/* If to-value < from-value */
|
|
264
|
+
if ((selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) &&
|
|
265
|
+
(0, differenceInCalendarDays_1.default)(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, day) > 0) {
|
|
266
|
+
updateRange({ from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: undefined });
|
|
267
|
+
updateValidation(validation.from, {
|
|
268
|
+
isValidDate: false,
|
|
269
|
+
isBeforeFrom: true,
|
|
270
|
+
});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
updateRange({ from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: day });
|
|
274
|
+
updateValidation(validation.from, {});
|
|
170
275
|
setMonth(day);
|
|
171
276
|
};
|
|
277
|
+
/* live-update datepicker based on changes in inputfields */
|
|
278
|
+
const handleChange = (e, src) => {
|
|
279
|
+
const day = (0, utils_1.parseDate)(e.target.value, today, locale, "date");
|
|
280
|
+
const isBefore = fromDate && (0, differenceInCalendarDays_1.default)(fromDate, day) > 0;
|
|
281
|
+
const isAfter = toDate && (0, differenceInCalendarDays_1.default)(day, toDate) > 0;
|
|
282
|
+
return src === RANGE.FROM
|
|
283
|
+
? fromChange(e.target.value, day, isBefore, isAfter)
|
|
284
|
+
: toChange(e.target.value, day, isBefore, isAfter);
|
|
285
|
+
};
|
|
172
286
|
const handleClose = (0, react_1.useCallback)(() => {
|
|
173
287
|
var _a, _b;
|
|
174
288
|
setOpen(false);
|
|
@@ -198,6 +312,8 @@ const useRangeDatepicker = (opt = {}) => {
|
|
|
198
312
|
mode: "range",
|
|
199
313
|
open,
|
|
200
314
|
onOpenToggle: () => setOpen((x) => !x),
|
|
315
|
+
disabled,
|
|
316
|
+
disableWeekends,
|
|
201
317
|
ref: datePickerRef,
|
|
202
318
|
};
|
|
203
319
|
const fromInputProps = {
|
|
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.formatDateForInput = void 0;
|
|
7
7
|
const format_1 = __importDefault(require("date-fns/format"));
|
|
8
8
|
const parse_date_1 = require("./parse-date");
|
|
9
|
-
const formatDateForInput = (date, locale, type) => {
|
|
10
|
-
const INPUT_DATE_STRING_FORMAT = type === "date"
|
|
9
|
+
const formatDateForInput = (date, locale, type, inputFormat) => {
|
|
10
|
+
const INPUT_DATE_STRING_FORMAT = inputFormat !== null && inputFormat !== void 0 ? inputFormat : (type === "date"
|
|
11
11
|
? parse_date_1.INPUT_DATE_STRING_FORMAT_DATE
|
|
12
|
-
: parse_date_1.INPUT_DATE_STRING_FORMAT_MONTH;
|
|
12
|
+
: parse_date_1.INPUT_DATE_STRING_FORMAT_MONTH);
|
|
13
13
|
return (0, format_1.default)(date, INPUT_DATE_STRING_FORMAT, { locale });
|
|
14
14
|
};
|
|
15
15
|
exports.formatDateForInput = formatDateForInput;
|
|
@@ -9,16 +9,10 @@ const _1 = require(".");
|
|
|
9
9
|
exports.INPUT_DATE_STRING_FORMAT_DATE = "dd.MM.yyyy";
|
|
10
10
|
exports.INPUT_DATE_STRING_FORMAT_MONTH = "MMMM yyyy";
|
|
11
11
|
const ALLOWED_INPUT_FORMATS_DATE = [
|
|
12
|
-
"ddMMyy",
|
|
13
|
-
"d.M.yy",
|
|
14
|
-
"dd.MM.yy",
|
|
15
|
-
"dd/MM/yy",
|
|
16
|
-
"dd-MM-yy",
|
|
17
12
|
exports.INPUT_DATE_STRING_FORMAT_DATE,
|
|
18
13
|
"ddMMyyyy",
|
|
19
14
|
"dd/MM/yyyy",
|
|
20
15
|
"dd-MM-yyyy",
|
|
21
|
-
"d.M.yyyy",
|
|
22
16
|
];
|
|
23
17
|
const ALLOWED_INPUT_FORMATS_MONTH = [
|
|
24
18
|
"M/yyyy",
|
|
@@ -29,15 +23,27 @@ const ALLOWED_INPUT_FORMATS_MONTH = [
|
|
|
29
23
|
exports.INPUT_DATE_STRING_FORMAT_MONTH,
|
|
30
24
|
...ALLOWED_INPUT_FORMATS_DATE,
|
|
31
25
|
];
|
|
26
|
+
const isTwoDigitYear = (dateString, today, locale, formats) => {
|
|
27
|
+
let parsed;
|
|
28
|
+
const newFormat = formats.map((x) => x.replace("yyyy", "yy"));
|
|
29
|
+
for (const format of newFormat) {
|
|
30
|
+
parsed = (0, parse_1.default)(dateString, format, today, { locale });
|
|
31
|
+
if ((0, _1.isValidDate)(parsed)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
32
37
|
const parseDate = (date, today, locale, type) => {
|
|
33
38
|
let parsed;
|
|
34
39
|
const ALLOWED_FORMATS = type === "date" ? ALLOWED_INPUT_FORMATS_DATE : ALLOWED_INPUT_FORMATS_MONTH;
|
|
35
40
|
for (const format of ALLOWED_FORMATS) {
|
|
36
41
|
parsed = (0, parse_1.default)(date, format, today, { locale });
|
|
37
|
-
if ((0, _1.isValidDate)(parsed)
|
|
42
|
+
if ((0, _1.isValidDate)(parsed) &&
|
|
43
|
+
!isTwoDigitYear(date, today, locale, ALLOWED_FORMATS)) {
|
|
38
44
|
return parsed;
|
|
39
45
|
}
|
|
40
46
|
}
|
|
41
|
-
return
|
|
47
|
+
return new Date("Invalid date");
|
|
42
48
|
};
|
|
43
49
|
exports.parseDate = parseDate;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { useDatepicker as UNSAFE_useDatepicker } from "./useDatepicker";
|
|
2
|
+
export type { DateValidationT } from "./useDatepicker";
|
|
2
3
|
export { useRangeDatepicker as UNSAFE_useRangeDatepicker } from "./useRangeDatepicker";
|
|
4
|
+
export type { RangeValidationT } from "./useRangeDatepicker";
|
|
3
5
|
export { useMonthpicker as UNSAFE_useMonthpicker } from "./useMonthPicker";
|
|
6
|
+
export type { MonthValidationT } from "./useMonthPicker";
|
|
4
7
|
export { useDateInputContext, DateContext } from "./useDateInputContext";
|
|
5
8
|
export { useSharedMonthContext, SharedMonthProvider, } from "./useSharedMonthContext";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/date/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/date/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -13,6 +13,15 @@ export interface UseDatepickerOptions extends Pick<DatePickerProps, "locale" | "
|
|
|
13
13
|
* Callback for changed state
|
|
14
14
|
*/
|
|
15
15
|
onDateChange?: (val?: Date) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Input-format
|
|
18
|
+
* @default "dd.MM.yyyy"
|
|
19
|
+
*/
|
|
20
|
+
inputFormat?: string;
|
|
21
|
+
/**
|
|
22
|
+
* validation-callback
|
|
23
|
+
*/
|
|
24
|
+
onValidate?: (val: DateValidationT) => void;
|
|
16
25
|
}
|
|
17
26
|
interface UseDatepickerValue {
|
|
18
27
|
/**
|
|
@@ -37,5 +46,14 @@ interface UseDatepickerValue {
|
|
|
37
46
|
*/
|
|
38
47
|
setSelected: (date?: Date) => void;
|
|
39
48
|
}
|
|
49
|
+
export declare type DateValidationT = {
|
|
50
|
+
isDisabled: boolean;
|
|
51
|
+
isWeekend: boolean;
|
|
52
|
+
isEmpty: boolean;
|
|
53
|
+
isInvalid: boolean;
|
|
54
|
+
isValidDate: boolean;
|
|
55
|
+
isBefore: boolean;
|
|
56
|
+
isAfter: boolean;
|
|
57
|
+
};
|
|
40
58
|
export declare const useDatepicker: (opt?: UseDatepickerOptions) => UseDatepickerValue;
|
|
41
59
|
export {};
|
|
@@ -3,8 +3,9 @@ import isWeekend from "date-fns/isWeekend";
|
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
4
|
import { isMatch } from "react-day-picker";
|
|
5
5
|
import { formatDateForInput, getLocaleFromString, isValidDate, parseDate, } from "../utils";
|
|
6
|
+
const getValidationMessage = (val = {}) => (Object.assign({ isDisabled: false, isWeekend: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isValidDate: true }, val));
|
|
6
7
|
export const useDatepicker = (opt = {}) => {
|
|
7
|
-
const { locale: _locale = "nb", required, defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onDateChange, } = opt;
|
|
8
|
+
const { locale: _locale = "nb", required, defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onDateChange, inputFormat, onValidate, } = opt;
|
|
8
9
|
const locale = getLocaleFromString(_locale);
|
|
9
10
|
const inputRef = useRef(null);
|
|
10
11
|
const daypickerRef = useRef(null);
|
|
@@ -14,13 +15,17 @@ export const useDatepicker = (opt = {}) => {
|
|
|
14
15
|
const [selectedDay, setSelectedDay] = useState(defaultSelected);
|
|
15
16
|
const [open, setOpen] = useState(false);
|
|
16
17
|
const defaultInputValue = defaultSelected
|
|
17
|
-
? formatDateForInput(defaultSelected, locale, "date")
|
|
18
|
+
? formatDateForInput(defaultSelected, locale, "date", inputFormat)
|
|
18
19
|
: "";
|
|
19
20
|
const [inputValue, setInputValue] = useState(defaultInputValue);
|
|
20
21
|
const updateDate = (date) => {
|
|
21
22
|
onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange(date);
|
|
22
23
|
setSelectedDay(date);
|
|
23
24
|
};
|
|
25
|
+
const updateValidation = (val = {}) => {
|
|
26
|
+
const msg = getValidationMessage(val);
|
|
27
|
+
onValidate === null || onValidate === void 0 ? void 0 : onValidate(msg);
|
|
28
|
+
};
|
|
24
29
|
const handleFocusIn = useCallback((e) => {
|
|
25
30
|
var _a, _b;
|
|
26
31
|
if (!(e === null || e === void 0 ? void 0 : e.target) || !((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.nodeType)) {
|
|
@@ -52,19 +57,20 @@ export const useDatepicker = (opt = {}) => {
|
|
|
52
57
|
const setSelected = (date) => {
|
|
53
58
|
updateDate(date);
|
|
54
59
|
setMonth(date !== null && date !== void 0 ? date : today);
|
|
55
|
-
setInputValue(date ? formatDateForInput(date, locale, "date") : "");
|
|
60
|
+
setInputValue(date ? formatDateForInput(date, locale, "date", inputFormat) : "");
|
|
56
61
|
};
|
|
57
62
|
const handleFocus = (e) => {
|
|
58
63
|
!open && setOpen(true);
|
|
59
64
|
let day = parseDate(e.target.value, today, locale, "date");
|
|
60
65
|
if (isValidDate(day)) {
|
|
61
66
|
setMonth(day);
|
|
62
|
-
setInputValue(formatDateForInput(day, locale, "date"));
|
|
67
|
+
setInputValue(formatDateForInput(day, locale, "date", inputFormat));
|
|
63
68
|
}
|
|
64
69
|
};
|
|
65
70
|
const handleBlur = (e) => {
|
|
66
71
|
let day = parseDate(e.target.value, today, locale, "date");
|
|
67
|
-
isValidDate(day) &&
|
|
72
|
+
isValidDate(day) &&
|
|
73
|
+
setInputValue(formatDateForInput(day, locale, "date", inputFormat));
|
|
68
74
|
};
|
|
69
75
|
/* Only allow de-selecting if not required */
|
|
70
76
|
const handleDayClick = (day, { selected }) => {
|
|
@@ -75,11 +81,13 @@ export const useDatepicker = (opt = {}) => {
|
|
|
75
81
|
if (!required && selected) {
|
|
76
82
|
updateDate(undefined);
|
|
77
83
|
setInputValue("");
|
|
84
|
+
updateValidation({ isValidDate: false, isEmpty: true });
|
|
78
85
|
return;
|
|
79
86
|
}
|
|
80
87
|
updateDate(day);
|
|
88
|
+
updateValidation();
|
|
81
89
|
setMonth(day);
|
|
82
|
-
setInputValue(day ? formatDateForInput(day, locale, "date") : "");
|
|
90
|
+
setInputValue(day ? formatDateForInput(day, locale, "date", inputFormat) : "");
|
|
83
91
|
};
|
|
84
92
|
// When changing the input field, save its value in state and check if the
|
|
85
93
|
// string is a valid date. If it is a valid day, set it as selected and update
|
|
@@ -87,19 +95,34 @@ export const useDatepicker = (opt = {}) => {
|
|
|
87
95
|
const handleChange = (e) => {
|
|
88
96
|
setInputValue(e.target.value);
|
|
89
97
|
const day = parseDate(e.target.value, today, locale, "date");
|
|
98
|
+
const isBefore = fromDate && day && differenceInCalendarDays(fromDate, day) > 0;
|
|
99
|
+
const isAfter = toDate && day && differenceInCalendarDays(day, toDate) > 0;
|
|
90
100
|
if (!isValidDate(day) ||
|
|
91
|
-
(
|
|
92
|
-
|
|
101
|
+
(disableWeekends && isWeekend(day)) ||
|
|
102
|
+
(disabled && isMatch(day, disabled))) {
|
|
93
103
|
updateDate(undefined);
|
|
104
|
+
updateValidation({
|
|
105
|
+
isInvalid: isValidDate(day),
|
|
106
|
+
isWeekend: disableWeekends && isWeekend(day),
|
|
107
|
+
isDisabled: disabled && isMatch(day, disabled),
|
|
108
|
+
isValidDate: false,
|
|
109
|
+
isEmpty: !e.target.value,
|
|
110
|
+
isBefore: isBefore !== null && isBefore !== void 0 ? isBefore : false,
|
|
111
|
+
isAfter: isAfter !== null && isAfter !== void 0 ? isAfter : false,
|
|
112
|
+
});
|
|
94
113
|
return;
|
|
95
114
|
}
|
|
96
|
-
const isBefore = fromDate && differenceInCalendarDays(fromDate, day) > 0;
|
|
97
|
-
const isAfter = toDate && differenceInCalendarDays(day, toDate) > 0;
|
|
98
115
|
if (isBefore || isAfter) {
|
|
99
116
|
updateDate(undefined);
|
|
117
|
+
updateValidation({
|
|
118
|
+
isValidDate: false,
|
|
119
|
+
isBefore: isBefore !== null && isBefore !== void 0 ? isBefore : false,
|
|
120
|
+
isAfter: isAfter !== null && isAfter !== void 0 ? isAfter : false,
|
|
121
|
+
});
|
|
100
122
|
return;
|
|
101
123
|
}
|
|
102
124
|
updateDate(day);
|
|
125
|
+
updateValidation();
|
|
103
126
|
setMonth(day);
|
|
104
127
|
};
|
|
105
128
|
const handleClose = useCallback(() => {
|
|
@@ -117,13 +140,15 @@ export const useDatepicker = (opt = {}) => {
|
|
|
117
140
|
month,
|
|
118
141
|
onMonthChange: (month) => setMonth(month),
|
|
119
142
|
onDayClick: handleDayClick,
|
|
120
|
-
selected: selectedDay,
|
|
143
|
+
selected: selectedDay !== null && selectedDay !== void 0 ? selectedDay : new Date("Invalid date"),
|
|
121
144
|
locale: _locale,
|
|
122
145
|
fromDate,
|
|
123
146
|
toDate,
|
|
124
147
|
today,
|
|
125
148
|
open,
|
|
126
149
|
onOpenToggle: () => setOpen((x) => !x),
|
|
150
|
+
disabled,
|
|
151
|
+
disableWeekends,
|
|
127
152
|
ref: daypickerRef,
|
|
128
153
|
};
|
|
129
154
|
const inputProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDatepicker.js","sourceRoot":"","sources":["../../../src/date/hooks/useDatepicker.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAwB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,SAAS,GACV,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useDatepicker.js","sourceRoot":"","sources":["../../../src/date/hooks/useDatepicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,15 @@ export interface UseMonthPickerOptions extends Pick<MonthPickerProps, "locale" |
|
|
|
9
9
|
* Callback for month-change
|
|
10
10
|
*/
|
|
11
11
|
onMonthChange?: (date?: Date) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Input-format
|
|
14
|
+
* @default "MMMM yyyy"
|
|
15
|
+
*/
|
|
16
|
+
inputFormat?: string;
|
|
17
|
+
/**
|
|
18
|
+
* validation-callback
|
|
19
|
+
*/
|
|
20
|
+
onValidate?: (val: MonthValidationT) => void;
|
|
12
21
|
}
|
|
13
22
|
interface UseMonthPickerValue {
|
|
14
23
|
/**
|
|
@@ -33,5 +42,13 @@ interface UseMonthPickerValue {
|
|
|
33
42
|
*/
|
|
34
43
|
reset: () => void;
|
|
35
44
|
}
|
|
45
|
+
export declare type MonthValidationT = {
|
|
46
|
+
isDisabled: boolean;
|
|
47
|
+
isEmpty: boolean;
|
|
48
|
+
isInvalid: boolean;
|
|
49
|
+
isValidMonth: boolean;
|
|
50
|
+
isBefore: boolean;
|
|
51
|
+
isAfter: boolean;
|
|
52
|
+
};
|
|
36
53
|
export declare const useMonthpicker: (opt?: UseMonthPickerOptions) => UseMonthPickerValue;
|
|
37
54
|
export {};
|