UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

99 lines (98 loc) 3.82 kB
/** * 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;