devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
1,057 lines (1,043 loc) • 120 kB
JavaScript
/**
* 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() {