@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
86 lines (85 loc) • 1.9 kB
JavaScript
;
"use client";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useViews;
exports.getViews = getViews;
var _dateFns = require("date-fns");
var _react = require("react");
function useViews({
isRange,
...dates
}) {
const [previousDates, setPreviousDates] = (0, _react.useState)(dates);
const [views, setViews] = (0, _react.useState)(getViews({
...dates,
isRange
}));
const hasClickedCalendarDay = (0, _react.useRef)(false);
const hasDateChanges = (0, _react.useMemo)(() => Object.keys(dates).some(date => previousDates[date] !== dates[date]), [dates, previousDates]);
const setHasClickedCalendarDay = (0, _react.useCallback)(hasClicked => hasClickedCalendarDay.current = hasClicked, []);
if (hasDateChanges) {
setPreviousDates(dates);
if (hasClickedCalendarDay.current) {
setHasClickedCalendarDay(false);
} else {
const updatedViews = getViews({
...dates,
isRange
});
setViews(updatedViews);
}
}
function updateViews(views, cb = null) {
setViews(views);
cb === null || cb === void 0 || cb();
}
return {
views,
setViews: updateViews,
setHasClickedCalendarDay
};
}
function getViews({
isRange,
...dates
}) {
return isRange ? [{
nr: 0,
month: getMonthView({
months: dates,
nr: 0
})
}, {
nr: 1,
month: getMonthView({
months: dates,
nr: 1
})
}] : [{
nr: 0,
month: getMonthView({
months: dates,
nr: 0
})
}];
}
function getMonthView({
months,
nr
}) {
const {
startMonth,
endMonth
} = months;
if (startMonth && nr === 0) {
return startMonth;
}
if (endMonth && nr === 1) {
return endMonth;
}
const fallbackMonth = startMonth || new Date();
return (0, _dateFns.addMonths)(fallbackMonth, nr);
}
//# sourceMappingURL=useViews.js.map