UNPKG

fullcalendar

Version:

FullCalendar Vanilla JS package for rendering a calendar

65 lines (61 loc) 2.97 kB
import { jsx } from 'preact/jsx-runtime'; import { B as BaseComponent, m as memoize, d as NowTimer } from './66c53e04.js'; import { b as buildDayTableModel, a as buildDateRowConfigs, c as createDayHeaderFormatter, D as DayTableSlicer } from './515d1f26.js'; import { D as DayGridLayout } from './e48b8fd8.js'; import { T as TableDateProfileGenerator } from './731d9182.js'; class DayGridView extends BaseComponent { constructor() { super(...arguments); // memo this.buildDayTableModel = memoize(buildDayTableModel); this.buildDateRowConfigs = memoize(buildDateRowConfigs); this.createDayHeaderFormatter = memoize(createDayHeaderFormatter); // internal this.slicer = new DayTableSlicer(); } render() { const { props, context } = this; const { dateProfile } = props; const { options, dateEnv } = context; const dayTableModel = this.buildDayTableModel(dateProfile, context.dateProfileGenerator, dateEnv); const datesRepDistinctDays = dayTableModel.rowCount === 1; const dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dayTableModel.colCount); const slicedProps = this.slicer.sliceProps(props, dateProfile, options.nextDayThreshold, context, dayTableModel); return (jsx(NowTimer, { unit: "day", children: (nowDate, todayRange) => { const headerTiers = this.buildDateRowConfigs(dayTableModel.headerDates, datesRepDistinctDays, dateProfile, todayRange, dayHeaderFormat, context); return (jsx(DayGridLayout, { labelId: props.labelId, labelStr: props.labelStr, dateProfile: dateProfile, todayRange: todayRange, cellRows: dayTableModel.cellRows, forPrint: props.forPrint, className: props.className, // header content headerTiers: headerTiers, // body content fgEventSegs: slicedProps.fgEventSegs, bgEventSegs: slicedProps.bgEventSegs, businessHourSegs: slicedProps.businessHourSegs, dateSelectionSegs: slicedProps.dateSelectionSegs, eventDrag: slicedProps.eventDrag, eventResize: slicedProps.eventResize, eventSelection: slicedProps.eventSelection })); } })); } } var dayGridPlugin = { name: 'daygrid', initialView: 'dayGridMonth', views: { dayGrid: { component: DayGridView, dateProfileGeneratorClass: TableDateProfileGenerator, }, dayGridDay: { type: 'dayGrid', duration: { days: 1 }, }, dayGridWeek: { type: 'dayGrid', duration: { weeks: 1 }, }, dayGridMonth: { type: 'dayGrid', duration: { months: 1 }, fixedWeekCount: true, }, dayGridYear: { type: 'dayGrid', duration: { years: 1 }, }, }, }; export { dayGridPlugin as d };