UNPKG

@progress/kendo-angular-scheduler

Version:

Kendo UI Scheduler Angular - Outlook or Google-style angular scheduler calendar. Full-featured and customizable embedded scheduling from the creator developers trust for professional UI components.

58 lines (57 loc) 2.75 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { intersects, toUTCDate, roundAllDayEnd } from '../utils'; import { sortTasksByTime } from '../../common/util'; /** @hidden */ export const isMultiDay = ({ start, end }) => { const startDate = start.stripTime(); const endDate = end.stripTime(); return startDate.getTime() !== endDate.getTime() && (endDate.getTime() !== end.getTime() || startDate.addDays(1).getTime() !== endDate.getTime()); }; //check start and times or update day ranges to have them /** @hidden */ export const createTasks = (periodStart, periodEnd, items, ranges) => { const tasks = []; const utcStart = toUTCDate(periodStart); const utcEnd = toUTCDate(periodEnd); for (let index = 0; index < items.length; index++) { const item = items[index]; const multiDay = isMultiDay(item); const multipleRanges = multiDay && !item.event.isAllDay; const isAllDay = typeof item.event.isAllDay === 'boolean' ? item.event.isAllDay : (multiDay && !multipleRanges); const endTime = (isAllDay ? roundAllDayEnd(item) : item.end).toUTCDate(); const startTime = (isAllDay ? item.start.stripTime() : item.start).toUTCDate(); for (let rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) { const rangeStart = ranges[rangeIndex].start; const rangeEnd = ranges[rangeIndex].end; if (intersects(startTime, endTime, rangeStart, rangeEnd)) { const task = { index, isAllDay, startTime, endTime, rangeIndex: isAllDay ? 0 : rangeIndex, start: item.start, end: item.end, event: item.event }; tasks.push(task); if (!multipleRanges) { task.head = utcEnd < endTime; task.tail = startTime < utcStart; break; } else { const nextRange = ranges[rangeIndex + 1]; const previousRange = ranges[rangeIndex - 1]; task.head = (nextRange ? nextRange.start : utcEnd) < endTime; task.tail = startTime < (previousRange ? previousRange.end : utcStart); } } } } return sortTasksByTime(tasks); };