UNPKG

@event-calendar/core

Version:

Full-sized drag & drop event calendar with resource & timeline views

103 lines (86 loc) 2.86 kB
import {untrack} from 'svelte'; import {addDay, bgEvent, cloneDate, createAllDayChunks, datesEqual, outsideRange, prepareAllDayChunks} from '#lib'; export function colsCount(mainState) { return () => { // Dependencies let {viewDates, options: {duration, hiddenDays}} = mainState; let count; untrack(() => count = duration.months || duration.inWeeks ? 7 - hiddenDays.length : viewDates.length); return count; }; } export function grid(mainState, viewState) { return () => { // Dependencies let {options: {highlightedDates, validRange}, viewDates} = mainState; let {colsCount} = viewState; let grid = []; untrack(() => { let days = []; let gridColumn = 1; let gridRow = 1; for (let date of viewDates) { days.push({ gridColumn, gridRow, resource: undefined, dayStart: date, dayEnd: addDay(cloneDate(date)), disabled: outsideRange(date, validRange), highlight: highlightedDates.some(d => datesEqual(d, date)) }); if (gridColumn === colsCount) { grid.push(days); days = []; gridColumn = 0; ++ gridRow; } ++ gridColumn; } }); return grid; } } export function eventChunks(mainState, viewState) { return () => { // Dependencies let {filteredEvents} = mainState; let {grid} = viewState; let chunks = []; let bgChunks = []; untrack(() => { for (let event of filteredEvents) { for (let days of grid) { if (bgEvent(event.display)) { if (event.allDay) { bgChunks = bgChunks.concat(createAllDayChunks(event, days)); } } else { chunks = chunks.concat(createAllDayChunks(event, days)); } } } prepareAllDayChunks(chunks); }); return {chunks, bgChunks}; }; } export function iEventChunks(mainState, viewState) { return () => { // Dependencies let {iEvents} = mainState; let {grid} = viewState; let iChunks = []; for (let [, event] of iEvents) { if (!event) { continue; } untrack(() => { for (let days of grid) { iChunks = iChunks.concat(createAllDayChunks(event, days, false)); } }); } return iChunks; }; }