devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
103 lines (102 loc) • 4.56 kB
JavaScript
/**
* DevExtreme (cjs/__internal/scheduler/view_model/appointments_layout_manager.js)
* Version: 25.2.7
* Build date: Tue May 05 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.default = void 0;
var _filter_appointments = require("./filtration/filter_appointments");
var _generate_agenda_view_model = require("./generate_view_model/generate_agenda_view_model");
var _generate_grid_view_model = require("./generate_view_model/generate_grid_view_model");
var _option_manager = require("./generate_view_model/options/option_manager");
var _get_appointment_info = require("./get_appointment_info");
var _prepare_appointments = require("./preparation/prepare_appointments");
class AppointmentLayoutManager {
get filteredItems() {
return this._filteredItems
}
get sortedItems() {
return this._sortedItems
}
constructor(schedulerStore) {
this.schedulerStore = schedulerStore;
this.preparedItems = [];
this._filteredItems = [];
this._sortedItems = []
}
prepareAppointments(items) {
this.preparedItems = (0, _prepare_appointments.prepareAppointments)(this.schedulerStore, items)
}
filterAppointments() {
this._filteredItems = (0, _filter_appointments.filterAppointments)(this.schedulerStore, this.preparedItems)
}
hasAllDayAppointments() {
return this._filteredItems.filter(item => item.isAllDayPanelOccupied).length > 0
}
generateViewModel() {
const viewType = this.schedulerStore.currentView.type;
if ("agenda" === viewType) {
const viewModel = (0, _generate_agenda_view_model.generateAgendaViewModel)(this.schedulerStore, this._filteredItems);
return viewModel.map(item => Object.assign({}, item, {
isAgendaModel: true,
info: (0, _get_appointment_info.getAgendaAppointmentInfo)(item)
}))
}
const optionManager = new _option_manager.OptionManager(this.schedulerStore);
this._sortedItems = (0, _generate_grid_view_model.sortAppointments)(optionManager, this._filteredItems);
const viewModel = (0, _generate_grid_view_model.generateGridViewModel)(this.schedulerStore, optionManager, this._sortedItems);
const isSkipResizing = appointment => appointment.isAllDayPanelOccupied && "day" === viewType && 1 === this.schedulerStore.currentView.intervalCount;
const toCollectedItem = item => ({
itemData: item.itemData,
allDay: item.isAllDayPanelOccupied,
groupIndex: item.groupIndex,
width: item.width,
height: item.height,
info: (0, _get_appointment_info.getAppointmentInfo)(item)
});
return viewModel.map(item => {
if (item.items.length) {
return {
itemData: item.itemData,
allDay: item.isAllDayPanelOccupied,
groupIndex: item.groupIndex,
sortedIndex: item.sortedIndex,
top: item.top,
left: item.left,
width: item.width,
height: item.height,
isCompact: item.isCompact,
items: item.items.map(toCollectedItem)
}
}
return (item => ({
itemData: item.itemData,
allDay: item.isAllDayPanelOccupied,
groupIndex: item.groupIndex,
sortedIndex: item.sortedIndex,
direction: item.direction,
level: item.level,
maxLevel: item.maxLevel,
empty: item.empty,
top: item.top,
left: item.left,
height: item.height,
width: item.width,
reduced: item.reduced,
partIndex: item.partIndex,
partTotalCount: item.partCount,
rowIndex: item.rowIndex,
columnIndex: item.columnIndex,
skipResizing: isSkipResizing(item),
info: (0, _get_appointment_info.getAppointmentInfo)(item)
}))(item)
})
}
}
var _default = exports.default = AppointmentLayoutManager;