UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

106 lines (104 loc) 4.72 kB
/** * DevExtreme (cjs/__internal/scheduler/appointments_new/resizing/get_resized_dates.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/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isStartDateResized = exports.getResizedDates = void 0; var _date = _interopRequireDefault(require("../../../../core/utils/date")); var _utils_time_zone = _interopRequireDefault(require("../../utils_time_zone")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } const toMs = _date.default.dateToMilliseconds; const isStartDateResized = _ref => { let { handles: handles, isVerticalDirection: isVerticalDirection, isAllDay: isAllDay, rtlEnabled: rtlEnabled } = _ref; const usesHorizontalHandles = !isVerticalDirection || isAllDay; if (usesHorizontalHandles) { return rtlEnabled ? handles.right : handles.left } return handles.top }; exports.isStartDateResized = isStartDateResized; const correctEndDateByDelta = (endDate, deltaTime, startDayHour, endDayHour) => { const maxDate = new Date(endDate); const minDate = new Date(endDate); const correctEndDate = new Date(endDate); minDate.setHours(startDayHour, 0, 0, 0); maxDate.setHours(endDayHour, 0, 0, 0); if (correctEndDate > maxDate) { correctEndDate.setHours(endDayHour, 0, 0, 0) } let result = correctEndDate.getTime() + deltaTime; const visibleDayDuration = (endDayHour - startDayHour) * toMs("hour"); const daysCount = deltaTime > 0 ? Math.ceil(deltaTime / visibleDayDuration) : Math.floor(deltaTime / visibleDayDuration); if (result > maxDate.getTime() || result <= minDate.getTime()) { const tailOfCurrentDay = maxDate.getTime() - correctEndDate.getTime(); const tailOfPrevDays = deltaTime - tailOfCurrentDay; const correctedEndDate = new Date(correctEndDate).setDate(correctEndDate.getDate() + daysCount); const lastDay = new Date(correctedEndDate); lastDay.setHours(startDayHour, 0, 0, 0); result = lastDay.getTime() + tailOfPrevDays - visibleDayDuration * (daysCount - 1) } return result }; const correctStartDateByDelta = (startDate, deltaTime, startDayHour, endDayHour) => { const maxDate = new Date(startDate); const minDate = new Date(startDate); const correctStartDate = new Date(startDate); minDate.setHours(startDayHour, 0, 0, 0); maxDate.setHours(endDayHour, 0, 0, 0); if (correctStartDate < minDate) { correctStartDate.setHours(startDayHour, 0, 0, 0) } let result = correctStartDate.getTime() - deltaTime; const visibleDayDuration = (endDayHour - startDayHour) * toMs("hour"); const daysCount = deltaTime > 0 ? Math.ceil(deltaTime / visibleDayDuration) : Math.floor(deltaTime / visibleDayDuration); if (result < minDate.getTime() || result >= maxDate.getTime()) { const tailOfCurrentDay = correctStartDate.getTime() - minDate.getTime(); const tailOfPrevDays = deltaTime - tailOfCurrentDay; const firstDay = new Date(correctStartDate.setDate(correctStartDate.getDate() - daysCount)); firstDay.setHours(endDayHour, 0, 0, 0); result = firstDay.getTime() - tailOfPrevDays + visibleDayDuration * (daysCount - 1) } return result }; const getResizedDates = options => { const { startDate: startDate, endDate: endDate, deltaTime: deltaTime, isStartDateChanged: isStartDateChanged, needCorrectDates: needCorrectDates, startDayHour: startDayHour, endDayHour: endDayHour } = options; if (isStartDateChanged) { const correctedStart = needCorrectDates ? correctStartDateByDelta(startDate, deltaTime, startDayHour, endDayHour) : startDate.getTime() - deltaTime; const startTime = correctedStart + _utils_time_zone.default.getTimezoneOffsetChangeInMs(startDate, endDate, new Date(correctedStart), endDate); return { startDate: new Date(startTime), endDate: new Date(endDate.getTime()) } } const correctedEnd = needCorrectDates ? correctEndDateByDelta(endDate, deltaTime, startDayHour, endDayHour) : endDate.getTime() + deltaTime; const endTime = correctedEnd - _utils_time_zone.default.getTimezoneOffsetChangeInMs(startDate, endDate, startDate, new Date(correctedEnd)); return { startDate: new Date(startDate.getTime()), endDate: new Date(endTime) } }; exports.getResizedDates = getResizedDates;