@navikt/ds-react 1.4.2 → 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.
Files changed (35) hide show
  1. package/_docs.json +120 -0
  2. package/cjs/date/hooks/useDatepicker.js +36 -11
  3. package/cjs/date/hooks/useMonthPicker.js +34 -10
  4. package/cjs/date/hooks/useRangeDatepicker.js +181 -65
  5. package/cjs/date/utils/format-date.js +3 -3
  6. package/cjs/date/utils/parse-date.js +14 -8
  7. package/esm/date/hooks/index.d.ts +3 -0
  8. package/esm/date/hooks/index.js.map +1 -1
  9. package/esm/date/hooks/useDatepicker.d.ts +18 -0
  10. package/esm/date/hooks/useDatepicker.js +36 -11
  11. package/esm/date/hooks/useDatepicker.js.map +1 -1
  12. package/esm/date/hooks/useMonthPicker.d.ts +17 -0
  13. package/esm/date/hooks/useMonthPicker.js +34 -10
  14. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  15. package/esm/date/hooks/useRangeDatepicker.d.ts +12 -2
  16. package/esm/date/hooks/useRangeDatepicker.js +181 -65
  17. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  18. package/esm/date/utils/format-date.d.ts +1 -1
  19. package/esm/date/utils/format-date.js +3 -3
  20. package/esm/date/utils/format-date.js.map +1 -1
  21. package/esm/date/utils/parse-date.d.ts +1 -1
  22. package/esm/date/utils/parse-date.js +14 -8
  23. package/esm/date/utils/parse-date.js.map +1 -1
  24. package/package.json +2 -2
  25. package/src/date/datepicker/datepicker.stories.tsx +30 -5
  26. package/src/date/hooks/index.ts +3 -0
  27. package/src/date/hooks/useDatepicker.tsx +73 -10
  28. package/src/date/hooks/useMonthPicker.tsx +68 -10
  29. package/src/date/hooks/useRangeDatepicker.test.tsx +59 -0
  30. package/src/date/hooks/useRangeDatepicker.tsx +285 -92
  31. package/src/date/monthpicker/monthpicker.stories.tsx +20 -0
  32. package/src/date/utils/__tests__/format-dates.test.ts +4 -4
  33. package/src/date/utils/__tests__/parse-dates.test.ts +0 -40
  34. package/src/date/utils/format-date.ts +5 -3
  35. 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) ? (0, utils_1.formatDateForInput)(range.from, locale, "date") : "");
75
- setToInputValue((range === null || range === void 0 ? void 0 : range.to) ? (0, utils_1.formatDateForInput)(range === null || range === void 0 ? void 0 : range.to, locale, "date") : "");
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
- handleInputs(day, src);
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
- /* live-update datepicker based on changes in inputfields */
132
- const handleChange = (e, src) => {
133
- src === RANGE.FROM
134
- ? setFromInputValue(e.target.value)
135
- : setToInputValue(e.target.value);
136
- const day = (0, utils_1.parseDate)(e.target.value, today, locale, "date");
137
- if (!(0, utils_1.isValidDate)(day) ||
138
- (disabled &&
139
- ((disableWeekends && (0, isWeekend_1.default)(day)) || (0, react_day_picker_1.isMatch)(day, disabled)))) {
140
- updateRange(src === RANGE.FROM
141
- ? Object.assign(Object.assign({}, selectedRange), { from: undefined }) : { from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: undefined });
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
- src === RANGE.FROM
148
- ? updateRange(Object.assign(Object.assign({}, selectedRange), { from: undefined }))
149
- : updateRange({ from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: undefined });
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
- /* If to-value < from-value, switch places in state */
153
- if (src === RANGE.TO &&
154
- (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) &&
155
- (0, differenceInCalendarDays_1.default)(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, day) >= 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
- /* If from-value > to-value , switch places in state */
161
- if (src === RANGE.FROM &&
162
- (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) &&
163
- (0, differenceInCalendarDays_1.default)(day, selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) >= 0) {
164
- updateRange({ to: day, from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to });
165
- setMonth(day);
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
- src === RANGE.FROM && updateRange(Object.assign(Object.assign({}, selectedRange), { from: day }));
169
- src === RANGE.TO && updateRange({ from: selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from, to: day });
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 parsed;
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;AACxE,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,yBAAyB,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) && setInputValue(formatDateForInput(day, locale, "date"));
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
- (disabled &&
92
- ((disableWeekends && isWeekend(day)) || isMatch(day, disabled)))) {
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":"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"}
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 {};