@navikt/ds-react 2.8.12 → 2.8.14
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/cjs/date/datepicker/caption/DropdownCaption.js +6 -2
- package/cjs/date/hooks/useDatepicker.js +11 -5
- package/cjs/date/hooks/useMonthPicker.js +12 -6
- package/cjs/date/monthpicker/MonthCaption.js +18 -15
- package/cjs/date/utils/check-dates.js +1 -5
- package/cjs/date/utils/get-dates.js +9 -1
- package/cjs/date/utils/index.js +1 -2
- package/esm/date/datepicker/caption/DropdownCaption.js +6 -2
- package/esm/date/datepicker/caption/DropdownCaption.js.map +1 -1
- package/esm/date/hooks/useDatepicker.js +12 -6
- package/esm/date/hooks/useDatepicker.js.map +1 -1
- package/esm/date/hooks/useEscape.d.ts +1 -2
- package/esm/date/hooks/useEscape.js.map +1 -1
- package/esm/date/hooks/useMonthPicker.js +13 -7
- package/esm/date/hooks/useMonthPicker.js.map +1 -1
- package/esm/date/hooks/useOutsideClickHandler.d.ts +1 -2
- package/esm/date/hooks/useOutsideClickHandler.js.map +1 -1
- package/esm/date/monthpicker/MonthCaption.js +19 -16
- package/esm/date/monthpicker/MonthCaption.js.map +1 -1
- package/esm/date/utils/check-dates.d.ts +0 -1
- package/esm/date/utils/check-dates.js +0 -3
- package/esm/date/utils/check-dates.js.map +1 -1
- package/esm/date/utils/get-dates.d.ts +1 -1
- package/esm/date/utils/get-dates.js +9 -1
- package/esm/date/utils/get-dates.js.map +1 -1
- package/esm/date/utils/index.d.ts +1 -1
- package/esm/date/utils/index.js +1 -1
- package/esm/date/utils/index.js.map +1 -1
- package/package.json +3 -3
- package/src/date/datepicker/caption/DropdownCaption.tsx +9 -3
- package/src/date/datepicker/datepicker.stories.tsx +2 -3
- package/src/date/hooks/useDatepicker.tsx +15 -6
- package/src/date/hooks/useEscape.tsx +2 -2
- package/src/date/hooks/useMonthPicker.tsx +16 -7
- package/src/date/hooks/useOutsideClickHandler.tsx +2 -2
- package/src/date/monthpicker/MonthCaption.tsx +21 -17
- package/src/date/monthpicker/monthpicker.stories.tsx +3 -1
- package/src/date/utils/__tests__/check-dates.test.ts +1 -27
- package/src/date/utils/__tests__/get-dates.test.ts +44 -2
- package/src/date/utils/check-dates.ts +0 -4
- package/src/date/utils/get-dates.ts +17 -1
- package/src/date/utils/index.ts +1 -1
|
@@ -13,6 +13,7 @@ const react_day_picker_1 = require("react-day-picker");
|
|
|
13
13
|
const __1 = require("../../..");
|
|
14
14
|
const get_dates_1 = require("../../utils/get-dates");
|
|
15
15
|
const labels_1 = require("../../utils/labels");
|
|
16
|
+
const date_fns_1 = require("date-fns");
|
|
16
17
|
const DropdownCaption = ({ displayMonth, id }) => {
|
|
17
18
|
const { goToMonth, nextMonth, previousMonth } = (0, react_day_picker_1.useNavigation)();
|
|
18
19
|
const { fromDate, toDate, formatters: { formatYearCaption, formatMonthCaption, formatCaption }, labels: { labelPrevious, labelNext }, locale, } = (0, react_day_picker_1.useDayPicker)();
|
|
@@ -20,9 +21,12 @@ const DropdownCaption = ({ displayMonth, id }) => {
|
|
|
20
21
|
console.warn("Using dropdownCaption required fromDate and toDate");
|
|
21
22
|
return null;
|
|
22
23
|
}
|
|
23
|
-
const handleYearChange = (e) =>
|
|
24
|
+
const handleYearChange = (e) => {
|
|
25
|
+
const newMonth = (0, setYear_1.default)((0, startOfMonth_1.default)(displayMonth), Number(e.target.value));
|
|
26
|
+
goToMonth((0, startOfMonth_1.default)((0, date_fns_1.min)([(0, date_fns_1.max)([newMonth, fromDate]), toDate])));
|
|
27
|
+
};
|
|
24
28
|
const handleMonthChange = (e) => goToMonth((0, setMonth_1.default)((0, startOfMonth_1.default)(displayMonth), Number(e.target.value)));
|
|
25
|
-
const years = (0, get_dates_1.getYears)(fromDate, toDate);
|
|
29
|
+
const years = (0, get_dates_1.getYears)(fromDate, toDate, displayMonth.getFullYear());
|
|
26
30
|
const months = (0, get_dates_1.getMonths)(fromDate, toDate, displayMonth);
|
|
27
31
|
const previousLabel = labelPrevious(previousMonth, { locale });
|
|
28
32
|
const nextLabel = labelNext(nextMonth, { locale });
|
|
@@ -27,12 +27,18 @@ const useDatepicker = (opt = {}) => {
|
|
|
27
27
|
? (0, utils_1.formatDateForInput)(defaultSelected, locale, "date", inputFormat)
|
|
28
28
|
: "";
|
|
29
29
|
const [inputValue, setInputValue] = (0, react_1.useState)(defaultInputValue);
|
|
30
|
-
(0,
|
|
30
|
+
const handleOpen = (0, react_1.useCallback)((open) => {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
setOpen(open);
|
|
33
|
+
!open &&
|
|
34
|
+
setMonth((_b = (_a = selectedDay !== null && selectedDay !== void 0 ? selectedDay : defaultSelected) !== null && _a !== void 0 ? _a : defaultMonth) !== null && _b !== void 0 ? _b : today);
|
|
35
|
+
}, [defaultMonth, defaultSelected, selectedDay, today]);
|
|
36
|
+
(0, useOutsideClickHandler_1.useOutsideClickHandler)(open, handleOpen, [
|
|
31
37
|
daypickerRef,
|
|
32
38
|
inputRef.current,
|
|
33
39
|
(_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
|
|
34
40
|
]);
|
|
35
|
-
(0, useEscape_1.useEscape)(open,
|
|
41
|
+
(0, useEscape_1.useEscape)(open, handleOpen, inputRef);
|
|
36
42
|
const updateDate = (date) => {
|
|
37
43
|
onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange(date);
|
|
38
44
|
setSelectedDay(date);
|
|
@@ -52,7 +58,7 @@ const useDatepicker = (opt = {}) => {
|
|
|
52
58
|
setInputValue(date ? (0, utils_1.formatDateForInput)(date, locale, "date", inputFormat) : "");
|
|
53
59
|
};
|
|
54
60
|
const handleFocus = (e) => {
|
|
55
|
-
!open && openOnFocus &&
|
|
61
|
+
!open && openOnFocus && handleOpen(true);
|
|
56
62
|
let day = (0, utils_1.parseDate)(e.target.value, today, locale, "date", allowTwoDigitYear);
|
|
57
63
|
if ((0, utils_1.isValidDate)(day)) {
|
|
58
64
|
setMonth(day);
|
|
@@ -67,7 +73,7 @@ const useDatepicker = (opt = {}) => {
|
|
|
67
73
|
/* Only allow de-selecting if not required */
|
|
68
74
|
const handleDayClick = (day, { selected }) => {
|
|
69
75
|
if (day && !selected) {
|
|
70
|
-
|
|
76
|
+
handleOpen(false);
|
|
71
77
|
inputRef.current && inputRef.current.focus();
|
|
72
78
|
}
|
|
73
79
|
if (!required && selected) {
|
|
@@ -127,7 +133,7 @@ const useDatepicker = (opt = {}) => {
|
|
|
127
133
|
toDate,
|
|
128
134
|
today,
|
|
129
135
|
open,
|
|
130
|
-
onOpenToggle: () =>
|
|
136
|
+
onOpenToggle: () => handleOpen(!open),
|
|
131
137
|
disabled,
|
|
132
138
|
disableWeekends,
|
|
133
139
|
ref: setDaypickerRef,
|
|
@@ -10,7 +10,7 @@ const useMonthpicker = (opt = {}) => {
|
|
|
10
10
|
var _a, _b;
|
|
11
11
|
const { locale: _locale = "nb", defaultSelected: _defaultSelected, fromDate, toDate, disabled, required, onMonthChange, inputFormat, onValidate, defaultYear, allowTwoDigitYear = true, openOnFocus = true, } = opt;
|
|
12
12
|
const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
|
|
13
|
-
const today = new Date();
|
|
13
|
+
const today = (0, react_1.useMemo)(() => new Date(), []);
|
|
14
14
|
const locale = (0, utils_1.getLocaleFromString)(_locale);
|
|
15
15
|
const inputRef = (0, react_1.useRef)(null);
|
|
16
16
|
const [monthpickerRef, setMonthpickerRef] = (0, react_1.useState)();
|
|
@@ -22,12 +22,18 @@ const useMonthpicker = (opt = {}) => {
|
|
|
22
22
|
? (0, utils_1.formatDateForInput)(defaultSelected, locale, "month", inputFormat)
|
|
23
23
|
: "";
|
|
24
24
|
const [inputValue, setInputValue] = (0, react_1.useState)(defaultInputValue);
|
|
25
|
-
(0,
|
|
25
|
+
const handleOpen = (0, react_1.useCallback)((open) => {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
setOpen(open);
|
|
28
|
+
!open &&
|
|
29
|
+
setYear((_b = (_a = selectedMonth !== null && selectedMonth !== void 0 ? selectedMonth : defaultSelected) !== null && _a !== void 0 ? _a : defaultYear) !== null && _b !== void 0 ? _b : today);
|
|
30
|
+
}, [defaultSelected, defaultYear, selectedMonth, today]);
|
|
31
|
+
(0, useOutsideClickHandler_1.useOutsideClickHandler)(open, handleOpen, [
|
|
26
32
|
monthpickerRef,
|
|
27
33
|
inputRef.current,
|
|
28
34
|
(_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
|
|
29
35
|
]);
|
|
30
|
-
(0, useEscape_1.useEscape)(open,
|
|
36
|
+
(0, useEscape_1.useEscape)(open, handleOpen, inputRef);
|
|
31
37
|
const updateMonth = (date) => {
|
|
32
38
|
onMonthChange === null || onMonthChange === void 0 ? void 0 : onMonthChange(date);
|
|
33
39
|
setSelectedMonth(date);
|
|
@@ -48,7 +54,7 @@ const useMonthpicker = (opt = {}) => {
|
|
|
48
54
|
};
|
|
49
55
|
const handleFocus = (e) => {
|
|
50
56
|
var _a;
|
|
51
|
-
!open && openOnFocus &&
|
|
57
|
+
!open && openOnFocus && handleOpen(true);
|
|
52
58
|
let day = (0, utils_1.parseDate)(e.target.value, today, locale, "month", allowTwoDigitYear);
|
|
53
59
|
if ((0, utils_1.isValidDate)(day)) {
|
|
54
60
|
setYear(day);
|
|
@@ -66,7 +72,7 @@ const useMonthpicker = (opt = {}) => {
|
|
|
66
72
|
/* Only allow de-selecting if not required */
|
|
67
73
|
const handleMonthClick = (month) => {
|
|
68
74
|
if (month) {
|
|
69
|
-
|
|
75
|
+
handleOpen(false);
|
|
70
76
|
inputRef.current && inputRef.current.focus();
|
|
71
77
|
setYear(month);
|
|
72
78
|
}
|
|
@@ -133,7 +139,7 @@ const useMonthpicker = (opt = {}) => {
|
|
|
133
139
|
fromDate,
|
|
134
140
|
toDate,
|
|
135
141
|
open,
|
|
136
|
-
onOpenToggle: () =>
|
|
142
|
+
onOpenToggle: () => handleOpen(!open),
|
|
137
143
|
disabled,
|
|
138
144
|
ref: setMonthpickerRef,
|
|
139
145
|
};
|
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MonthCaption = void 0;
|
|
7
7
|
const ds_icons_1 = require("@navikt/ds-icons");
|
|
8
|
-
const isSameYear_1 = __importDefault(require("date-fns/isSameYear"));
|
|
9
8
|
const setYear_1 = __importDefault(require("date-fns/setYear"));
|
|
10
9
|
const startOfMonth_1 = __importDefault(require("date-fns/startOfMonth"));
|
|
11
10
|
const startOfYear_1 = __importDefault(require("date-fns/startOfYear"));
|
|
@@ -14,6 +13,7 @@ const react_day_picker_1 = require("react-day-picker");
|
|
|
14
13
|
const __1 = require("../..");
|
|
15
14
|
const context_1 = require("../context");
|
|
16
15
|
const utils_1 = require("../utils");
|
|
16
|
+
const date_fns_1 = require("date-fns");
|
|
17
17
|
const MonthCaption = () => {
|
|
18
18
|
const { fromDate, toDate, formatters: { formatYearCaption }, locale, } = (0, react_day_picker_1.useDayPicker)();
|
|
19
19
|
const { hasDropdown, year, toYear } = (0, context_1.useSharedMonthContext)();
|
|
@@ -24,27 +24,30 @@ const MonthCaption = () => {
|
|
|
24
24
|
for (let year = fromYear; year <= toYear; year++) {
|
|
25
25
|
years.push((0, setYear_1.default)((0, startOfYear_1.default)(new Date()), year));
|
|
26
26
|
}
|
|
27
|
+
if (!years.map((x) => x.getFullYear()).includes(year.getFullYear())) {
|
|
28
|
+
years.push((0, setYear_1.default)((0, startOfYear_1.default)(new Date()), year.getFullYear()));
|
|
29
|
+
}
|
|
30
|
+
years.sort((a, b) => a.getFullYear() - b.getFullYear());
|
|
27
31
|
}
|
|
28
32
|
const handleYearChange = (e) => toYear((0, setYear_1.default)((0, startOfMonth_1.default)(new Date()), Number(e.target.value)));
|
|
29
33
|
const handleButtonClick = (val) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
newMonth = (0, setYear_1.default)(year, newYear);
|
|
38
|
-
toYear(newMonth);
|
|
39
|
-
}
|
|
34
|
+
const newYear = Number(year.getFullYear() + val);
|
|
35
|
+
toYear((0, setYear_1.default)(year, newYear));
|
|
36
|
+
};
|
|
37
|
+
const hasPrevYear = () => {
|
|
38
|
+
return fromDate
|
|
39
|
+
? (0, date_fns_1.isBefore)((year === null || year === void 0 ? void 0 : year.getFullYear()) - 1, fromDate === null || fromDate === void 0 ? void 0 : fromDate.getFullYear())
|
|
40
|
+
: true;
|
|
40
41
|
};
|
|
41
|
-
const
|
|
42
|
-
return
|
|
42
|
+
const hasNextYear = () => {
|
|
43
|
+
return toDate
|
|
44
|
+
? (0, date_fns_1.isAfter)((year === null || year === void 0 ? void 0 : year.getFullYear()) + 1, toDate === null || toDate === void 0 ? void 0 : toDate.getFullYear())
|
|
45
|
+
: true;
|
|
43
46
|
};
|
|
44
47
|
return (react_1.default.createElement("div", { className: "navds-date__caption" },
|
|
45
|
-
react_1.default.createElement(__1.Button, { className: "navds-date__caption-button", disabled:
|
|
48
|
+
react_1.default.createElement(__1.Button, { className: "navds-date__caption-button", disabled: hasPrevYear(), onClick: () => handleButtonClick(-1), "aria-label": (0, utils_1.labelPrevYear)(locale === null || locale === void 0 ? void 0 : locale.code), icon: react_1.default.createElement(ds_icons_1.Left, { "aria-hidden": true }), variant: "tertiary", type: "button" }),
|
|
46
49
|
hasDropdown ? (react_1.default.createElement(__1.Select, { label: "velg \u00E5r", hideLabel: true, value: year === null || year === void 0 ? void 0 : year.getFullYear(), onChange: handleYearChange, className: "navds-date__caption__year" }, years.map((year) => (react_1.default.createElement("option", { key: year.getFullYear(), value: year.getFullYear() }, formatYearCaption(year, { locale })))))) : (react_1.default.createElement("span", { className: "navds-date__year-label", "aria-live": "polite" }, year.getFullYear())),
|
|
47
|
-
react_1.default.createElement(__1.Button, { className: "navds-date__caption-button", disabled:
|
|
50
|
+
react_1.default.createElement(__1.Button, { className: "navds-date__caption-button", disabled: hasNextYear(), onClick: () => handleButtonClick(1), "aria-label": (0, utils_1.labelNextYear)(locale === null || locale === void 0 ? void 0 : locale.code), icon: react_1.default.createElement(ds_icons_1.Right, { "aria-hidden": true }), variant: "tertiary", type: "button" })));
|
|
48
51
|
};
|
|
49
52
|
exports.MonthCaption = MonthCaption;
|
|
50
53
|
exports.default = exports.MonthCaption;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.isValidDate = exports.dateIsInCurrentMonth = void 0;
|
|
7
7
|
const setYear_1 = __importDefault(require("date-fns/setYear"));
|
|
8
8
|
const isThisMonth_1 = __importDefault(require("date-fns/isThisMonth"));
|
|
9
9
|
const dateIsInCurrentMonth = (date, dateToCompare) => {
|
|
@@ -15,7 +15,3 @@ function isValidDate(day) {
|
|
|
15
15
|
return day && !isNaN(day === null || day === void 0 ? void 0 : day.getTime()) && day.getFullYear() > 999;
|
|
16
16
|
}
|
|
17
17
|
exports.isValidDate = isValidDate;
|
|
18
|
-
const hasNextYear = (year, years, val) => {
|
|
19
|
-
return years.some((x) => year.getFullYear() + val === x.getFullYear());
|
|
20
|
-
};
|
|
21
|
-
exports.hasNextYear = hasNextYear;
|
|
@@ -35,16 +35,24 @@ const getMonths = (start, end, current) => {
|
|
|
35
35
|
dropdownMonths.push((0, setMonth_1.default)(date, month));
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
if (!dropdownMonths.map((d) => d.getMonth()).includes(current.getMonth())) {
|
|
39
|
+
dropdownMonths.push(current);
|
|
40
|
+
}
|
|
41
|
+
dropdownMonths.sort((a, b) => a.getMonth() - b.getMonth());
|
|
38
42
|
return dropdownMonths;
|
|
39
43
|
};
|
|
40
44
|
exports.getMonths = getMonths;
|
|
41
|
-
const getYears = (start, end) => {
|
|
45
|
+
const getYears = (start, end, currentYear) => {
|
|
42
46
|
const years = [];
|
|
43
47
|
const fromYear = start.getFullYear();
|
|
44
48
|
const toYear = end.getFullYear();
|
|
45
49
|
for (let year = fromYear; year <= toYear; year++) {
|
|
46
50
|
years.push((0, setYear_1.default)((0, startOfYear_1.default)(new Date()), year));
|
|
47
51
|
}
|
|
52
|
+
if (fromYear > currentYear || toYear < currentYear) {
|
|
53
|
+
years.push((0, setYear_1.default)((0, startOfYear_1.default)(new Date()), currentYear));
|
|
54
|
+
}
|
|
55
|
+
years.sort((a, b) => a.getFullYear() - b.getFullYear());
|
|
48
56
|
return years;
|
|
49
57
|
};
|
|
50
58
|
exports.getYears = getYears;
|
package/cjs/date/utils/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nextEnabled = exports.isDateInRange = exports.isMatch = exports.getInitialYear = exports.
|
|
3
|
+
exports.nextEnabled = exports.isDateInRange = exports.isMatch = exports.getInitialYear = exports.isValidDate = exports.dateIsInCurrentMonth = exports.disableDate = exports.getLocaleFromString = exports.parseDate = exports.INPUT_DATE_STRING_FORMAT_MONTH = exports.INPUT_DATE_STRING_FORMAT_DATE = exports.labelPrevYear = exports.labelNextYear = exports.labels = exports.labelYearDropdown = exports.labelMonthDropdown = exports.getYears = exports.getMonths = exports.formatDateForInput = void 0;
|
|
4
4
|
var format_date_1 = require("./format-date");
|
|
5
5
|
Object.defineProperty(exports, "formatDateForInput", { enumerable: true, get: function () { return format_date_1.formatDateForInput; } });
|
|
6
6
|
var get_dates_1 = require("./get-dates");
|
|
@@ -23,7 +23,6 @@ Object.defineProperty(exports, "disableDate", { enumerable: true, get: function
|
|
|
23
23
|
var check_dates_1 = require("./check-dates");
|
|
24
24
|
Object.defineProperty(exports, "dateIsInCurrentMonth", { enumerable: true, get: function () { return check_dates_1.dateIsInCurrentMonth; } });
|
|
25
25
|
Object.defineProperty(exports, "isValidDate", { enumerable: true, get: function () { return check_dates_1.isValidDate; } });
|
|
26
|
-
Object.defineProperty(exports, "hasNextYear", { enumerable: true, get: function () { return check_dates_1.hasNextYear; } });
|
|
27
26
|
var get_initial_year_1 = require("./get-initial-year");
|
|
28
27
|
Object.defineProperty(exports, "getInitialYear", { enumerable: true, get: function () { return get_initial_year_1.getInitialYear; } });
|
|
29
28
|
var is_match_1 = require("./is-match");
|
|
@@ -7,6 +7,7 @@ import { useDayPicker, useNavigation } from "react-day-picker";
|
|
|
7
7
|
import { Button, Select } from "../../..";
|
|
8
8
|
import { getMonths, getYears } from "../../utils/get-dates";
|
|
9
9
|
import { labelMonthDropdown, labelYearDropdown } from "../../utils/labels";
|
|
10
|
+
import { max, min } from "date-fns";
|
|
10
11
|
export const DropdownCaption = ({ displayMonth, id }) => {
|
|
11
12
|
const { goToMonth, nextMonth, previousMonth } = useNavigation();
|
|
12
13
|
const { fromDate, toDate, formatters: { formatYearCaption, formatMonthCaption, formatCaption }, labels: { labelPrevious, labelNext }, locale, } = useDayPicker();
|
|
@@ -14,9 +15,12 @@ export const DropdownCaption = ({ displayMonth, id }) => {
|
|
|
14
15
|
console.warn("Using dropdownCaption required fromDate and toDate");
|
|
15
16
|
return null;
|
|
16
17
|
}
|
|
17
|
-
const handleYearChange = (e) =>
|
|
18
|
+
const handleYearChange = (e) => {
|
|
19
|
+
const newMonth = setYear(startOfMonth(displayMonth), Number(e.target.value));
|
|
20
|
+
goToMonth(startOfMonth(min([max([newMonth, fromDate]), toDate])));
|
|
21
|
+
};
|
|
18
22
|
const handleMonthChange = (e) => goToMonth(setMonth(startOfMonth(displayMonth), Number(e.target.value)));
|
|
19
|
-
const years = getYears(fromDate, toDate);
|
|
23
|
+
const years = getYears(fromDate, toDate, displayMonth.getFullYear());
|
|
20
24
|
const months = getMonths(fromDate, toDate, displayMonth);
|
|
21
25
|
const previousLabel = labelPrevious(previousMonth, { locale });
|
|
22
26
|
const nextLabel = labelNext(nextMonth, { locale });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownCaption.js","sourceRoot":"","sources":["../../../../src/date/datepicker/caption/DropdownCaption.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DropdownCaption.js","sourceRoot":"","sources":["../../../../src/date/datepicker/caption/DropdownCaption.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import differenceInCalendarDays from "date-fns/differenceInCalendarDays";
|
|
2
2
|
import isWeekend from "date-fns/isWeekend";
|
|
3
|
-
import { useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useRef, useState } from "react";
|
|
4
4
|
import { isMatch } from "react-day-picker";
|
|
5
5
|
import { formatDateForInput, getLocaleFromString, isValidDate, parseDate, } from "../utils";
|
|
6
6
|
import { useEscape } from "./useEscape";
|
|
@@ -21,12 +21,18 @@ export const useDatepicker = (opt = {}) => {
|
|
|
21
21
|
? formatDateForInput(defaultSelected, locale, "date", inputFormat)
|
|
22
22
|
: "";
|
|
23
23
|
const [inputValue, setInputValue] = useState(defaultInputValue);
|
|
24
|
-
|
|
24
|
+
const handleOpen = useCallback((open) => {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
setOpen(open);
|
|
27
|
+
!open &&
|
|
28
|
+
setMonth((_b = (_a = selectedDay !== null && selectedDay !== void 0 ? selectedDay : defaultSelected) !== null && _a !== void 0 ? _a : defaultMonth) !== null && _b !== void 0 ? _b : today);
|
|
29
|
+
}, [defaultMonth, defaultSelected, selectedDay, today]);
|
|
30
|
+
useOutsideClickHandler(open, handleOpen, [
|
|
25
31
|
daypickerRef,
|
|
26
32
|
inputRef.current,
|
|
27
33
|
(_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
|
|
28
34
|
]);
|
|
29
|
-
useEscape(open,
|
|
35
|
+
useEscape(open, handleOpen, inputRef);
|
|
30
36
|
const updateDate = (date) => {
|
|
31
37
|
onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange(date);
|
|
32
38
|
setSelectedDay(date);
|
|
@@ -46,7 +52,7 @@ export const useDatepicker = (opt = {}) => {
|
|
|
46
52
|
setInputValue(date ? formatDateForInput(date, locale, "date", inputFormat) : "");
|
|
47
53
|
};
|
|
48
54
|
const handleFocus = (e) => {
|
|
49
|
-
!open && openOnFocus &&
|
|
55
|
+
!open && openOnFocus && handleOpen(true);
|
|
50
56
|
let day = parseDate(e.target.value, today, locale, "date", allowTwoDigitYear);
|
|
51
57
|
if (isValidDate(day)) {
|
|
52
58
|
setMonth(day);
|
|
@@ -61,7 +67,7 @@ export const useDatepicker = (opt = {}) => {
|
|
|
61
67
|
/* Only allow de-selecting if not required */
|
|
62
68
|
const handleDayClick = (day, { selected }) => {
|
|
63
69
|
if (day && !selected) {
|
|
64
|
-
|
|
70
|
+
handleOpen(false);
|
|
65
71
|
inputRef.current && inputRef.current.focus();
|
|
66
72
|
}
|
|
67
73
|
if (!required && selected) {
|
|
@@ -121,7 +127,7 @@ export const useDatepicker = (opt = {}) => {
|
|
|
121
127
|
toDate,
|
|
122
128
|
today,
|
|
123
129
|
open,
|
|
124
|
-
onOpenToggle: () =>
|
|
130
|
+
onOpenToggle: () => handleOpen(!open),
|
|
125
131
|
disabled,
|
|
126
132
|
disableWeekends,
|
|
127
133
|
ref: setDaypickerRef,
|
|
@@ -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,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useDatepicker.js","sourceRoot":"","sources":["../../../src/date/hooks/useDatepicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const useEscape: (open: boolean, setOpen: React.Dispatch<React.SetStateAction<boolean>>, focusRef: any) => void;
|
|
1
|
+
export declare const useEscape: (open: boolean, setOpen: (openState: boolean) => void, focusRef: any) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEscape.js","sourceRoot":"","sources":["../../../src/date/hooks/useEscape.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"useEscape.js","sourceRoot":"","sources":["../../../src/date/hooks/useEscape.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,IAAa,EACb,OAAqC,EACrC,QAAa,EACb,EAAE;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,OAAO,CAAC,KAAK,CAAC,CAAC;QACf,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,KAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,WAAW,EAAE,EAClD,CAAC,WAAW,EAAE,IAAI,CAAC,CACpB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAElD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useRef, useState } from "react";
|
|
1
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
2
2
|
import { formatDateForInput, getLocaleFromString, isMatch, isValidDate, parseDate, } from "../utils";
|
|
3
3
|
import { useEscape } from "./useEscape";
|
|
4
4
|
import { useOutsideClickHandler } from "./useOutsideClickHandler";
|
|
@@ -7,7 +7,7 @@ export const useMonthpicker = (opt = {}) => {
|
|
|
7
7
|
var _a, _b;
|
|
8
8
|
const { locale: _locale = "nb", defaultSelected: _defaultSelected, fromDate, toDate, disabled, required, onMonthChange, inputFormat, onValidate, defaultYear, allowTwoDigitYear = true, openOnFocus = true, } = opt;
|
|
9
9
|
const [defaultSelected, setDefaultSelected] = useState(_defaultSelected);
|
|
10
|
-
const today = new Date();
|
|
10
|
+
const today = useMemo(() => new Date(), []);
|
|
11
11
|
const locale = getLocaleFromString(_locale);
|
|
12
12
|
const inputRef = useRef(null);
|
|
13
13
|
const [monthpickerRef, setMonthpickerRef] = useState();
|
|
@@ -19,12 +19,18 @@ export const useMonthpicker = (opt = {}) => {
|
|
|
19
19
|
? formatDateForInput(defaultSelected, locale, "month", inputFormat)
|
|
20
20
|
: "";
|
|
21
21
|
const [inputValue, setInputValue] = useState(defaultInputValue);
|
|
22
|
-
|
|
22
|
+
const handleOpen = useCallback((open) => {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
setOpen(open);
|
|
25
|
+
!open &&
|
|
26
|
+
setYear((_b = (_a = selectedMonth !== null && selectedMonth !== void 0 ? selectedMonth : defaultSelected) !== null && _a !== void 0 ? _a : defaultYear) !== null && _b !== void 0 ? _b : today);
|
|
27
|
+
}, [defaultSelected, defaultYear, selectedMonth, today]);
|
|
28
|
+
useOutsideClickHandler(open, handleOpen, [
|
|
23
29
|
monthpickerRef,
|
|
24
30
|
inputRef.current,
|
|
25
31
|
(_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
|
|
26
32
|
]);
|
|
27
|
-
useEscape(open,
|
|
33
|
+
useEscape(open, handleOpen, inputRef);
|
|
28
34
|
const updateMonth = (date) => {
|
|
29
35
|
onMonthChange === null || onMonthChange === void 0 ? void 0 : onMonthChange(date);
|
|
30
36
|
setSelectedMonth(date);
|
|
@@ -45,7 +51,7 @@ export const useMonthpicker = (opt = {}) => {
|
|
|
45
51
|
};
|
|
46
52
|
const handleFocus = (e) => {
|
|
47
53
|
var _a;
|
|
48
|
-
!open && openOnFocus &&
|
|
54
|
+
!open && openOnFocus && handleOpen(true);
|
|
49
55
|
let day = parseDate(e.target.value, today, locale, "month", allowTwoDigitYear);
|
|
50
56
|
if (isValidDate(day)) {
|
|
51
57
|
setYear(day);
|
|
@@ -63,7 +69,7 @@ export const useMonthpicker = (opt = {}) => {
|
|
|
63
69
|
/* Only allow de-selecting if not required */
|
|
64
70
|
const handleMonthClick = (month) => {
|
|
65
71
|
if (month) {
|
|
66
|
-
|
|
72
|
+
handleOpen(false);
|
|
67
73
|
inputRef.current && inputRef.current.focus();
|
|
68
74
|
setYear(month);
|
|
69
75
|
}
|
|
@@ -130,7 +136,7 @@ export const useMonthpicker = (opt = {}) => {
|
|
|
130
136
|
fromDate,
|
|
131
137
|
toDate,
|
|
132
138
|
open,
|
|
133
|
-
onOpenToggle: () =>
|
|
139
|
+
onOpenToggle: () => handleOpen(!open),
|
|
134
140
|
disabled,
|
|
135
141
|
ref: setMonthpickerRef,
|
|
136
142
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMonthPicker.js","sourceRoot":"","sources":["../../../src/date/hooks/useMonthPicker.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useMonthPicker.js","sourceRoot":"","sources":["../../../src/date/hooks/useMonthPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const useOutsideClickHandler: (open: boolean, setOpen: React.Dispatch<React.SetStateAction<boolean>>, refs: Array<any>) => void;
|
|
1
|
+
export declare const useOutsideClickHandler: (open: boolean, setOpen: (openState: boolean) => void, refs: Array<any>) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOutsideClickHandler.js","sourceRoot":"","sources":["../../../src/date/hooks/useOutsideClickHandler.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"useOutsideClickHandler.js","sourceRoot":"","sources":["../../../src/date/hooks/useOutsideClickHandler.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAa,EACb,OAAqC,EACrC,IAAgB,EAChB,EAAE;IACF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAC,EAAE,EAAE;;QACJ,MAAM,QAAQ,GAAG,MAAA,MAAA,CAAC,CAAC,YAAY,iDAAI,0CAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,IAAI,CAAC,CAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,0CAAE,QAAQ,CAAA,IAAI,CAAC,QAAQ,EAAE;YACnD,OAAO;SACR;QACD,IACE,CAAC,IAAI,CAAC,IAAI,CACR,CAAC,OAAO,EAAE,EAAE,CACV,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA,CAC7D,EACD;YACA,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;SACxB;IACH,CAAC,EACD,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CACtB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE;;YACV,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,uDAAG,SAAS,EAAE,aAAa,CAAC,CAAC;YACxD,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,uDAAG,aAAa,EAAE,aAAa,CAAC,CAAC;QAC9D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACtB,CAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Left, Right } from "@navikt/ds-icons";
|
|
2
|
-
import isSameYear from "date-fns/isSameYear";
|
|
3
2
|
import setYear from "date-fns/setYear";
|
|
4
3
|
import startOfMonth from "date-fns/startOfMonth";
|
|
5
4
|
import startOfYear from "date-fns/startOfYear";
|
|
@@ -7,7 +6,8 @@ import React from "react";
|
|
|
7
6
|
import { useDayPicker } from "react-day-picker";
|
|
8
7
|
import { Button, Select } from "../..";
|
|
9
8
|
import { useSharedMonthContext } from "../context";
|
|
10
|
-
import {
|
|
9
|
+
import { labelNextYear, labelPrevYear } from "../utils";
|
|
10
|
+
import { isAfter, isBefore } from "date-fns";
|
|
11
11
|
export const MonthCaption = () => {
|
|
12
12
|
const { fromDate, toDate, formatters: { formatYearCaption }, locale, } = useDayPicker();
|
|
13
13
|
const { hasDropdown, year, toYear } = useSharedMonthContext();
|
|
@@ -18,27 +18,30 @@ export const MonthCaption = () => {
|
|
|
18
18
|
for (let year = fromYear; year <= toYear; year++) {
|
|
19
19
|
years.push(setYear(startOfYear(new Date()), year));
|
|
20
20
|
}
|
|
21
|
+
if (!years.map((x) => x.getFullYear()).includes(year.getFullYear())) {
|
|
22
|
+
years.push(setYear(startOfYear(new Date()), year.getFullYear()));
|
|
23
|
+
}
|
|
24
|
+
years.sort((a, b) => a.getFullYear() - b.getFullYear());
|
|
21
25
|
}
|
|
22
26
|
const handleYearChange = (e) => toYear(setYear(startOfMonth(new Date()), Number(e.target.value)));
|
|
23
27
|
const handleButtonClick = (val) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
newMonth = setYear(year, newYear);
|
|
32
|
-
toYear(newMonth);
|
|
33
|
-
}
|
|
28
|
+
const newYear = Number(year.getFullYear() + val);
|
|
29
|
+
toYear(setYear(year, newYear));
|
|
30
|
+
};
|
|
31
|
+
const hasPrevYear = () => {
|
|
32
|
+
return fromDate
|
|
33
|
+
? isBefore((year === null || year === void 0 ? void 0 : year.getFullYear()) - 1, fromDate === null || fromDate === void 0 ? void 0 : fromDate.getFullYear())
|
|
34
|
+
: true;
|
|
34
35
|
};
|
|
35
|
-
const
|
|
36
|
-
return
|
|
36
|
+
const hasNextYear = () => {
|
|
37
|
+
return toDate
|
|
38
|
+
? isAfter((year === null || year === void 0 ? void 0 : year.getFullYear()) + 1, toDate === null || toDate === void 0 ? void 0 : toDate.getFullYear())
|
|
39
|
+
: true;
|
|
37
40
|
};
|
|
38
41
|
return (React.createElement("div", { className: "navds-date__caption" },
|
|
39
|
-
React.createElement(Button, { className: "navds-date__caption-button", disabled:
|
|
42
|
+
React.createElement(Button, { className: "navds-date__caption-button", disabled: hasPrevYear(), onClick: () => handleButtonClick(-1), "aria-label": labelPrevYear(locale === null || locale === void 0 ? void 0 : locale.code), icon: React.createElement(Left, { "aria-hidden": true }), variant: "tertiary", type: "button" }),
|
|
40
43
|
hasDropdown ? (React.createElement(Select, { label: "velg \u00E5r", hideLabel: true, value: year === null || year === void 0 ? void 0 : year.getFullYear(), onChange: handleYearChange, className: "navds-date__caption__year" }, years.map((year) => (React.createElement("option", { key: year.getFullYear(), value: year.getFullYear() }, formatYearCaption(year, { locale })))))) : (React.createElement("span", { className: "navds-date__year-label", "aria-live": "polite" }, year.getFullYear())),
|
|
41
|
-
React.createElement(Button, { className: "navds-date__caption-button", disabled:
|
|
44
|
+
React.createElement(Button, { className: "navds-date__caption-button", disabled: hasNextYear(), onClick: () => handleButtonClick(1), "aria-label": labelNextYear(locale === null || locale === void 0 ? void 0 : locale.code), icon: React.createElement(Right, { "aria-hidden": true }), variant: "tertiary", type: "button" })));
|
|
42
45
|
};
|
|
43
46
|
export default MonthCaption;
|
|
44
47
|
//# sourceMappingURL=MonthCaption.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthCaption.js","sourceRoot":"","sources":["../../../src/date/monthpicker/MonthCaption.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"MonthCaption.js","sourceRoot":"","sources":["../../../src/date/monthpicker/MonthCaption.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,4 @@ export const dateIsInCurrentMonth = (date, dateToCompare) => {
|
|
|
7
7
|
export function isValidDate(day) {
|
|
8
8
|
return day && !isNaN(day === null || day === void 0 ? void 0 : day.getTime()) && day.getFullYear() > 999;
|
|
9
9
|
}
|
|
10
|
-
export const hasNextYear = (year, years, val) => {
|
|
11
|
-
return years.some((x) => year.getFullYear() + val === x.getFullYear());
|
|
12
|
-
};
|
|
13
10
|
//# sourceMappingURL=check-dates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-dates.js","sourceRoot":"","sources":["../../../src/date/utils/check-dates.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAU,EACV,aAAmB,EACV,EAAE;IACX,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,UAAU,WAAW,CAAC,GAAS;IACnC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;AAClE,CAAC
|
|
1
|
+
{"version":3,"file":"check-dates.js","sourceRoot":"","sources":["../../../src/date/utils/check-dates.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAU,EACV,aAAmB,EACV,EAAE;IACX,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,UAAU,WAAW,CAAC,GAAS;IACnC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;AAClE,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const getMonths: (start: Date, end: Date, current: Date) => Date[];
|
|
2
|
-
export declare const getYears: (start: Date, end: Date) => Date[];
|
|
2
|
+
export declare const getYears: (start: Date, end: Date, currentYear: number) => Date[];
|
|
@@ -29,15 +29,23 @@ export const getMonths = (start, end, current) => {
|
|
|
29
29
|
dropdownMonths.push(setMonth(date, month));
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
if (!dropdownMonths.map((d) => d.getMonth()).includes(current.getMonth())) {
|
|
33
|
+
dropdownMonths.push(current);
|
|
34
|
+
}
|
|
35
|
+
dropdownMonths.sort((a, b) => a.getMonth() - b.getMonth());
|
|
32
36
|
return dropdownMonths;
|
|
33
37
|
};
|
|
34
|
-
export const getYears = (start, end) => {
|
|
38
|
+
export const getYears = (start, end, currentYear) => {
|
|
35
39
|
const years = [];
|
|
36
40
|
const fromYear = start.getFullYear();
|
|
37
41
|
const toYear = end.getFullYear();
|
|
38
42
|
for (let year = fromYear; year <= toYear; year++) {
|
|
39
43
|
years.push(setYear(startOfYear(new Date()), year));
|
|
40
44
|
}
|
|
45
|
+
if (fromYear > currentYear || toYear < currentYear) {
|
|
46
|
+
years.push(setYear(startOfYear(new Date()), currentYear));
|
|
47
|
+
}
|
|
48
|
+
years.sort((a, b) => a.getFullYear() - b.getFullYear());
|
|
41
49
|
return years;
|
|
42
50
|
};
|
|
43
51
|
//# sourceMappingURL=get-dates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-dates.js","sourceRoot":"","sources":["../../../src/date/utils/get-dates.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAW,EAAE,GAAS,EAAE,OAAa,EAAU,EAAE;IACzE,MAAM,cAAc,GAAW,EAAE,CAAC;IAElC,IAAI,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE;YACnE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SAC5C;KACF;SAAM,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE;YACpD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SAC5C;KACF;SAAM,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;QACrC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;YACtD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SAC5C;KACF;SAAM;QACL,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;YACxC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SAC5C;KACF;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"get-dates.js","sourceRoot":"","sources":["../../../src/date/utils/get-dates.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export { labelMonthDropdown, labelYearDropdown, labels, labelNextYear, labelPrev
|
|
|
4
4
|
export { INPUT_DATE_STRING_FORMAT_DATE, INPUT_DATE_STRING_FORMAT_MONTH, parseDate, } from "./parse-date";
|
|
5
5
|
export { getLocaleFromString } from "./locale";
|
|
6
6
|
export { disableDate } from "./dates-disabled";
|
|
7
|
-
export { dateIsInCurrentMonth, isValidDate
|
|
7
|
+
export { dateIsInCurrentMonth, isValidDate } from "./check-dates";
|
|
8
8
|
export { getInitialYear } from "./get-initial-year";
|
|
9
9
|
export { isMatch, isDateInRange, type Matcher } from "./is-match";
|
|
10
10
|
export { nextEnabled } from "./navigation";
|
package/esm/date/utils/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { labelMonthDropdown, labelYearDropdown, labels, labelNextYear, labelPrev
|
|
|
4
4
|
export { INPUT_DATE_STRING_FORMAT_DATE, INPUT_DATE_STRING_FORMAT_MONTH, parseDate, } from "./parse-date";
|
|
5
5
|
export { getLocaleFromString } from "./locale";
|
|
6
6
|
export { disableDate } from "./dates-disabled";
|
|
7
|
-
export { dateIsInCurrentMonth, isValidDate
|
|
7
|
+
export { dateIsInCurrentMonth, isValidDate } from "./check-dates";
|
|
8
8
|
export { getInitialYear } from "./get-initial-year";
|
|
9
9
|
export { isMatch, isDateInRange } from "./is-match";
|
|
10
10
|
export { nextEnabled } from "./navigation";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/date/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/date/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navikt/ds-react",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.14",
|
|
4
4
|
"description": "Aksel react-components for NAV designsystem",
|
|
5
5
|
"author": "Aksel | NAV designsystem team",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@floating-ui/react": "0.17.0",
|
|
40
|
-
"@navikt/aksel-icons": "^2.8.
|
|
41
|
-
"@navikt/ds-icons": "^2.8.
|
|
40
|
+
"@navikt/aksel-icons": "^2.8.14",
|
|
41
|
+
"@navikt/ds-icons": "^2.8.14",
|
|
42
42
|
"@radix-ui/react-tabs": "1.0.0",
|
|
43
43
|
"@radix-ui/react-toggle-group": "1.0.0",
|
|
44
44
|
"clsx": "^1.2.1",
|
|
@@ -7,6 +7,7 @@ import { CaptionProps, useDayPicker, useNavigation } from "react-day-picker";
|
|
|
7
7
|
import { Button, Select } from "../../..";
|
|
8
8
|
import { getMonths, getYears } from "../../utils/get-dates";
|
|
9
9
|
import { labelMonthDropdown, labelYearDropdown } from "../../utils/labels";
|
|
10
|
+
import { max, min } from "date-fns";
|
|
10
11
|
|
|
11
12
|
export const DropdownCaption = ({ displayMonth, id }: CaptionProps) => {
|
|
12
13
|
const { goToMonth, nextMonth, previousMonth } = useNavigation();
|
|
@@ -23,13 +24,18 @@ export const DropdownCaption = ({ displayMonth, id }: CaptionProps) => {
|
|
|
23
24
|
return null;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
const handleYearChange: React.ChangeEventHandler<HTMLSelectElement> = (e) =>
|
|
27
|
-
|
|
27
|
+
const handleYearChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {
|
|
28
|
+
const newMonth = setYear(
|
|
29
|
+
startOfMonth(displayMonth),
|
|
30
|
+
Number(e.target.value)
|
|
31
|
+
);
|
|
32
|
+
goToMonth(startOfMonth(min([max([newMonth, fromDate]), toDate])));
|
|
33
|
+
};
|
|
28
34
|
|
|
29
35
|
const handleMonthChange: React.ChangeEventHandler<HTMLSelectElement> = (e) =>
|
|
30
36
|
goToMonth(setMonth(startOfMonth(displayMonth), Number(e.target.value)));
|
|
31
37
|
|
|
32
|
-
const years = getYears(fromDate, toDate);
|
|
38
|
+
const years = getYears(fromDate, toDate, displayMonth.getFullYear());
|
|
33
39
|
const months = getMonths(fromDate, toDate, displayMonth);
|
|
34
40
|
|
|
35
41
|
const previousLabel = labelPrevious(previousMonth, { locale });
|
|
@@ -149,14 +149,13 @@ export const ShowWeekNumber = () => (
|
|
|
149
149
|
export const UseDatepicker = () => {
|
|
150
150
|
const { datepickerProps, inputProps } = UNSAFE_useDatepicker({
|
|
151
151
|
fromDate: new Date("Aug 23 2019"),
|
|
152
|
+
toDate: new Date("Feb 23 2023"),
|
|
152
153
|
onDateChange: console.log,
|
|
153
|
-
locale: "en",
|
|
154
|
-
openOnFocus: false,
|
|
155
154
|
});
|
|
156
155
|
|
|
157
156
|
return (
|
|
158
157
|
<div style={{ display: "flex", gap: "1rem" }}>
|
|
159
|
-
<DatePicker {...datepickerProps}>
|
|
158
|
+
<DatePicker {...datepickerProps} dropdownCaption>
|
|
160
159
|
<DatePicker.Input {...inputProps} label="Velg dato" />
|
|
161
160
|
</DatePicker>
|
|
162
161
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import differenceInCalendarDays from "date-fns/differenceInCalendarDays";
|
|
2
2
|
import isWeekend from "date-fns/isWeekend";
|
|
3
|
-
import React, { useRef, useState } from "react";
|
|
3
|
+
import React, { useCallback, useRef, useState } from "react";
|
|
4
4
|
import { DayClickEventHandler, isMatch } from "react-day-picker";
|
|
5
5
|
import { DateInputProps } from "../DateInput";
|
|
6
6
|
import { DatePickerProps } from "../datepicker/DatePicker";
|
|
@@ -150,13 +150,22 @@ export const useDatepicker = (
|
|
|
150
150
|
: "";
|
|
151
151
|
const [inputValue, setInputValue] = useState(defaultInputValue);
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
const handleOpen = useCallback(
|
|
154
|
+
(open: boolean) => {
|
|
155
|
+
setOpen(open);
|
|
156
|
+
!open &&
|
|
157
|
+
setMonth(selectedDay ?? defaultSelected ?? defaultMonth ?? today);
|
|
158
|
+
},
|
|
159
|
+
[defaultMonth, defaultSelected, selectedDay, today]
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
useOutsideClickHandler(open, handleOpen, [
|
|
154
163
|
daypickerRef,
|
|
155
164
|
inputRef.current,
|
|
156
165
|
inputRef.current?.nextSibling,
|
|
157
166
|
]);
|
|
158
167
|
|
|
159
|
-
useEscape(open,
|
|
168
|
+
useEscape(open, handleOpen, inputRef);
|
|
160
169
|
|
|
161
170
|
const updateDate = (date?: Date) => {
|
|
162
171
|
onDateChange?.(date);
|
|
@@ -182,7 +191,7 @@ export const useDatepicker = (
|
|
|
182
191
|
};
|
|
183
192
|
|
|
184
193
|
const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
|
|
185
|
-
!open && openOnFocus &&
|
|
194
|
+
!open && openOnFocus && handleOpen(true);
|
|
186
195
|
let day = parseDate(
|
|
187
196
|
e.target.value,
|
|
188
197
|
today,
|
|
@@ -211,7 +220,7 @@ export const useDatepicker = (
|
|
|
211
220
|
/* Only allow de-selecting if not required */
|
|
212
221
|
const handleDayClick: DayClickEventHandler = (day, { selected }) => {
|
|
213
222
|
if (day && !selected) {
|
|
214
|
-
|
|
223
|
+
handleOpen(false);
|
|
215
224
|
inputRef.current && inputRef.current.focus();
|
|
216
225
|
}
|
|
217
226
|
|
|
@@ -288,7 +297,7 @@ export const useDatepicker = (
|
|
|
288
297
|
toDate,
|
|
289
298
|
today,
|
|
290
299
|
open,
|
|
291
|
-
onOpenToggle: () =>
|
|
300
|
+
onOpenToggle: () => handleOpen(!open),
|
|
292
301
|
disabled,
|
|
293
302
|
disableWeekends,
|
|
294
303
|
ref: setDaypickerRef,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useCallback, useEffect } from "react";
|
|
2
2
|
|
|
3
3
|
export const useEscape = (
|
|
4
4
|
open: boolean,
|
|
5
|
-
setOpen:
|
|
5
|
+
setOpen: (openState: boolean) => void,
|
|
6
6
|
focusRef: any
|
|
7
7
|
) => {
|
|
8
8
|
const handleClose = useCallback(() => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useRef, useState } from "react";
|
|
1
|
+
import React, { useCallback, useMemo, useRef, useState } from "react";
|
|
2
2
|
import { DateInputProps } from "../DateInput";
|
|
3
3
|
import { MonthPickerProps } from "../monthpicker/MonthPicker";
|
|
4
4
|
import {
|
|
@@ -116,7 +116,7 @@ export const useMonthpicker = (
|
|
|
116
116
|
|
|
117
117
|
const [defaultSelected, setDefaultSelected] = useState(_defaultSelected);
|
|
118
118
|
|
|
119
|
-
const today = new Date();
|
|
119
|
+
const today = useMemo(() => new Date(), []);
|
|
120
120
|
const locale = getLocaleFromString(_locale);
|
|
121
121
|
|
|
122
122
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
@@ -133,13 +133,22 @@ export const useMonthpicker = (
|
|
|
133
133
|
|
|
134
134
|
const [inputValue, setInputValue] = useState(defaultInputValue);
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
const handleOpen = useCallback(
|
|
137
|
+
(open: boolean) => {
|
|
138
|
+
setOpen(open);
|
|
139
|
+
!open &&
|
|
140
|
+
setYear(selectedMonth ?? defaultSelected ?? defaultYear ?? today);
|
|
141
|
+
},
|
|
142
|
+
[defaultSelected, defaultYear, selectedMonth, today]
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
useOutsideClickHandler(open, handleOpen, [
|
|
137
146
|
monthpickerRef,
|
|
138
147
|
inputRef.current,
|
|
139
148
|
inputRef.current?.nextSibling,
|
|
140
149
|
]);
|
|
141
150
|
|
|
142
|
-
useEscape(open,
|
|
151
|
+
useEscape(open, handleOpen, inputRef);
|
|
143
152
|
|
|
144
153
|
const updateMonth = (date?: Date) => {
|
|
145
154
|
onMonthChange?.(date);
|
|
@@ -165,7 +174,7 @@ export const useMonthpicker = (
|
|
|
165
174
|
};
|
|
166
175
|
|
|
167
176
|
const handleFocus: React.FocusEventHandler<HTMLInputElement> = (e) => {
|
|
168
|
-
!open && openOnFocus &&
|
|
177
|
+
!open && openOnFocus && handleOpen(true);
|
|
169
178
|
let day = parseDate(
|
|
170
179
|
e.target.value,
|
|
171
180
|
today,
|
|
@@ -196,7 +205,7 @@ export const useMonthpicker = (
|
|
|
196
205
|
/* Only allow de-selecting if not required */
|
|
197
206
|
const handleMonthClick = (month?: Date) => {
|
|
198
207
|
if (month) {
|
|
199
|
-
|
|
208
|
+
handleOpen(false);
|
|
200
209
|
inputRef.current && inputRef.current.focus();
|
|
201
210
|
setYear(month);
|
|
202
211
|
}
|
|
@@ -282,7 +291,7 @@ export const useMonthpicker = (
|
|
|
282
291
|
fromDate,
|
|
283
292
|
toDate,
|
|
284
293
|
open,
|
|
285
|
-
onOpenToggle: () =>
|
|
294
|
+
onOpenToggle: () => handleOpen(!open),
|
|
286
295
|
disabled,
|
|
287
296
|
ref: setMonthpickerRef,
|
|
288
297
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useCallback, useEffect } from "react";
|
|
2
2
|
|
|
3
3
|
export const useOutsideClickHandler = (
|
|
4
4
|
open: boolean,
|
|
5
|
-
setOpen:
|
|
5
|
+
setOpen: (openState: boolean) => void,
|
|
6
6
|
refs: Array<any>
|
|
7
7
|
) => {
|
|
8
8
|
const handleFocusIn = useCallback(
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Left, Right } from "@navikt/ds-icons";
|
|
2
|
-
import isSameYear from "date-fns/isSameYear";
|
|
3
2
|
import setYear from "date-fns/setYear";
|
|
4
3
|
import startOfMonth from "date-fns/startOfMonth";
|
|
5
4
|
import startOfYear from "date-fns/startOfYear";
|
|
@@ -7,7 +6,8 @@ import React from "react";
|
|
|
7
6
|
import { useDayPicker } from "react-day-picker";
|
|
8
7
|
import { Button, Select } from "../..";
|
|
9
8
|
import { useSharedMonthContext } from "../context";
|
|
10
|
-
import {
|
|
9
|
+
import { labelNextYear, labelPrevYear } from "../utils";
|
|
10
|
+
import { isAfter, isBefore } from "date-fns";
|
|
11
11
|
|
|
12
12
|
export const MonthCaption = () => {
|
|
13
13
|
const {
|
|
@@ -27,34 +27,38 @@ export const MonthCaption = () => {
|
|
|
27
27
|
for (let year = fromYear; year <= toYear; year++) {
|
|
28
28
|
years.push(setYear(startOfYear(new Date()), year));
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
if (!years.map((x) => x.getFullYear()).includes(year.getFullYear())) {
|
|
32
|
+
years.push(setYear(startOfYear(new Date()), year.getFullYear()));
|
|
33
|
+
}
|
|
34
|
+
years.sort((a, b) => a.getFullYear() - b.getFullYear());
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
const handleYearChange = (e) =>
|
|
33
38
|
toYear(setYear(startOfMonth(new Date()), Number(e.target.value)));
|
|
34
39
|
|
|
35
40
|
const handleButtonClick = (val: number) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
41
|
+
const newYear = Number(year.getFullYear() + val);
|
|
42
|
+
toYear(setYear(year, newYear));
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const hasPrevYear = () => {
|
|
46
|
+
return fromDate
|
|
47
|
+
? isBefore(year?.getFullYear() - 1, fromDate?.getFullYear())
|
|
48
|
+
: true;
|
|
45
49
|
};
|
|
46
50
|
|
|
47
|
-
const
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
const hasNextYear = () => {
|
|
52
|
+
return toDate
|
|
53
|
+
? isAfter(year?.getFullYear() + 1, toDate?.getFullYear())
|
|
54
|
+
: true;
|
|
51
55
|
};
|
|
52
56
|
|
|
53
57
|
return (
|
|
54
58
|
<div className="navds-date__caption">
|
|
55
59
|
<Button
|
|
56
60
|
className="navds-date__caption-button"
|
|
57
|
-
disabled={
|
|
61
|
+
disabled={hasPrevYear()}
|
|
58
62
|
onClick={() => handleButtonClick(-1)}
|
|
59
63
|
aria-label={labelPrevYear(locale?.code)}
|
|
60
64
|
icon={<Left aria-hidden />}
|
|
@@ -83,7 +87,7 @@ export const MonthCaption = () => {
|
|
|
83
87
|
)}
|
|
84
88
|
<Button
|
|
85
89
|
className="navds-date__caption-button"
|
|
86
|
-
disabled={
|
|
90
|
+
disabled={hasNextYear()}
|
|
87
91
|
onClick={() => handleButtonClick(1)}
|
|
88
92
|
aria-label={labelNextYear(locale?.code)}
|
|
89
93
|
icon={<Right aria-hidden />}
|
|
@@ -77,11 +77,13 @@ export const UseMonthpicker = () => {
|
|
|
77
77
|
const { inputProps, monthpickerProps } = UNSAFE_useMonthpicker({
|
|
78
78
|
disabled: [new Date("Apr 1 2022")],
|
|
79
79
|
onMonthChange: console.log,
|
|
80
|
+
fromDate: new Date("Jan 1 2000"),
|
|
81
|
+
toDate: new Date("Sep 27 2005"),
|
|
80
82
|
});
|
|
81
83
|
|
|
82
84
|
return (
|
|
83
85
|
<div style={{ height: "20rem" }}>
|
|
84
|
-
<MonthPicker {...monthpickerProps}>
|
|
86
|
+
<MonthPicker {...monthpickerProps} dropdownCaption>
|
|
85
87
|
<MonthPicker.Input
|
|
86
88
|
{...inputProps}
|
|
87
89
|
label="Velg måned"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { dateIsInCurrentMonth
|
|
1
|
+
import { dateIsInCurrentMonth } from "..";
|
|
2
2
|
|
|
3
3
|
const selectedDate = new Date("Feb 1 1994");
|
|
4
4
|
|
|
@@ -19,29 +19,3 @@ describe("Returns if date is in current month", () => {
|
|
|
19
19
|
).toBeFalsy();
|
|
20
20
|
});
|
|
21
21
|
});
|
|
22
|
-
|
|
23
|
-
const years = [
|
|
24
|
-
new Date(),
|
|
25
|
-
new Date("Aug 5 2023"),
|
|
26
|
-
new Date("Aug 5 2024"),
|
|
27
|
-
new Date("Aug 5 2025"),
|
|
28
|
-
new Date("Aug 5 2026"),
|
|
29
|
-
new Date("Aug 5 2027"),
|
|
30
|
-
new Date("Aug 5 2028"),
|
|
31
|
-
new Date("Aug 5 2029"),
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
describe("Returns if year is at start or end of range", () => {
|
|
35
|
-
test("Should have next year (true)", () => {
|
|
36
|
-
expect(hasNextYear(new Date(), years, 1)).toBeTruthy();
|
|
37
|
-
});
|
|
38
|
-
test("Should have previous year (true)", () => {
|
|
39
|
-
expect(hasNextYear(new Date("Aug 3 2024"), years, -1)).toBeTruthy();
|
|
40
|
-
});
|
|
41
|
-
test("Should not have next year (false)", () => {
|
|
42
|
-
expect(hasNextYear(new Date("Aug 3 2029"), years, 1)).toBeFalsy();
|
|
43
|
-
});
|
|
44
|
-
test("Should not have previous year (false)", () => {
|
|
45
|
-
expect(hasNextYear(new Date(), years, -1)).toBeFalsy();
|
|
46
|
-
});
|
|
47
|
-
});
|
|
@@ -57,6 +57,25 @@ describe("Extracts correct months", () => {
|
|
|
57
57
|
};
|
|
58
58
|
expect(getMonths(t.start, t.end, t.current).length).toEqual(t.res);
|
|
59
59
|
});
|
|
60
|
+
test("End part of 2022, including starting month (12)", () => {
|
|
61
|
+
const t = {
|
|
62
|
+
start: new Date(2019, 5, 22),
|
|
63
|
+
end: new Date(2022, 7, 22),
|
|
64
|
+
current: new Date(2022, 7, 22),
|
|
65
|
+
res: 8,
|
|
66
|
+
};
|
|
67
|
+
expect(getMonths(t.start, t.end, t.current).length).toEqual(t.res);
|
|
68
|
+
});
|
|
69
|
+
test("Adds out of range month to list (13)", () => {
|
|
70
|
+
const t = {
|
|
71
|
+
start: new Date(2019, 5, 22),
|
|
72
|
+
end: new Date(2022, 7, 22),
|
|
73
|
+
current: new Date(2022, 9, 22),
|
|
74
|
+
res: 9,
|
|
75
|
+
};
|
|
76
|
+
console.log(getMonths(t.start, t.end, t.current));
|
|
77
|
+
expect(getMonths(t.start, t.end, t.current).length).toEqual(t.res);
|
|
78
|
+
});
|
|
60
79
|
});
|
|
61
80
|
|
|
62
81
|
describe("Extracts correct years", () => {
|
|
@@ -64,16 +83,39 @@ describe("Extracts correct years", () => {
|
|
|
64
83
|
const t = {
|
|
65
84
|
start: new Date(2019, 2, 22),
|
|
66
85
|
end: new Date(2019, 9, 22),
|
|
86
|
+
current: 2019,
|
|
67
87
|
res: 1,
|
|
68
88
|
};
|
|
69
|
-
expect(getYears(t.start, t.end).length).toEqual(t.res);
|
|
89
|
+
expect(getYears(t.start, t.end, t.current).length).toEqual(t.res);
|
|
70
90
|
});
|
|
91
|
+
|
|
71
92
|
test("Multiple years (11)", () => {
|
|
72
93
|
const t = {
|
|
73
94
|
start: new Date(2019, 2, 22),
|
|
74
95
|
end: new Date(2029, 9, 22),
|
|
96
|
+
current: 2022,
|
|
75
97
|
res: 11,
|
|
76
98
|
};
|
|
77
|
-
expect(getYears(t.start, t.end).length).toEqual(t.res);
|
|
99
|
+
expect(getYears(t.start, t.end, t.current).length).toEqual(t.res);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test("Displaymonth outside range: after (11)", () => {
|
|
103
|
+
const t = {
|
|
104
|
+
start: new Date(2019, 2, 22),
|
|
105
|
+
end: new Date(2029, 9, 22),
|
|
106
|
+
current: 2040,
|
|
107
|
+
res: 12,
|
|
108
|
+
};
|
|
109
|
+
expect(getYears(t.start, t.end, t.current).length).toEqual(t.res);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("Displaymonth outside range: before (11)", () => {
|
|
113
|
+
const t = {
|
|
114
|
+
start: new Date(2019, 2, 22),
|
|
115
|
+
end: new Date(2029, 9, 22),
|
|
116
|
+
current: 2001,
|
|
117
|
+
res: 12,
|
|
118
|
+
};
|
|
119
|
+
expect(getYears(t.start, t.end, t.current).length).toEqual(t.res);
|
|
78
120
|
});
|
|
79
121
|
});
|
|
@@ -12,7 +12,3 @@ export const dateIsInCurrentMonth = (
|
|
|
12
12
|
export function isValidDate(day: Date): boolean {
|
|
13
13
|
return day && !isNaN(day?.getTime()) && day.getFullYear() > 999;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
export const hasNextYear = (year: Date, years: Date[], val: any): boolean => {
|
|
17
|
-
return years.some((x) => year.getFullYear() + val === x.getFullYear());
|
|
18
|
-
};
|
|
@@ -28,15 +28,31 @@ export const getMonths = (start: Date, end: Date, current: Date): Date[] => {
|
|
|
28
28
|
dropdownMonths.push(setMonth(date, month));
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
|
|
32
|
+
if (!dropdownMonths.map((d) => d.getMonth()).includes(current.getMonth())) {
|
|
33
|
+
dropdownMonths.push(current);
|
|
34
|
+
}
|
|
35
|
+
dropdownMonths.sort((a, b) => a.getMonth() - b.getMonth());
|
|
36
|
+
|
|
31
37
|
return dropdownMonths;
|
|
32
38
|
};
|
|
33
39
|
|
|
34
|
-
export const getYears = (
|
|
40
|
+
export const getYears = (
|
|
41
|
+
start: Date,
|
|
42
|
+
end: Date,
|
|
43
|
+
currentYear: number
|
|
44
|
+
): Date[] => {
|
|
35
45
|
const years: Date[] = [];
|
|
36
46
|
const fromYear = start.getFullYear();
|
|
37
47
|
const toYear = end.getFullYear();
|
|
38
48
|
for (let year = fromYear; year <= toYear; year++) {
|
|
39
49
|
years.push(setYear(startOfYear(new Date()), year));
|
|
40
50
|
}
|
|
51
|
+
|
|
52
|
+
if (fromYear > currentYear || toYear < currentYear) {
|
|
53
|
+
years.push(setYear(startOfYear(new Date()), currentYear));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
years.sort((a, b) => a.getFullYear() - b.getFullYear());
|
|
41
57
|
return years;
|
|
42
58
|
};
|
package/src/date/utils/index.ts
CHANGED
|
@@ -15,7 +15,7 @@ export {
|
|
|
15
15
|
export { getLocaleFromString } from "./locale";
|
|
16
16
|
export { disableDate } from "./dates-disabled";
|
|
17
17
|
|
|
18
|
-
export { dateIsInCurrentMonth, isValidDate
|
|
18
|
+
export { dateIsInCurrentMonth, isValidDate } from "./check-dates";
|
|
19
19
|
export { getInitialYear } from "./get-initial-year";
|
|
20
20
|
export { isMatch, isDateInRange, type Matcher } from "./is-match";
|
|
21
21
|
export { nextEnabled } from "./navigation";
|