UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

102 lines (101 loc) 4.32 kB
/** * 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 } }