devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
48 lines (47 loc) • 1.92 kB
JavaScript
/**
* 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
};