UNPKG

@navikt/ds-react

Version:

React components from the Norwegian Labour and Welfare Administration.

156 lines 6.93 kB
"use strict"; 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