UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

48 lines (47 loc) 1.92 kB
/** * DevExtreme (esm/__internal/scheduler/r1/utils/agenda.js) * Version: 26.1.4 * Build date: Fri Jul 24 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import timeZoneUtils from "../../utils_time_zone"; import { setOptionHour } from "./base"; export const calculateStartViewDate = (currentDate, startDayHour) => { const validCurrentDate = new Date(currentDate); return setOptionHour(validCurrentDate, startDayHour) }; const getDayStart = date => new Date(date).setUTCHours(0, 0, 0, 0); export const getDateByIndex = (startViewDate, index) => { const date = new Date(startViewDate); date.setDate(date.getDate() + index); return date }; export const calculateEndViewDate = (startViewDate, endDayHour, agendaDuration) => { const lastVisibleDate = getDateByIndex(startViewDate, Math.max(agendaDuration - 1, 0)); const endViewDate = setOptionHour(lastVisibleDate, endDayHour); return new Date(endViewDate.getTime() - 6e4) }; export const calculateRows = (appointments, agendaDuration, startViewDate, groupCount) => { const intervalsStartMap = new Map; const result = Array.from({ length: groupCount || 1 }, () => new Array(agendaDuration).fill(0)); for (let i = 0; i < agendaDuration; i += 1) { const date = getDateByIndex(startViewDate, i); const utcDate = timeZoneUtils.createUTCDateWithLocalOffset(date); const dayStart = getDayStart(utcDate); intervalsStartMap.set(dayStart, i) } appointments.forEach(appointment => { const appointmentStart = getDayStart(appointment.startDateUTC); const intervalIndex = intervalsStartMap.get(appointmentStart); if (void 0 !== intervalIndex) { result[appointment.groupIndex][intervalIndex] += 1 } }); return result };