devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
125 lines (122 loc) • 5.31 kB
JavaScript
/**
* DevExtreme (cjs/ui/scheduler/appointments/viewModelGenerator.js)
* Version: 21.2.3
* Build date: Thu Oct 28 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
exports.AppointmentViewModelGenerator = void 0;
var _strategy_vertical = _interopRequireDefault(require("./rendering_strategies/strategy_vertical"));
var _strategy_horizontal = _interopRequireDefault(require("./rendering_strategies/strategy_horizontal"));
var _strategy_horizontal_month_line = _interopRequireDefault(require("./rendering_strategies/strategy_horizontal_month_line"));
var _strategy_horizontal_month = _interopRequireDefault(require("./rendering_strategies/strategy_horizontal_month"));
var _strategy_agenda = _interopRequireDefault(require("./rendering_strategies/strategy_agenda"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
}
}
function _extends() {
_extends = Object.assign || 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)
}
var RENDERING_STRATEGIES = {
horizontal: _strategy_horizontal.default,
horizontalMonth: _strategy_horizontal_month.default,
horizontalMonthLine: _strategy_horizontal_month_line.default,
vertical: _strategy_vertical.default,
agenda: _strategy_agenda.default
};
var AppointmentViewModelGenerator = function() {
function AppointmentViewModelGenerator() {}
var _proto = AppointmentViewModelGenerator.prototype;
_proto.initRenderingStrategy = function(options) {
var RenderingStrategy = RENDERING_STRATEGIES[options.appointmentRenderingStrategyName];
this.renderingStrategy = new RenderingStrategy(options)
};
_proto.generate = function(filteredItems, options) {
var isRenovatedAppointments = options.isRenovatedAppointments,
appointmentRenderingStrategyName = options.appointmentRenderingStrategyName;
var appointments = filteredItems ? filteredItems.slice() : [];
this.initRenderingStrategy(options);
var renderingStrategy = this.getRenderingStrategy();
var positionMap = renderingStrategy.createTaskPositionMap(appointments);
var viewModel = this.postProcess(appointments, positionMap, appointmentRenderingStrategyName, isRenovatedAppointments);
if (isRenovatedAppointments) {
return this.makeRenovatedViewModel(viewModel)
}
return {
positionMap: positionMap,
viewModel: viewModel
}
};
_proto.postProcess = function(filteredItems, positionMap, appointmentRenderingStrategyName, isRenovatedAppointments) {
var _this = this;
return filteredItems.map((function(data, index) {
if (!_this.getRenderingStrategy().keepAppointmentSettings()) {
delete data.settings
}
var appointmentSettings = positionMap[index];
appointmentSettings.forEach((function(item) {
item.direction = "vertical" === appointmentRenderingStrategyName && !item.allDay ? "vertical" : "horizontal"
}));
var item = {
itemData: data,
settings: appointmentSettings
};
if (!isRenovatedAppointments) {
item.needRepaint = true;
item.needRemove = false
}
return item
}))
};
_proto.makeRenovatedViewModel = function(viewModel) {
var strategy = this.getRenderingStrategy();
var regularViewModel = [];
var allDayViewModel = [];
viewModel.forEach((function(_ref) {
var itemData = _ref.itemData,
settings = _ref.settings;
settings.forEach((function(options) {
var geometry = strategy.getAppointmentGeometry(options);
var item = {
appointment: itemData,
geometry: _extends({}, geometry, {
leftVirtualWidth: options.leftVirtualWidth,
topVirtualHeight: options.topVirtualHeight
}),
info: _extends({}, options.info, {
allDay: options.allDay
})
};
if (options.allDay) {
allDayViewModel.push(item)
} else {
regularViewModel.push(item)
}
}))
}));
return {
allDay: allDayViewModel,
regular: regularViewModel
}
};
_proto.getRenderingStrategy = function() {
return this.renderingStrategy
};
return AppointmentViewModelGenerator
}();
exports.AppointmentViewModelGenerator = AppointmentViewModelGenerator;