devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
283 lines (276 loc) • 13.9 kB
JavaScript
/**
* DevExtreme (cjs/ui/scheduler/appointments.layout_manager.js)
* Version: 22.1.9
* Build date: Tue Apr 18 2023
*
* Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
exports.default = void 0;
var _common = require("../../core/utils/common");
var _viewModelGenerator = require("./appointments/viewModelGenerator");
var _utils = require("./resources/utils");
var _positionHelper = require("./workspaces/helpers/positionHelper");
var _base = require("../../renovation/ui/scheduler/view_model/to_test/views/utils/base");
var _appointments = require("../../renovation/ui/scheduler/model/appointments");
function _typeof(obj) {
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
return typeof obj
} : function(obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
}, _typeof(obj)
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key]
}
}
}
return target
};
return _extends.apply(this, arguments)
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) {
descriptor.writable = true
}
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor)
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) {
_defineProperties(Constructor.prototype, protoProps)
}
if (staticProps) {
_defineProperties(Constructor, staticProps)
}
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return "symbol" === _typeof(key) ? key : String(key)
}
function _toPrimitive(input, hint) {
if ("object" !== _typeof(input) || null === input) {
return input
}
var prim = input[Symbol.toPrimitive];
if (void 0 !== prim) {
var res = prim.call(input, hint || "default");
if ("object" !== _typeof(res)) {
return res
}
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === hint ? String : Number)(input)
}
var AppointmentLayoutManager = function() {
function AppointmentLayoutManager(instance) {
this.instance = instance;
this.appointmentViewModel = new _viewModelGenerator.AppointmentViewModelGenerator
}
var _proto = AppointmentLayoutManager.prototype;
_proto.getCellDimensions = function(options) {
if (this.instance._workSpace) {
return {
width: this.instance._workSpace.getCellWidth(),
height: this.instance._workSpace.getCellHeight(),
allDayHeight: this.instance._workSpace.getAllDayHeight()
}
}
};
_proto._getRenderingStrategyOptions = function() {
var workspace = this.instance.getWorkSpace();
var _this$instance$getWor = this.instance.getWorkSpace(),
virtualScrollingDispatcher = _this$instance$getWor.virtualScrollingDispatcher;
var cellCountInsideLeftVirtualCell = virtualScrollingDispatcher.cellCountInsideLeftVirtualCell,
cellCountInsideTopVirtualRow = virtualScrollingDispatcher.cellCountInsideTopVirtualRow;
var groupCount = (0, _utils.getGroupCount)(this.instance.option("loadedResources"));
var DOMMetaData = workspace.getDOMElementsMetaData();
var allDayHeight = (0, _positionHelper.getAllDayHeight)(workspace.option("showAllDayPanel"), workspace._isVerticalGroupedWorkSpace(), DOMMetaData);
var rowCount = workspace._getRowCount();
var positionHelper = workspace.positionHelper,
viewDataProvider = workspace.viewDataProvider;
var visibleDayDuration = viewDataProvider.getVisibleDayDuration(workspace.option("startDayHour"), workspace.option("endDayHour"), workspace.option("hoursInterval"));
var cellDuration = (0, _base.getCellDuration)(workspace.type, workspace.option("startDayHour"), workspace.option("endDayHour"), workspace.option("hoursInterval"));
return {
resources: this.instance.option("resources"),
loadedResources: this.instance.option("loadedResources"),
getAppointmentColor: this.instance.createGetAppointmentColor(),
dataAccessors: this.instance._dataAccessors,
isRenovatedAppointments: this.instance.option("isRenovatedAppointments"),
appointmentRenderingStrategyName: this.appointmentRenderingStrategyName,
adaptivityEnabled: this.instance.option("adaptivityEnabled"),
rtlEnabled: this.instance.option("rtlEnabled"),
startDayHour: this.instance._getCurrentViewOption("startDayHour"),
endDayHour: this.instance._getCurrentViewOption("endDayHour"),
maxAppointmentsPerCell: this.instance._getCurrentViewOption("maxAppointmentsPerCell"),
currentDate: this.instance.option("currentDate"),
isVirtualScrolling: this.instance.isVirtualScrolling(),
leftVirtualCellCount: cellCountInsideLeftVirtualCell,
topVirtualCellCount: cellCountInsideTopVirtualRow,
intervalCount: workspace.option("intervalCount"),
hoursInterval: workspace.option("hoursInterval"),
showAllDayPanel: workspace.option("showAllDayPanel"),
isGroupedAllDayPanel: workspace.isGroupedAllDayPanel(),
groups: this.instance._getCurrentViewOption("groups"),
groupCount: groupCount,
rowCount: rowCount,
appointmentCountPerCell: this.instance.option("_appointmentCountPerCell"),
appointmentOffset: this.instance.option("_appointmentOffset"),
allowResizing: this.instance._allowResizing(),
allowAllDayResizing: this.instance._allowAllDayResizing(),
startViewDate: workspace.getStartViewDate(),
groupOrientation: workspace._getRealGroupOrientation(),
cellWidth: (0, _positionHelper.getCellWidth)(DOMMetaData),
cellHeight: (0, _positionHelper.getCellHeight)(DOMMetaData),
allDayHeight: allDayHeight,
resizableStep: positionHelper.getResizableStep(),
visibleDayDuration: visibleDayDuration,
allDayPanelMode: this.instance._getCurrentViewOption("allDayPanelMode"),
timeZoneCalculator: this.instance.timeZoneCalculator,
timeZone: this.instance.option("timeZone"),
firstDayOfWeek: this.instance.getFirstDayOfWeek(),
viewStartDayHour: this.instance._getCurrentViewOption("startDayHour"),
viewEndDayHour: this.instance._getCurrentViewOption("endDayHour"),
viewType: workspace.type,
endViewDate: workspace.getEndViewDate(),
positionHelper: positionHelper,
isGroupedByDate: workspace.isGroupedByDate(),
cellDuration: cellDuration,
cellDurationInMinutes: workspace.option("cellDuration"),
viewDataProvider: workspace.viewDataProvider,
supportAllDayRow: workspace.supportAllDayRow(),
dateRange: workspace.getDateRange(),
intervalDuration: workspace.getIntervalDuration(),
allDayIntervalDuration: workspace.getIntervalDuration(true),
isVerticalGroupOrientation: workspace.isVerticalOrientation(),
DOMMetaData: DOMMetaData,
instance: this.instance,
agendaDuration: workspace.option("agendaDuration")
}
};
_proto.createAppointmentsMap = function(items) {
var renderingStrategyOptions = this._getRenderingStrategyOptions();
var _this$appointmentView = this.appointmentViewModel.generate(items, renderingStrategyOptions),
viewModel = _this$appointmentView.viewModel,
positionMap = _this$appointmentView.positionMap;
this._positionMap = positionMap;
return viewModel
};
_proto._isDataChanged = function(data) {
var appointmentDataProvider = this.instance.appointmentDataProvider;
var updatedData = appointmentDataProvider.getUpdatedAppointment();
return updatedData === data || appointmentDataProvider.getUpdatedAppointmentKeys().some((function(item) {
return data[item.key] === item.value
}))
};
_proto._isAppointmentShouldAppear = function(currentAppointment, sourceAppointment) {
return currentAppointment.needRepaint && sourceAppointment.needRemove
};
_proto._isSettingChanged = function(settings, sourceSetting) {
if (settings.length !== sourceSetting.length) {
return true
}
var createSettingsToCompare = function(settings, index) {
var currentSetting = settings[index];
var leftVirtualCellCount = currentSetting.leftVirtualCellCount || 0;
var topVirtualCellCount = currentSetting.topVirtualCellCount || 0;
var columnIndex = currentSetting.columnIndex + leftVirtualCellCount;
var rowIndex = currentSetting.rowIndex + topVirtualCellCount;
var hMax = currentSetting.reduced ? currentSetting.hMax : void 0;
var vMax = currentSetting.reduced ? currentSetting.vMax : void 0;
return _extends({}, currentSetting, {
columnIndex: columnIndex,
rowIndex: rowIndex,
positionByMap: void 0,
topVirtualCellCount: void 0,
leftVirtualCellCount: void 0,
leftVirtualWidth: void 0,
topVirtualHeight: void 0,
hMax: hMax,
vMax: vMax,
info: {}
})
};
for (var i = 0; i < settings.length; i++) {
var newSettings = createSettingsToCompare(settings, i);
var oldSettings = createSettingsToCompare(sourceSetting, i);
if (oldSettings) {
oldSettings.sortedIndex = newSettings.sortedIndex
}
if (!(0, _common.equalByValue)(newSettings, oldSettings)) {
return true
}
}
return false
};
_proto._getAssociatedSourceAppointment = function(currentAppointment, sourceAppointments) {
for (var i = 0; i < sourceAppointments.length; i++) {
var item = sourceAppointments[i];
if (item.itemData === currentAppointment.itemData) {
return item
}
}
return null
};
_proto._getDeletedAppointments = function(currentAppointments, sourceAppointments) {
var result = [];
for (var i = 0; i < sourceAppointments.length; i++) {
var sourceAppointment = sourceAppointments[i];
var currentAppointment = this._getAssociatedSourceAppointment(sourceAppointment, currentAppointments);
if (!currentAppointment) {
sourceAppointment.needRemove = true;
result.push(sourceAppointment)
}
}
return result
};
_proto.getRepaintedAppointments = function(currentAppointments, sourceAppointments) {
var _this = this;
if (0 === sourceAppointments.length || "agenda" === this.appointmentRenderingStrategyName) {
return currentAppointments
}
currentAppointments.forEach((function(appointment) {
var sourceAppointment = _this._getAssociatedSourceAppointment(appointment, sourceAppointments);
if (sourceAppointment) {
var isDataChanged = _this._isDataChanged(appointment.itemData);
var isSettingChanged = _this._isSettingChanged(appointment.settings, sourceAppointment.settings);
var isAppointmentShouldAppear = _this._isAppointmentShouldAppear(appointment, sourceAppointment);
appointment.needRepaint = isDataChanged || isSettingChanged || isAppointmentShouldAppear
}
}));
return currentAppointments.concat(this._getDeletedAppointments(currentAppointments, sourceAppointments))
};
_proto.getRenderingStrategyInstance = function() {
var renderingStrategy = this.appointmentViewModel.getRenderingStrategy();
if (!renderingStrategy) {
var options = this._getRenderingStrategyOptions();
this.appointmentViewModel.initRenderingStrategy(options)
}
return this.appointmentViewModel.getRenderingStrategy()
};
_createClass(AppointmentLayoutManager, [{
key: "appointmentRenderingStrategyName",
get: function() {
return (0, _appointments.getAppointmentRenderingStrategyName)(this.instance.currentViewType)
}
}]);
return AppointmentLayoutManager
}();
var _default = AppointmentLayoutManager;
exports.default = _default;
module.exports = exports.default;
module.exports.default = exports.default;