@navikt/ds-react
Version:
React components from the Norwegian Labour and Welfare Administration.
156 lines • 6.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.nextEnabled = void 0;
const date_fns_1 = require("date-fns");
const date_utils_1 = require("../date-utils");
const nextEnabled = (months, key, disabled, currentMonth, setYearState, yearState, dropdownCaption, fromDate, toDate) => {
const currentIndex = currentMonth.getMonth();
if (key === "Home") {
const nextDate = nextOnRow(currentIndex, months, yearState, disabled, "home");
if (nextDate) {
return nextDate;
}
}
if (key === "End") {
const nextDate = nextOnRow(currentIndex, months, yearState, disabled, "end");
if (nextDate) {
return nextDate;
}
}
if (key === "PageUp") {
if (!dropdownCaption ||
(fromDate && yearState.getFullYear() - 1 >= (fromDate === null || fromDate === void 0 ? void 0 : fromDate.getFullYear()))) {
setYearState((0, date_fns_1.setYear)(yearState, Number(yearState.getFullYear() - 1)));
}
}
if (key === "PageDown") {
if (!dropdownCaption ||
(toDate && yearState.getFullYear() + 1 <= (toDate === null || toDate === void 0 ? void 0 : toDate.getFullYear()))) {
setYearState((0, date_fns_1.setYear)(yearState, Number(yearState.getFullYear() + 1)));
}
}
if (key === "ArrowRight") {
const nextMonth = loopForward(currentIndex, months, yearState, setYearState, disabled, false, dropdownCaption, fromDate, toDate);
if (nextMonth) {
return (0, date_fns_1.setYear)(months[nextMonth.index], nextMonth.year);
}
}
if (key === "ArrowLeft") {
const prevMonth = loopBack(currentIndex - 1, months, disabled, yearState, setYearState, false, dropdownCaption, fromDate, toDate);
if (prevMonth) {
return (0, date_fns_1.setYear)(months[prevMonth.index], prevMonth.year);
}
}
if (key === "ArrowDown") {
if (months[currentIndex + 4] &&
!(0, date_utils_1.isMatch)((0, date_fns_1.setYear)(months[currentIndex + 4], yearState.getFullYear()), disabled)) {
return (0, date_fns_1.setYear)(months[currentIndex + 4], yearState.getFullYear());
}
const fallbackNext = loopForward(currentIndex, months, yearState, setYearState, disabled, true, dropdownCaption, fromDate, toDate);
if (fallbackNext &&
getRow(fallbackNext.index) !== getRow(currentIndex + 8)) {
return (0, date_fns_1.setYear)(months[fallbackNext.index], fallbackNext.year);
}
}
if (key === "ArrowUp") {
if (months[currentIndex - 4] &&
!(0, date_utils_1.isMatch)((0, date_fns_1.setYear)(months[currentIndex - 4], Number(yearState.getFullYear())), disabled))
return (0, date_fns_1.setYear)(months[currentIndex - 4], Number(yearState.getFullYear()));
const fallbackPrev = loopBack(currentIndex, months, disabled, yearState, setYearState, true, dropdownCaption, fromDate, toDate);
if (fallbackPrev)
return (0, date_fns_1.setYear)(months[fallbackPrev.index], fallbackPrev.year);
}
return currentMonth;
};
exports.nextEnabled = nextEnabled;
const loopBack = (currentIndex, months, disabled, yearState, setYearState, rowCheck, dropdownCaption, fromDate, toDate) => {
let currentYear = (0, date_fns_1.setYear)(yearState, Number(yearState.getFullYear()));
for (let i = currentIndex; i >= -1; i--) {
if (i === -1) {
if (isOutOfRange(dropdownCaption, (0, date_fns_1.setYear)(currentYear, Number(currentYear.getFullYear() - 1)), fromDate, toDate))
return;
currentYear = (0, date_fns_1.setYear)(currentYear, Number(currentYear.getFullYear() - 1));
setYearState(currentYear);
i = 11;
}
const month = months[i];
const isDisabled = !(0, date_utils_1.isMatch)((0, date_fns_1.setYear)(month, Number(currentYear.getFullYear())), disabled);
if (rowCheck) {
if (isDisabled && getRow(i) !== getRow(currentIndex)) {
return { index: i, year: Number(currentYear.getFullYear()) };
}
}
else {
if (isDisabled) {
return { index: i, year: Number(currentYear.getFullYear()) };
}
}
}
};
const loopForward = (currentIndex, months, yearState, setYearState, disabled, rowCheck, dropdownCaption, fromDate, toDate) => {
let currentYear = (0, date_fns_1.setYear)(yearState, Number(yearState.getFullYear()));
for (let i = currentIndex + 1; i < months.length + 1; i++) {
if (i === 12) {
if (isOutOfRange(dropdownCaption, (0, date_fns_1.setYear)(currentYear, Number(currentYear.getFullYear() + 1)), fromDate, toDate))
return;
currentYear = (0, date_fns_1.setYear)(currentYear, Number(currentYear.getFullYear() + 1));
setYearState(currentYear);
i = 0;
}
const month = months[i];
const isDisabled = !(0, date_utils_1.isMatch)((0, date_fns_1.setYear)(month, Number(currentYear.getFullYear())), disabled);
if (rowCheck) {
if (isDisabled && getRow(i) !== getRow(currentIndex)) {
return { index: i, year: Number(currentYear.getFullYear()) };
}
}
else {
if (isDisabled) {
return { index: i, year: Number(currentYear.getFullYear()) };
}
}
}
};
const getRow = (index) => {
if (index >= 0 && index <= 3)
return 1;
if (index >= 4 && index <= 7)
return 2;
return 3;
};
const isOutOfRange = (dropdownCaption, year, fromDate, toDate) => {
if (dropdownCaption &&
fromDate &&
toDate &&
(year.getFullYear() < (fromDate === null || fromDate === void 0 ? void 0 : fromDate.getFullYear()) ||
year.getFullYear() > (toDate === null || toDate === void 0 ? void 0 : toDate.getFullYear()))) {
return true;
}
return false;
};
const nextOnRow = (currentIndex, months, yearState, disabled, mode) => {
const row = getRow(currentIndex);
let monthsOfRow = [];
switch (row) {
case 1:
monthsOfRow = months.slice(0, 4);
break;
case 2:
monthsOfRow = months.slice(4, 8);
break;
case 3:
monthsOfRow = months.slice(8, 12);
break;
default:
break;
}
if (mode === "end")
monthsOfRow = monthsOfRow.reverse();
for (let i = 0; i < monthsOfRow.length; i++) {
const month = monthsOfRow[i];
if (!(0, date_utils_1.isMatch)((0, date_fns_1.setYear)(month, Number(yearState.getFullYear())), disabled)) {
return (0, date_fns_1.setYear)(month, Number(yearState.getFullYear()));
}
}
};
//# sourceMappingURL=MonthPicker.util.js.map