fullcalendar
Version:
FullCalendar Vanilla JS package for rendering a calendar
43 lines (40 loc) • 1.82 kB
JavaScript
import { D as DateProfileGenerator } from './ad0c00be.js';
import { addWeeks, addDays, diffWeeks } from '@full-ui/headless-calendar';
class TableDateProfileGenerator extends DateProfileGenerator {
// Computes the date range that will be rendered
buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay);
let { props } = this;
return buildDayTableRenderRange({
currentRange: renderRange, // ???
snapToWeek: /^(year|month)$/.test(currentRangeUnit),
fixedWeekCount: props.fixedWeekCount,
dateEnv: props.dateEnv,
});
}
}
function buildDayTableRenderRange(props) {
let { dateEnv, currentRange } = props;
let { start, end } = currentRange;
let endOfWeek;
// year and month views should be aligned with weeks. this is already done for week
if (props.snapToWeek) {
start = dateEnv.startOfWeek(start);
// make end-of-week if not already
endOfWeek = dateEnv.startOfWeek(end);
if (endOfWeek.valueOf() !== end.valueOf()) {
end = addWeeks(endOfWeek, 1);
}
}
// ensure 6 weeks
if (props.fixedWeekCount) {
// TODO: instead of these date-math gymnastics (for multimonth view),
// compute dateprofiles of all months, then use start of first and end of last.
let lastMonthRenderStart = dateEnv.startOfWeek(dateEnv.startOfMonth(addDays(currentRange.end, -1)));
let rowCount = Math.ceil(// could be partial weeks due to hiddenDays
diffWeeks(lastMonthRenderStart, end));
end = addWeeks(end, 6 - rowCount);
}
return { start, end };
}
export { TableDateProfileGenerator as T, buildDayTableRenderRange as b };