devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
99 lines (98 loc) • 3.82 kB
JavaScript
/**
* DevExtreme (esm/__internal/scheduler/view_model/appointments_layout_manager.js)
* Version: 25.2.5
* Build date: Fri Feb 20 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
filterAppointments
} from "./filtration/filter_appointments";
import {
generateAgendaViewModel
} from "./generate_view_model/generate_agenda_view_model";
import {
generateGridViewModel
} from "./generate_view_model/generate_grid_view_model";
import {
getAgendaAppointmentInfo,
getAppointmentInfo
} from "./get_appointment_info";
import {
prepareAppointments
} from "./preparation/prepare_appointments";
class AppointmentLayoutManager {
constructor(schedulerStore) {
this.schedulerStore = schedulerStore;
this.preparedItems = [];
this.filteredItems = []
}
prepareAppointments(items) {
this.preparedItems = prepareAppointments(this.schedulerStore, items)
}
filterAppointments() {
this.filteredItems = 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 = generateAgendaViewModel(this.schedulerStore, this.filteredItems);
return viewModel.map((item => Object.assign({}, item, {
isAgendaModel: true,
info: getAgendaAppointmentInfo(item)
})))
}
const isSkipResizing = appointment => appointment.isAllDayPanelOccupied && "day" === viewType && 1 === this.schedulerStore.currentView.intervalCount;
const viewModel = generateGridViewModel(this.schedulerStore, this.filteredItems);
const toCollectedItem = item => ({
itemData: item.itemData,
allDay: item.isAllDayPanelOccupied,
groupIndex: item.groupIndex,
width: item.width,
height: item.height,
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: getAppointmentInfo(item)
}))(item)
}))
}
}
export default AppointmentLayoutManager;