devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
102 lines (101 loc) • 4.32 kB
JavaScript
/**
* DevExtreme (esm/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/
*/
import _extends from "@babel/runtime/helpers/esm/extends";
import VerticalAppointmentsStrategy from "./rendering_strategies/strategy_vertical";
import HorizontalAppointmentsStrategy from "./rendering_strategies/strategy_horizontal";
import HorizontalMonthLineAppointmentsStrategy from "./rendering_strategies/strategy_horizontal_month_line";
import HorizontalMonthAppointmentsStrategy from "./rendering_strategies/strategy_horizontal_month";
import AgendaAppointmentsStrategy from "./rendering_strategies/strategy_agenda";
var RENDERING_STRATEGIES = {
horizontal: HorizontalAppointmentsStrategy,
horizontalMonth: HorizontalMonthAppointmentsStrategy,
horizontalMonthLine: HorizontalMonthLineAppointmentsStrategy,
vertical: VerticalAppointmentsStrategy,
agenda: AgendaAppointmentsStrategy
};
export class AppointmentViewModelGenerator {
initRenderingStrategy(options) {
var RenderingStrategy = RENDERING_STRATEGIES[options.appointmentRenderingStrategyName];
this.renderingStrategy = new RenderingStrategy(options)
}
generate(filteredItems, options) {
var {
isRenovatedAppointments: isRenovatedAppointments,
appointmentRenderingStrategyName: appointmentRenderingStrategyName
} = options;
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
}
}
postProcess(filteredItems, positionMap, appointmentRenderingStrategyName, isRenovatedAppointments) {
return filteredItems.map((data, index) => {
if (!this.getRenderingStrategy().keepAppointmentSettings()) {
delete data.settings
}
var appointmentSettings = positionMap[index];
appointmentSettings.forEach(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
})
}
makeRenovatedViewModel(viewModel) {
var strategy = this.getRenderingStrategy();
var regularViewModel = [];
var allDayViewModel = [];
viewModel.forEach(_ref => {
var {
itemData: itemData,
settings: settings
} = _ref;
settings.forEach(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
}
}
getRenderingStrategy() {
return this.renderingStrategy
}
}