UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

1,057 lines (1,043 loc) • 120 kB
/** * DevExtreme (cjs/ui/scheduler/workspaces/ui.scheduler.work_space.js) * Version: 21.2.4 * Build date: Mon Dec 06 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; exports.default = void 0; var _size = require("../../../core/utils/size"); var _renderer = _interopRequireDefault(require("../../../core/renderer")); var _dom_adapter = _interopRequireDefault(require("../../../core/dom_adapter")); var _events_engine = _interopRequireDefault(require("../../../events/core/events_engine")); var _date = _interopRequireDefault(require("../../../core/utils/date")); var _window = require("../../../core/utils/window"); var _element = require("../../../core/element"); var _extend = require("../../../core/utils/extend"); var _position = require("../../../core/utils/position"); var _message = _interopRequireDefault(require("../../../localization/message")); var _common = require("../../../core/utils/common"); var _type = require("../../../core/utils/type"); var _index = require("../../../events/utils/index"); var _pointer = _interopRequireDefault(require("../../../events/pointer")); var _ui = _interopRequireDefault(require("../../widget/ui.errors")); var _click = require("../../../events/click"); var _contextmenu = require("../../../events/contextmenu"); var _drag = require("../../../events/drag"); var _ui2 = _interopRequireDefault(require("../../scroll_view/ui.scrollable")); var _uiSchedulerWork_spaceGroupedStrategy = _interopRequireDefault(require("./ui.scheduler.work_space.grouped.strategy.horizontal")); var _uiSchedulerWork_spaceGroupedStrategy2 = _interopRequireDefault(require("./ui.scheduler.work_space.grouped.strategy.vertical")); var _table_creator = _interopRequireDefault(require("../table_creator")); var _uiSchedulerCurrent_time_shader = _interopRequireDefault(require("../shaders/ui.scheduler.current_time_shader.vertical")); var _appointmentDragBehavior = _interopRequireDefault(require("../appointmentDragBehavior")); var _constants = require("../constants"); var _classes = require("../classes"); var _widgetObserver = _interopRequireDefault(require("../base/widgetObserver")); var _translator = require("../../../animation/translator"); var _uiScheduler = require("./ui.scheduler.virtual_scrolling"); var _view_data_provider = _interopRequireDefault(require("./view_model/view_data_provider")); var _layout = _interopRequireDefault(require("../../../renovation/ui/scheduler/workspaces/base/date_table/layout.j")); var _layout2 = _interopRequireDefault(require("../../../renovation/ui/scheduler/workspaces/base/date_table/all_day_panel/layout.j")); var _title = _interopRequireDefault(require("../../../renovation/ui/scheduler/workspaces/base/date_table/all_day_panel/title.j")); var _layout3 = _interopRequireDefault(require("../../../renovation/ui/scheduler/workspaces/base/time_panel/layout.j")); var _group_panel = _interopRequireDefault(require("../../../renovation/ui/scheduler/workspaces/base/group_panel/group_panel.j")); var _layout4 = _interopRequireDefault(require("../../../renovation/ui/scheduler/workspaces/base/header_panel/layout.j")); var _cells_selection_state = _interopRequireDefault(require("./cells_selection_state")); var _cache = require("./cache"); var _cells_selection_controller = require("./cells_selection_controller"); var _base = require("../../../renovation/ui/scheduler/view_model/to_test/views/utils/base"); var _utils = require("../resources/utils"); var _semaphore = require("../../../renovation/ui/scheduler/semaphore"); var _positionHelper = require("./helpers/positionHelper"); var _utils2 = require("../utils"); var _data = require("../../../core/utils/data"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread() } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") } function _unsupportedIterableToArray(o, minLen) { if (!o) { return } if ("string" === typeof o) { return _arrayLikeToArray(o, minLen) } var n = Object.prototype.toString.call(o).slice(8, -1); if ("Object" === n && o.constructor) { n = o.constructor.name } if ("Map" === n || "Set" === n) { return Array.from(o) } if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) { return _arrayLikeToArray(o, minLen) } } function _iterableToArray(iter) { if ("undefined" !== typeof Symbol && null != iter[Symbol.iterator] || null != iter["@@iterator"]) { return Array.from(iter) } } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { return _arrayLikeToArray(arr) } } function _arrayLikeToArray(arr, len) { if (null == len || len > arr.length) { len = arr.length } for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i] } return arr2 } function _extends() { _extends = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key] } } } return target }; return _extends.apply(this, arguments) } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true } Object.defineProperty(target, descriptor.key, descriptor) } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) { _defineProperties(Constructor.prototype, protoProps) } if (staticProps) { _defineProperties(Constructor, staticProps) } return Constructor } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass) } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function(o, p) { o.__proto__ = p; return o }; return _setPrototypeOf(o, p) } var tableCreator = _table_creator.default.tableCreator; var abstract = _widgetObserver.default.abstract; var toMs = _date.default.dateToMilliseconds; var COMPONENT_CLASS = "dx-scheduler-work-space"; var GROUPED_WORKSPACE_CLASS = "dx-scheduler-work-space-grouped"; var VERTICAL_GROUPED_WORKSPACE_CLASS = "dx-scheduler-work-space-vertical-grouped"; var WORKSPACE_VERTICAL_GROUP_TABLE_CLASS = "dx-scheduler-work-space-vertical-group-table"; var WORKSPACE_WITH_BOTH_SCROLLS_CLASS = "dx-scheduler-work-space-both-scrollbar"; var WORKSPACE_WITH_COUNT_CLASS = "dx-scheduler-work-space-count"; var WORKSPACE_WITH_GROUP_BY_DATE_CLASS = "dx-scheduler-work-space-group-by-date"; var WORKSPACE_WITH_ODD_CELLS_CLASS = "dx-scheduler-work-space-odd-cells"; var TIME_PANEL_CELL_CLASS = "dx-scheduler-time-panel-cell"; var TIME_PANEL_ROW_CLASS = "dx-scheduler-time-panel-row"; var ALL_DAY_PANEL_CLASS = "dx-scheduler-all-day-panel"; var ALL_DAY_TABLE_CLASS = "dx-scheduler-all-day-table"; var ALL_DAY_CONTAINER_CLASS = "dx-scheduler-all-day-appointments"; var ALL_DAY_TITLE_CLASS = "dx-scheduler-all-day-title"; var ALL_DAY_TABLE_CELL_CLASS = "dx-scheduler-all-day-table-cell"; var ALL_DAY_TABLE_ROW_CLASS = "dx-scheduler-all-day-table-row"; var WORKSPACE_WITH_ALL_DAY_CLASS = "dx-scheduler-work-space-all-day"; var WORKSPACE_WITH_COLLAPSED_ALL_DAY_CLASS = "dx-scheduler-work-space-all-day-collapsed"; var WORKSPACE_WITH_MOUSE_SELECTION_CLASS = "dx-scheduler-work-space-mouse-selection"; var HORIZONTAL_SIZES_CLASS = "dx-scheduler-cell-sizes-horizontal"; var VERTICAL_SIZES_CLASS = "dx-scheduler-cell-sizes-vertical"; var HEADER_PANEL_CLASS = "dx-scheduler-header-panel"; var HEADER_PANEL_CELL_CLASS = "dx-scheduler-header-panel-cell"; var HEADER_ROW_CLASS = "dx-scheduler-header-row"; var GROUP_HEADER_CLASS = "dx-scheduler-group-header"; var DATE_TABLE_CELL_CLASS = "dx-scheduler-date-table-cell"; var DATE_TABLE_FOCUSED_CELL_CLASS = "dx-scheduler-focused-cell"; var VIRTUAL_ROW_CLASS = "dx-scheduler-virtual-row"; var DATE_TABLE_DROPPABLE_CELL_CLASS = "dx-scheduler-date-table-droppable-cell"; var SCHEDULER_HEADER_SCROLLABLE_CLASS = "dx-scheduler-header-scrollable"; var SCHEDULER_SIDEBAR_SCROLLABLE_CLASS = "dx-scheduler-sidebar-scrollable"; var SCHEDULER_DATE_TABLE_SCROLLABLE_CLASS = "dx-scheduler-date-table-scrollable"; var SCHEDULER_WORKSPACE_DXPOINTERDOWN_EVENT_NAME = (0, _index.addNamespace)(_pointer.default.down, "dxSchedulerWorkSpace"); var DragEventNames = { ENTER: (0, _index.addNamespace)(_drag.enter, "dxSchedulerDateTable"), DROP: (0, _index.addNamespace)(_drag.drop, "dxSchedulerDateTable"), LEAVE: (0, _index.addNamespace)(_drag.leave, "dxSchedulerDateTable") }; var SCHEDULER_CELL_DXCLICK_EVENT_NAME = (0, _index.addNamespace)(_click.name, "dxSchedulerDateTable"); var SCHEDULER_CELL_DXPOINTERDOWN_EVENT_NAME = (0, _index.addNamespace)(_pointer.default.down, "dxSchedulerDateTable"); var SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME = (0, _index.addNamespace)(_pointer.default.up, "dxSchedulerDateTable"); var SCHEDULER_CELL_DXPOINTERMOVE_EVENT_NAME = (0, _index.addNamespace)(_pointer.default.move, "dxSchedulerDateTable"); var CELL_DATA = "dxCellData"; var DATE_TABLE_MIN_CELL_WIDTH = 75; var DAY_MS = toMs("day"); var HOUR_MS = toMs("hour"); var DRAG_AND_DROP_SELECTOR = ".".concat(_classes.DATE_TABLE_CLASS, " td, .").concat(ALL_DAY_TABLE_CLASS, " td"); var CELL_SELECTOR = ".".concat(DATE_TABLE_CELL_CLASS, ", .").concat(ALL_DAY_TABLE_CELL_CLASS); var SchedulerWorkSpace = function(_WidgetObserver) { _inheritsLoose(SchedulerWorkSpace, _WidgetObserver); function SchedulerWorkSpace() { return _WidgetObserver.apply(this, arguments) || this } var _proto = SchedulerWorkSpace.prototype; _proto._supportedKeys = function() { var _this2 = this; var clickHandler = function(e) { var _this = this; e.preventDefault(); e.stopPropagation(); var selectedCells = this.cellsSelectionState.getSelectedCells(); if (null !== selectedCells && void 0 !== selectedCells && selectedCells.length) { var selectedCellsElement = selectedCells.map((function(cellData) { return _this._getCellByData(cellData) })).filter((function(cell) { return !!cell })); e.target = selectedCellsElement; this._showPopup = true; this._cellClickAction({ event: e, cellElement: (0, _renderer.default)(selectedCellsElement), cellData: selectedCells[0] }) } }; var onArrowPressed = function(e, key) { var _this2$cellsSelection; e.preventDefault(); e.stopPropagation(); var focusedCellData = null === (_this2$cellsSelection = _this2.cellsSelectionState.focusedCell) || void 0 === _this2$cellsSelection ? void 0 : _this2$cellsSelection.cellData; if (focusedCellData) { var isAllDayPanelCell = focusedCellData.allDay && !_this2._isVerticalGroupedWorkSpace(); var isMultiSelection = e.shiftKey; var isMultiSelectionAllowed = _this2.option("allowMultipleCellSelection"); var isRTL = _this2._isRTL(); var groupCount = _this2._getGroupCount(); var isGroupedByDate = _this2.isGroupedByDate(); var isHorizontalGrouping = _this2._isHorizontalGroupedWorkSpace(); var focusedCellPosition = _this2.viewDataProvider.findCellPositionInMap(_extends({}, focusedCellData, { isAllDay: focusedCellData.allDay })); var edgeIndices = isHorizontalGrouping && isMultiSelection && !isGroupedByDate ? _this2.viewDataProvider.getGroupEdgeIndices(focusedCellData.groupIndex, isAllDayPanelCell) : _this2.viewDataProvider.getViewEdgeIndices(isAllDayPanelCell); var nextCellData = _this2.cellsSelectionController.handleArrowClick({ focusedCellPosition: focusedCellPosition, edgeIndices: edgeIndices, isRTL: isRTL, isGroupedByDate: isGroupedByDate, groupCount: groupCount, isMultiSelection: isMultiSelection, isMultiSelectionAllowed: isMultiSelectionAllowed, viewType: _this2.type, key: key, getCellDataByPosition: _this2.viewDataProvider.getCellData.bind(_this2.viewDataProvider), isAllDayPanelCell: isAllDayPanelCell, focusedCellData: focusedCellData }); _this2._processNextSelectedCell(nextCellData, focusedCellData, isMultiSelection && isMultiSelectionAllowed) } }; return (0, _extend.extend)(_WidgetObserver.prototype._supportedKeys.call(this), { enter: clickHandler, space: clickHandler, downArrow: function(e) { onArrowPressed(e, "down") }, upArrow: function(e) { onArrowPressed(e, "up") }, rightArrow: function(e) { onArrowPressed(e, "right") }, leftArrow: function(e) { onArrowPressed(e, "left") } }) }; _proto._isRTL = function() { return this.option("rtlEnabled") }; _proto._moveToCell = function($cell, isMultiSelection) { if (!(0, _type.isDefined)($cell) || !$cell.length) { return } var isMultiSelectionAllowed = this.option("allowMultipleCellSelection"); var currentCellData = this._getFullCellData($cell); var focusedCellData = this.cellsSelectionState.focusedCell.cellData; var nextFocusedCellData = this.cellsSelectionController.moveToCell({ isMultiSelection: isMultiSelection, isMultiSelectionAllowed: isMultiSelectionAllowed, currentCellData: currentCellData, focusedCellData: focusedCellData, isVirtualCell: $cell.hasClass(_classes.VIRTUAL_CELL_CLASS) }); this._processNextSelectedCell(nextFocusedCellData, focusedCellData, isMultiSelectionAllowed && isMultiSelection) }; _proto._processNextSelectedCell = function(nextCellData, focusedCellData, isMultiSelection) { var nextCellPosition = this.viewDataProvider.findCellPositionInMap({ startDate: nextCellData.startDate, groupIndex: nextCellData.groupIndex, isAllDay: nextCellData.allDay, index: nextCellData.index }); if (!this.viewDataProvider.isSameCell(focusedCellData, nextCellData)) { var $cell = nextCellData.allDay && !this._isVerticalGroupedWorkSpace() ? this._dom_getAllDayPanelCell(nextCellPosition.columnIndex) : this._dom_getDateCell(nextCellPosition); var isNextCellAllDay = nextCellData.allDay; this._setSelectedCellsStateAndUpdateSelection(isNextCellAllDay, nextCellPosition, isMultiSelection, $cell); this._dateTableScrollable.scrollToElement($cell) } }; _proto._setSelectedCellsStateAndUpdateSelection = function(isAllDay, cellPosition, isMultiSelection, $nextFocusedCell) { var nextCellCoordinates = { rowIndex: cellPosition.rowIndex, columnIndex: cellPosition.columnIndex, allDay: isAllDay }; this.cellsSelectionState.setFocusedCell(nextCellCoordinates.rowIndex, nextCellCoordinates.columnIndex, isAllDay); if (isMultiSelection) { this.cellsSelectionState.setSelectedCells(nextCellCoordinates) } else { this.cellsSelectionState.setSelectedCells(nextCellCoordinates, nextCellCoordinates) } this.updateCellsSelection(); this._updateSelectedCellDataOption(this.cellsSelectionState.getSelectedCells(), $nextFocusedCell) }; _proto._hasAllDayClass = function($cell) { return $cell.hasClass(ALL_DAY_TABLE_CELL_CLASS) }; _proto._focusInHandler = function(e) { if ((0, _renderer.default)(e.target).is(this._focusTarget()) && false !== this._isCellClick) { delete this._isCellClick; delete this._contextMenuHandled; _WidgetObserver.prototype._focusInHandler.apply(this, arguments); this.cellsSelectionState.restoreSelectedAndFocusedCells(); if (!this.cellsSelectionState.focusedCell) { var cellCoordinates = { columnIndex: 0, rowIndex: 0, allDay: this._isVerticalGroupedWorkSpace() && this.isAllDayPanelVisible }; this.cellsSelectionState.setFocusedCell(cellCoordinates.rowIndex, cellCoordinates.columnIndex, cellCoordinates.allDay); this.cellsSelectionState.setSelectedCells(cellCoordinates, cellCoordinates) } this.updateCellsSelection(); this._updateSelectedCellDataOption(this.cellsSelectionState.getSelectedCells()) } }; _proto._focusOutHandler = function() { _WidgetObserver.prototype._focusOutHandler.apply(this, arguments); if (!this._contextMenuHandled && !this._disposed) { this.cellsSelectionState.releaseSelectedAndFocusedCells(); this.viewDataProvider.updateViewData(this.generateRenderOptions()); this.updateCellsSelection() } }; _proto._focusTarget = function() { return this.$element() }; _proto._isVerticalGroupedWorkSpace = function() { return !!this.option("groups").length && "vertical" === this.option("groupOrientation") }; _proto._isHorizontalGroupedWorkSpace = function() { return !!this.option("groups").length && "horizontal" === this.option("groupOrientation") }; _proto._isWorkSpaceWithCount = function() { return this.option("intervalCount") > 1 }; _proto._isWorkspaceWithOddCells = function() { return .5 === this.option("hoursInterval") && !this.isVirtualScrolling() }; _proto._getRealGroupOrientation = function() { return this._isVerticalGroupedWorkSpace() ? "vertical" : "horizontal" }; _proto.createRAllDayPanelElements = function() { this._$allDayPanel = (0, _renderer.default)("<div>"); this._$allDayTitle = (0, _renderer.default)("<div>").appendTo(this._$headerPanelEmptyCell) }; _proto._dateTableScrollableConfig = function() { var _this3 = this; var config = { useKeyboard: false, bounceEnabled: false, updateManually: true, onScroll: function() { var _this3$_groupedStrate; null === (_this3$_groupedStrate = _this3._groupedStrategy.cache) || void 0 === _this3$_groupedStrate ? void 0 : _this3$_groupedStrate.clear() } }; if (this._needCreateCrossScrolling()) { config = (0, _extend.extend)(config, this._createCrossScrollingConfig(config)) } if (this.isVirtualScrolling() && (this.virtualScrollingDispatcher.horizontalScrollingAllowed || this.virtualScrollingDispatcher.height)) { var currentOnScroll = config.onScroll; config = _extends({}, config, { onScroll: function(e) { null === currentOnScroll || void 0 === currentOnScroll ? void 0 : currentOnScroll(e); _this3.virtualScrollingDispatcher.handleOnScrollEvent(null === e || void 0 === e ? void 0 : e.scrollOffset) } }) } return config }; _proto._createCrossScrollingConfig = function(currentConfig) { var _this4 = this; var config = {}; config.direction = "both"; var currentOnScroll = currentConfig.onScroll; config.onScroll = function(e) { currentOnScroll(); _this4._dataTableSemaphore.take(); _this4._sideBarSemaphore.isFree() && _this4._sidebarScrollable && _this4._sidebarScrollable.scrollTo({ top: e.scrollOffset.top }); _this4._headerSemaphore.isFree() && _this4._headerScrollable && _this4._headerScrollable.scrollTo({ left: e.scrollOffset.left }); _this4._dataTableSemaphore.release() }; config.onEnd = function() { _this4.option("onScrollEnd")() }; return config }; _proto._headerScrollableConfig = function() { var _this5 = this; var config = { useKeyboard: false, showScrollbar: "never", direction: "horizontal", useNative: false, updateManually: true, bounceEnabled: false, onScroll: function(e) { _this5._headerSemaphore.take(); _this5._dataTableSemaphore.isFree() && _this5._dateTableScrollable.scrollTo({ left: e.scrollOffset.left }); _this5._headerSemaphore.release() } }; return config }; _proto._visibilityChanged = function(visible) { this.cache.clear(); if (visible) { this._updateGroupTableHeight() } if (visible && this._needCreateCrossScrolling()) { this._setTableSizes() } }; _proto._setTableSizes = function() { this.cache.clear(); this._attachTableClasses(); var cellWidth = this.getCellWidth(); if (cellWidth < this.getCellMinWidth()) { cellWidth = this.getCellMinWidth() } var minWidth = this.getWorkSpaceMinWidth(); var groupCount = this._getGroupCount(); var totalCellCount = this._getTotalCellCount(groupCount); var width = cellWidth * totalCellCount; if (width < minWidth) { width = minWidth }(0, _size.setWidth)(this._$headerPanel, width); (0, _size.setWidth)(this._$dateTable, width); if (this._$allDayTable) { (0, _size.setWidth)(this._$allDayTable, width) } this._attachHeaderTableClasses(); this._updateGroupTableHeight(); this._updateScrollable() }; _proto.getWorkSpaceMinWidth = function() { return this._groupedStrategy.getWorkSpaceMinWidth() }; _proto._dimensionChanged = function() { if (this.option("crossScrollingEnabled")) { this._setTableSizes() } this.updateHeaderEmptyCellWidth(); this._updateScrollable(); this.cache.clear() }; _proto._needCreateCrossScrolling = function() { return this.option("crossScrollingEnabled") }; _proto._getElementClass = function() { return (0, _common.noop)() }; _proto._getRowCount = function() { return this.viewDataProvider.getRowCount({ intervalCount: this.option("intervalCount"), currentDate: this.option("currentDate"), viewType: this.type, hoursInterval: this.option("hoursInterval"), startDayHour: this.option("startDayHour"), endDayHour: this.option("endDayHour") }) }; _proto._getCellCount = function() { return this.viewDataProvider.getCellCount({ intervalCount: this.option("intervalCount"), currentDate: this.option("currentDate"), viewType: this.type, hoursInterval: this.option("hoursInterval"), startDayHour: this.option("startDayHour"), endDayHour: this.option("endDayHour") }) }; _proto.isRenovatedRender = function() { return this.renovatedRenderSupported() && this.option("renovateRender") }; _proto._isVirtualModeOn = function() { return "virtual" === this.option("scrolling.mode") }; _proto.isVirtualScrolling = function() { return this.isRenovatedRender() && this._isVirtualModeOn() }; _proto._initVirtualScrolling = function() { if (this.virtualScrollingDispatcher) { this.virtualScrollingDispatcher.dispose(); this.virtualScrollingDispatcher = null } this.virtualScrollingDispatcher = new _uiScheduler.VirtualScrollingDispatcher(this._getVirtualScrollingDispatcherOptions()); this.virtualScrollingDispatcher.attachScrollableEvents(); this.renderer = new _uiScheduler.VirtualScrollingRenderer(this) }; _proto.onDataSourceChanged = function() {}; _proto.isGroupedAllDayPanel = function() { return (0, _base.calculateIsGroupedAllDayPanel)(this.option("groups"), this.option("groupOrientation"), this.isAllDayPanelVisible) }; _proto.generateRenderOptions = function(isProvideVirtualCellsWidth) { var _this$_getToday; var groupCount = this._getGroupCount(); var groupOrientation = groupCount > 0 ? this.option("groupOrientation") : this._getDefaultGroupStrategy(); var options = _extends({ groupByDate: this.option("groupByDate"), startRowIndex: 0, startCellIndex: 0, groupOrientation: groupOrientation, today: null === (_this$_getToday = this._getToday) || void 0 === _this$_getToday ? void 0 : _this$_getToday.call(this), groups: this.option("groups"), isProvideVirtualCellsWidth: isProvideVirtualCellsWidth, isAllDayPanelVisible: this.isAllDayPanelVisible, selectedCells: this.cellsSelectionState.getSelectedCells(), focusedCell: this.cellsSelectionState.focusedCell, headerCellTextFormat: this._getFormat(), getDateForHeaderText: function(_, date) { return date }, startDayHour: this.option("startDayHour"), endDayHour: this.option("endDayHour"), cellDuration: this.getCellDuration(), viewType: this.type, intervalCount: this.option("intervalCount"), hoursInterval: this.option("hoursInterval"), currentDate: this.option("currentDate"), startDate: this.option("startDate"), firstDayOfWeek: this.option("firstDayOfWeek") }, this.virtualScrollingDispatcher.getRenderState()); return options }; _proto.renovatedRenderSupported = function() { return true }; _proto._updateGroupTableHeight = function() { if (this._isVerticalGroupedWorkSpace() && (0, _window.hasWindow)()) { this._setHorizontalGroupHeaderCellsHeight() } }; _proto.updateHeaderEmptyCellWidth = function() { if ((0, _window.hasWindow)() && this._isRenderHeaderPanelEmptyCell()) { var timePanelWidth = this.getTimePanelWidth(); var groupPanelWidth = this.getGroupTableWidth(); this._$headerPanelEmptyCell.css("width", timePanelWidth + groupPanelWidth) } }; _proto._isGroupsSpecified = function(resources) { return this.option("groups").length && resources }; _proto._getGroupIndexByResourceId = function(id) { var groups = this.option("groups"); var resourceTree = (0, _utils.createResourcesTree)(groups); if (!resourceTree.length) { return 0 } return this._getGroupIndexRecursively(resourceTree, id) }; _proto._getGroupIndexRecursively = function(resourceTree, id) { var _this6 = this; var currentKey = resourceTree[0].name; var currentValue = id[currentKey]; return resourceTree.reduce((function(prevIndex, _ref) { var leafIndex = _ref.leafIndex, value = _ref.value, children = _ref.children; var areValuesEqual = currentValue === value; if (areValuesEqual && void 0 !== leafIndex) { return leafIndex } if (areValuesEqual) { return _this6._getGroupIndexRecursively(children, id) } return prevIndex }), 0) }; _proto._getViewStartByOptions = function() { return (0, _base.getViewStartByOptions)(this.option("startDate"), this.option("currentDate"), this._getIntervalDuration(), this.option("startDate") ? this._calculateViewStartDate() : void 0) }; _proto._getIntervalDuration = function() { return this.viewDataProvider.getIntervalDuration(this.option("intervalCount")) }; _proto._getHeaderDate = function() { return this.getStartViewDate() }; _proto._calculateViewStartDate = function() { return (0, _base.calculateViewStartDate)(this.option("startDate")) }; _proto._firstDayOfWeek = function() { return this.viewDataProvider.getFirstDayOfWeek(this.option("firstDayOfWeek")) }; _proto._attachEvents = function() { this._createSelectionChangedAction(); this._attachClickEvent(); this._attachContextMenuEvent() }; _proto._attachClickEvent = function() { var that = this; var pointerDownAction = this._createAction((function(e) { that._pointerDownHandler(e.event) })); this._createCellClickAction(); var cellSelector = "." + DATE_TABLE_CELL_CLASS + ",." + ALL_DAY_TABLE_CELL_CLASS; var $element = this.$element(); _events_engine.default.off($element, SCHEDULER_WORKSPACE_DXPOINTERDOWN_EVENT_NAME); _events_engine.default.off($element, SCHEDULER_CELL_DXCLICK_EVENT_NAME); _events_engine.default.on($element, SCHEDULER_WORKSPACE_DXPOINTERDOWN_EVENT_NAME, (function(e) { if ((0, _index.isMouseEvent)(e) && e.which > 1) { e.preventDefault(); return } pointerDownAction({ event: e }) })); _events_engine.default.on($element, SCHEDULER_CELL_DXCLICK_EVENT_NAME, cellSelector, (function(e) { var $cell = (0, _renderer.default)(e.target); that._cellClickAction({ event: e, cellElement: (0, _element.getPublicElement)($cell), cellData: that.getCellData($cell) }) })) }; _proto._createCellClickAction = function() { var _this7 = this; this._cellClickAction = this._createActionByOption("onCellClick", { afterExecute: function(e) { return _this7._cellClickHandler(e.args[0].event) } }) }; _proto._createSelectionChangedAction = function() { this._selectionChangedAction = this._createActionByOption("onSelectionChanged") }; _proto._cellClickHandler = function() { if (this._showPopup) { delete this._showPopup; this._handleSelectedCellsClick() } }; _proto._pointerDownHandler = function(e) { var $target = (0, _renderer.default)(e.target); if (!$target.hasClass(DATE_TABLE_CELL_CLASS) && !$target.hasClass(ALL_DAY_TABLE_CELL_CLASS)) { this._isCellClick = false; return } this._isCellClick = true; if ($target.hasClass(DATE_TABLE_FOCUSED_CELL_CLASS)) { this._showPopup = true } else { var cellCoordinates = this._getCoordinatesByCell($target); var isAllDayCell = this._hasAllDayClass($target); this._setSelectedCellsStateAndUpdateSelection(isAllDayCell, cellCoordinates, false, $target) } }; _proto._handleSelectedCellsClick = function() { var selectedCells = this.cellsSelectionState.getSelectedCells(); var firstCellData = selectedCells[0]; var lastCellData = selectedCells[selectedCells.length - 1]; var result = { startDate: firstCellData.startDate, endDate: lastCellData.endDate }; if (void 0 !== lastCellData.allDay) { result.allDay = lastCellData.allDay } this.option("onSelectedCellsClick")(result, lastCellData.groups) }; _proto._attachContextMenuEvent = function() { this._createContextMenuAction(); var cellSelector = "." + DATE_TABLE_CELL_CLASS + ",." + ALL_DAY_TABLE_CELL_CLASS; var $element = this.$element(); var eventName = (0, _index.addNamespace)(_contextmenu.name, this.NAME); _events_engine.default.off($element, eventName, cellSelector); _events_engine.default.on($element, eventName, cellSelector, this._contextMenuHandler.bind(this)) }; _proto._contextMenuHandler = function(e) { var $cell = (0, _renderer.default)(e.target); this._contextMenuAction({ event: e, cellElement: (0, _element.getPublicElement)($cell), cellData: this.getCellData($cell) }); this._contextMenuHandled = true }; _proto._createContextMenuAction = function() { this._contextMenuAction = this._createActionByOption("onCellContextMenu") }; _proto._getGroupHeaderContainer = function() { if (this._isVerticalGroupedWorkSpace()) { return this._$groupTable } return this._$thead }; _proto._getDateHeaderContainer = function() { return this._$thead }; _proto._getCalculateHeaderCellRepeatCount = function() { return this._groupedStrategy.calculateHeaderCellRepeatCount() }; _proto._updateScrollable = function() { this._dateTableScrollable.update(); this._headerScrollable && this._headerScrollable.update(); this._sidebarScrollable && this._sidebarScrollable.update() }; _proto._getTimePanelRowCount = function() { return this._getCellCountInDay() }; _proto._getCellCountInDay = function() { var hoursInterval = this.option("hoursInterval"); var startDayHour = this.option("startDayHour"); var endDayHour = this.option("endDayHour"); return this.viewDataProvider.getCellCountInDay(startDayHour, endDayHour, hoursInterval) }; _proto._getTotalCellCount = function(groupCount) { return this._groupedStrategy.getTotalCellCount(groupCount) }; _proto._getTotalRowCount = function(groupCount, includeAllDayPanelRows) { var result = this._groupedStrategy.getTotalRowCount(groupCount); if (includeAllDayPanelRows && this.isAllDayPanelVisible) { result += groupCount } return result }; _proto._getGroupIndex = function(rowIndex, columnIndex) { return this._groupedStrategy.getGroupIndex(rowIndex, columnIndex) }; _proto.calculateEndDate = function(startDate) { var viewDataGenerator = this.viewDataProvider.viewDataGenerator; return viewDataGenerator.calculateEndDate(startDate, viewDataGenerator.getInterval(this.option("hoursInterval")), this.option("endDayHour")) }; _proto._getGroupCount = function() { return (0, _utils.getGroupCount)(this.option("groups")) }; _proto._attachTablesEvents = function() { var element = this.$element(); this._attachDragEvents(element); this._attachPointerEvents(element) }; _proto._detachDragEvents = function(element) { _events_engine.default.off(element, DragEventNames.ENTER); _events_engine.default.off(element, DragEventNames.LEAVE); _events_engine.default.off(element, DragEventNames.DROP) }; _proto._attachDragEvents = function(element) { var _this8 = this; this._detachDragEvents(element); _events_engine.default.on(element, DragEventNames.ENTER, DRAG_AND_DROP_SELECTOR, { checkDropTarget: function(target, event) { return !_this8._isOutsideScrollable(target, event) } }, (function(e) { _this8.removeDroppableCellClass(); (0, _renderer.default)(e.target).addClass(DATE_TABLE_DROPPABLE_CELL_CLASS) })); _events_engine.default.on(element, DragEventNames.LEAVE, (function() { return _this8.removeDroppableCellClass() })); _events_engine.default.on(element, DragEventNames.DROP, DRAG_AND_DROP_SELECTOR, (function() { return _this8.removeDroppableCellClass() })) }; _proto._attachPointerEvents = function(element) { var _this9 = this; var isPointerDown = false; _events_engine.default.off(element, SCHEDULER_CELL_DXPOINTERMOVE_EVENT_NAME); _events_engine.default.off(element, SCHEDULER_CELL_DXPOINTERDOWN_EVENT_NAME); _events_engine.default.on(element, SCHEDULER_CELL_DXPOINTERDOWN_EVENT_NAME, DRAG_AND_DROP_SELECTOR, (function(e) { if ((0, _index.isMouseEvent)(e) && 1 === e.which) { isPointerDown = true; _this9.$element().addClass(WORKSPACE_WITH_MOUSE_SELECTION_CLASS); _events_engine.default.off(_dom_adapter.default.getDocument(), SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME); _events_engine.default.on(_dom_adapter.default.getDocument(), SCHEDULER_CELL_DXPOINTERUP_EVENT_NAME, (function() { isPointerDown = false; _this9.$element().removeClass(WORKSPACE_WITH_MOUSE_SELECTION_CLASS) })) } })); _events_engine.default.on(element, SCHEDULER_CELL_DXPOINTERMOVE_EVENT_NAME, DRAG_AND_DROP_SELECTOR, (function(e) { if (isPointerDown && _this9._dateTableScrollable && !_this9._dateTableScrollable.option("scrollByContent")) { e.preventDefault(); e.stopPropagation(); _this9._moveToCell((0, _renderer.default)(e.target), true) } })) }; _proto._getFormat = function() { return abstract() }; _proto.getWorkArea = function() { return this._$dateTableContainer }; _proto.getScrollable = function() { return this._dateTableScrollable }; _proto.getScrollableScrollTop = function() { return this._dateTableScrollable.scrollTop() }; _proto.getGroupedScrollableScrollTop = function(allDay) { return this._groupedStrategy.getScrollableScrollTop(allDay) }; _proto.getScrollableScrollLeft = function() { return this._dateTableScrollable.scrollLeft() }; _proto.getScrollableOuterWidth = function() { return this._dateTableScrollable.scrollWidth() }; _proto.getScrollableContainer = function() { return (0, _renderer.default)(this._dateTableScrollable.container()) }; _proto.getHeaderPanelHeight = function() { return this._$headerPanel && (0, _size.getOuterHeight)(this._$headerPanel, true) }; _proto.getTimePanelWidth = function() { return this._$timePanel && (0, _position.getBoundingRect)(this._$timePanel.get(0)).width }; _proto.getGroupTableWidth = function() { return this._$groupTable ? (0, _size.getOuterWidth)(this._$groupTable) : 0 }; _proto.getWorkSpaceLeftOffset = function() { return this._groupedStrategy.getLeftOffset() }; _proto._getCellCoordinatesByIndex = function(index) { var columnIndex = Math.floor(index / this._getRowCount()); var rowIndex = index - this._getRowCount() * columnIndex; return { columnIndex: columnIndex, rowIndex: rowIndex } }; _proto._getDateGenerationOptions = function() { var _this$viewDataProvide; return { startDayHour: this.option("startDayHour"), endDayHour: this.option("endDayHour"), isWorkView: this.viewDataProvider.viewDataGenerator.isWorkView, interval: null === (_this$viewDataProvide = this.viewDataProvider.viewDataGenerator) || void 0 === _this$viewDataProvide ? void 0 : _this$viewDataProvide.getInterval(this.option("hoursInterval")), startViewDate: this.getStartViewDate(), firstDayOfWeek: this._firstDayOfWeek() } }; _proto._getIntervalBetween = function(currentDate, allDay) { var firstViewDate = this.getStartViewDate(); var startDayTime = this.option("startDayHour") * HOUR_MS; var timeZoneOffset = _date.default.getTimezonesDifference(firstViewDate, currentDate); var fullInterval = currentDate.getTime() - firstViewDate.getTime() - timeZoneOffset; var days = this._getDaysOfInterval(fullInterval, startDayTime); var weekendsCount = this._getWeekendsCount(days); var result = (days - weekendsCount) * DAY_MS; if (!allDay) { var hiddenInterval = this.viewDataProvider.hiddenInterval; var visibleDayDuration = this.getVisibleDayDuration(); result = fullInterval - days * hiddenInterval - weekendsCount * visibleDayDuration } return result }; _proto._getWeekendsCount = function() { return 0 }; _proto._getDaysOfInterval = function(fullInterval, startDayTime) { return Math.floor((fullInterval + startDayTime) / DAY_MS) }; _proto._updateIndex = function(index) { return index * this._getRowCount() }; _proto._getDroppableCell = function() { return this._getDateTables().find("." + DATE_TABLE_DROPPABLE_CELL_CLASS) }; _proto._getWorkSpaceWidth = function() { var _this10 = this; return this.cache.get("workspaceWidth", (function() { if (_this10._needCreateCrossScrolling()) { return (0, _position.getBoundingRect)(_this10._$dateTable.get(0)).width } var totalWidth = (0, _position.getBoundingRect)(_this10.$element().get(0)).width; var timePanelWidth = _this10.getTimePanelWidth(); var groupTableWidth = _this10.getGroupTableWidth(); return totalWidth - timePanelWidth - groupTableWidth })) }; _proto._getCellByCoordinates = function(cellCoordinates, groupIndex, inAllDayRow) { var indexes = this._groupedStrategy.prepareCellIndexes(cellCoordinates, groupIndex, inAllDayRow); return this._dom_getDateCell(indexes) }; _proto._dom_getDateCell = function(position) { return this._$dateTable.find("tr:not(.".concat(VIRTUAL_ROW_CLASS, ")")).eq(position.rowIndex).find("td:not(.".concat(_classes.VIRTUAL_CELL_CLASS, ")")).eq(position.columnIndex) }; _proto._dom_getAllDayPanelCell = function(columnIndex) { return this._$allDayPanel.find("tr").eq(0).find("td").eq(columnIndex) }; _proto._getCells = function(allDay, direction) { var cellClass = allDay ? ALL_DAY_TABLE_CELL_CLASS : DATE_TABLE_CELL_CLASS; if ("vertical" === direction) { var result = []; for (var i = 1;; i++) { var cells = this.$element().find("tr .".concat(cellClass, ":nth-child(").concat(i, ")")); if (!cells.length) { break } result = result.concat(cells.toArray()) } return (0, _renderer.default)(result) } else { return this.$element().find("." + cellClass) } }; _proto._getAllCells = function(allDay) { if (this._isVerticalGroupedWorkSpace()) { return this._$dateTable.find("td:not(.".concat(_classes.VIRTUAL_CELL_CLASS, ")")) } var cellClass = allDay && this.supportAllDayRow() ? ALL_DAY_TABLE_CELL_CLASS : DATE_TABLE_CELL_CLASS; return this.$element().find(".".concat(cellClass)) }; _proto._setHorizontalGroupHeaderCellsHeight = function() { var height = (0, _position.getBoundingRect)(this._$dateTable.get(0)).height; (0, _size.setOuterHeight)(this._$groupTable, height) }; _proto._getGroupHeaderCells = function() { return this.$element().find("." + GROUP_HEADER_CLASS) }; _proto._getScrollCoordinates = function(hours, minutes, date, groupIndex, allDay) { var currentDate = date || new Date(this.option("currentDate")); var startDayHour = this.option("startDayHour"); var endDayHour = this.option("endDayHour"); if (hours < startDayHour) { hours = startDayHour } if (hours >= endDayHour) { hours = endDayHour - 1 } currentDate.setHours(hours, minutes, 0, 0); var cell = this.viewDataProvider.findGlobalCellPosition(currentDate, groupIndex, allDay); var position = cell.position, cellData = cell.cellData; return this.virtualScrollingDispatcher.calculateCoordinatesByDataAndPosition(cellData, position, currentDate, (0, _base.isDateAndTimeView)(this.type), "vertical" === this.viewDirection) }; _proto._isOutsideScrollable = function(target, event) { var $dateTableScrollableElement = this._dateTableScrollable.$element(); var scrollableSize = (0, _position.getBoundingRect)($dateTableScrollableElement.get(0)); var window = (0, _window.getWindow)(); var isTargetInAllDayPanel = !(0, _renderer.default)(target).closest($dateTableScrollableElement).length; var isOutsideHorizontalScrollable = event.pageX < scrollableSize.left || event.pageX > scrollableSize.left + scrollableSize.width + (window.scrollX || 0); var isOutsideVerticalScrollable = event.pageY < scrollableSize.top || event.pageY > scrollableSize.top + scrollableSize.height + (window.scrollY || 0); if (isTargetInAllDayPanel && !isOutsideHorizontalScrollable) { return false } return isOutsideVerticalScrollable || isOutsideHorizontalScrollable }; _proto.setCellDataCache = function(cellCoordinates, groupIndex, $cell) { var key = JSON.stringify({ rowIndex: cellCoordinates.rowIndex, columnIndex: cellCoordinates.columnIndex, groupIndex: groupIndex }); this.cache.set(key, this.getCellData($cell)) }; _proto.setCellDataCacheAlias = function(appointment, geometry) { var key = JSON.stringify({ rowIndex: appointment.rowIndex, columnIndex: appointment.columnIndex, groupIndex: appointment.groupIndex }); var aliasKey = JSON.stringify({ top: geometry.top, left: geometry.left }); this.cache.set(aliasKey, this.cache.get(key)) }; _proto.supportAllDayRow = function() { return true }; _proto.keepOriginalHours = function() { return false }; _proto._filterCellDataFields = function(cellData) { return (0, _extend.extend)(true, {}, { startDate: cellData.startDate, endDate: cellData.endDate, groups: cellData.groups, groupIndex: cellData.groupIndex, allDay: cellData.allDay }) }; _proto.getCellData = function($cell) { var cellData = this._getFullCellData($cell) || {}; return this._filterCellDataFields(cellData) }; _proto._getFullCellData = function($cell) { var currentCell = $cell[0]; if (currentCell) { return this._getDataByCell($cell) } return }; _proto._getVirtualRowOffset = function() { return this.virtualScrollingDispatcher.virtualRowOffset }; _proto._getVirtualCellOffset = function() { return this.virtualScrollingDispatcher.virtualCellOffset }; _proto._getDataByCell = function($cell) { var rowIndex = $cell.parent().index() - this.virtualScrollingDispatcher.topVirtualRowsCount; var columnIndex = $cell.index() - this.virtualScrollingDispatcher.leftVirtualCellsCount; var viewDataProvider = this.viewDataProvider; var isAllDayCell = this._hasAllDayClass($cell); var cellData = viewDataProvider.getCellData(rowIndex, columnIndex, isAllDayCell); return cellData ? cellData : void 0 }; _proto.isGroupedByDate = function() {