UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

76 lines (75 loc) 2.64 kB
/** * DevExtreme (esm/__internal/scheduler/workspaces/view_model/m_utils.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import dateUtils from "../../../../core/utils/date"; import { VIEWS } from "../../m_constants"; import { ViewDataGenerator } from "./m_view_data_generator"; import { ViewDataGeneratorDay } from "./m_view_data_generator_day"; import { ViewDataGeneratorMonth } from "./m_view_data_generator_month"; import { ViewDataGeneratorTimelineMonth } from "./m_view_data_generator_timeline_month"; import { ViewDataGeneratorWeek } from "./m_view_data_generator_week"; import { ViewDataGeneratorWorkWeek } from "./m_view_data_generator_work_week"; const DAYS_IN_WEEK = 7; const MS_IN_DAY = 864e5; export const getViewDataGeneratorByViewType = viewType => { switch (viewType) { case VIEWS.MONTH: return new ViewDataGeneratorMonth; case VIEWS.TIMELINE_MONTH: return new ViewDataGeneratorTimelineMonth; case VIEWS.DAY: case VIEWS.TIMELINE_DAY: return new ViewDataGeneratorDay; case VIEWS.WEEK: case VIEWS.TIMELINE_WEEK: return new ViewDataGeneratorWeek; case VIEWS.WORK_WEEK: case VIEWS.TIMELINE_WORK_WEEK: return new ViewDataGeneratorWorkWeek; default: return new ViewDataGenerator } }; export function alignToFirstDayOfWeek(date, firstDayOfWeek) { const newDate = new Date(date); let dayDiff = newDate.getDay() - firstDayOfWeek; if (dayDiff < 0) { dayDiff += 7 } newDate.setDate(newDate.getDate() - dayDiff); return newDate } export function alignToLastDayOfWeek(date, firstDayOfWeek) { const newDate = alignToFirstDayOfWeek(date, firstDayOfWeek); newDate.setDate(newDate.getDate() + 7 - 1); return newDate } export function calculateDaysBetweenDates(fromDate, toDate) { const msDiff = dateUtils.trimTime(toDate).getTime() - dateUtils.trimTime(fromDate).getTime(); return Math.round(msDiff / 864e5) + 1 } export function calculateAlignedWeeksBetweenDates(fromDate, toDate, firstDayOfWeek) { const alignedFromDate = alignToFirstDayOfWeek(fromDate, firstDayOfWeek); const alignedToDate = alignToLastDayOfWeek(toDate, firstDayOfWeek); const weekCount = calculateDaysBetweenDates(alignedFromDate, alignedToDate) / 7; return Math.max(weekCount, 6) }