devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
82 lines (76 loc) • 3.51 kB
JavaScript
/**
* DevExtreme (cjs/__internal/scheduler/workspaces/view_model/m_utils.js)
* Version: 24.2.7
* Build date: Mon Apr 28 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.alignToFirstDayOfWeek = alignToFirstDayOfWeek;
exports.alignToLastDayOfWeek = alignToLastDayOfWeek;
exports.calculateAlignedWeeksBetweenDates = calculateAlignedWeeksBetweenDates;
exports.calculateDaysBetweenDates = calculateDaysBetweenDates;
exports.getViewDataGeneratorByViewType = void 0;
var _date = _interopRequireDefault(require("../../../../core/utils/date"));
var _constants = require("../../constants");
var _m_view_data_generator = require("./m_view_data_generator");
var _m_view_data_generator_day = require("./m_view_data_generator_day");
var _m_view_data_generator_month = require("./m_view_data_generator_month");
var _m_view_data_generator_timeline_month = require("./m_view_data_generator_timeline_month");
var _m_view_data_generator_week = require("./m_view_data_generator_week");
var _m_view_data_generator_work_week = require("./m_view_data_generator_work_week");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const DAYS_IN_WEEK = 7;
const MS_IN_DAY = 864e5;
const getViewDataGeneratorByViewType = viewType => {
switch (viewType) {
case _constants.VIEWS.MONTH:
return new _m_view_data_generator_month.ViewDataGeneratorMonth;
case _constants.VIEWS.TIMELINE_MONTH:
return new _m_view_data_generator_timeline_month.ViewDataGeneratorTimelineMonth;
case _constants.VIEWS.DAY:
case _constants.VIEWS.TIMELINE_DAY:
return new _m_view_data_generator_day.ViewDataGeneratorDay;
case _constants.VIEWS.WEEK:
case _constants.VIEWS.TIMELINE_WEEK:
return new _m_view_data_generator_week.ViewDataGeneratorWeek;
case _constants.VIEWS.WORK_WEEK:
case _constants.VIEWS.TIMELINE_WORK_WEEK:
return new _m_view_data_generator_work_week.ViewDataGeneratorWorkWeek;
default:
return new _m_view_data_generator.ViewDataGenerator
}
};
exports.getViewDataGeneratorByViewType = getViewDataGeneratorByViewType;
function alignToFirstDayOfWeek(date, firstDayOfWeek) {
const newDate = new Date(date);
let dayDiff = newDate.getDay() - firstDayOfWeek;
if (dayDiff < 0) {
dayDiff += DAYS_IN_WEEK
}
newDate.setDate(newDate.getDate() - dayDiff);
return newDate
}
function alignToLastDayOfWeek(date, firstDayOfWeek) {
const newDate = alignToFirstDayOfWeek(date, firstDayOfWeek);
newDate.setDate(newDate.getDate() + DAYS_IN_WEEK - 1);
return newDate
}
function calculateDaysBetweenDates(fromDate, toDate) {
const msDiff = _date.default.trimTime(toDate).getTime() - _date.default.trimTime(fromDate).getTime();
return Math.round(msDiff / MS_IN_DAY) + 1
}
function calculateAlignedWeeksBetweenDates(fromDate, toDate, firstDayOfWeek) {
const alignedFromDate = alignToFirstDayOfWeek(fromDate, firstDayOfWeek);
const alignedToDate = alignToLastDayOfWeek(toDate, firstDayOfWeek);
const weekCount = calculateDaysBetweenDates(alignedFromDate, alignedToDate) / DAYS_IN_WEEK;
return Math.max(weekCount, 6)
}