UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

112 lines (111 loc) 4.26 kB
/** * DevExtreme (esm/__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/ */ import { filterAppointments } from "./filtration/filter_appointments"; import { generateAgendaViewModel } from "./generate_view_model/generate_agenda_view_model"; import { generateGridViewModel, sortAppointments } from "./generate_view_model/generate_grid_view_model"; import { OptionManager } from "./generate_view_model/options/option_manager"; import { getAgendaAppointmentInfo, getAppointmentInfo } from "./get_appointment_info"; import { prepareAppointments } from "./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 = 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 optionManager = new OptionManager(this.schedulerStore); this._sortedItems = sortAppointments(optionManager, this._filteredItems); const viewModel = 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: 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;