UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

350 lines (340 loc) • 13.2 kB
/** * DevExtreme (cjs/ui/scheduler/workspaces/helpers/positionHelper.js) * Version: 22.1.9 * Build date: Tue Apr 18 2023 * * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; exports.getMaxAllowedPosition = exports.getGroupWidth = exports.getCellWidth = exports.getCellHeight = exports.getAllDayHeight = exports.PositionHelper = void 0; function _typeof(obj) { return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) { return typeof obj } : function(obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj }, _typeof(obj) } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass) } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(o, p) { o.__proto__ = p; return o }; return _setPrototypeOf(o, p) } function _extends() { _extends = Object.assign ? Object.assign.bind() : 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, _toPropertyKey(descriptor.key), descriptor) } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) { _defineProperties(Constructor.prototype, protoProps) } if (staticProps) { _defineProperties(Constructor, staticProps) } Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return "symbol" === _typeof(key) ? key : String(key) } function _toPrimitive(input, hint) { if ("object" !== _typeof(input) || null === input) { return input } var prim = input[Symbol.toPrimitive]; if (void 0 !== prim) { var res = prim.call(input, hint || "default"); if ("object" !== _typeof(res)) { return res } throw new TypeError("@@toPrimitive must return a primitive value.") } return ("string" === hint ? String : Number)(input) } var getCellSize = function(DOMMetaData) { var dateTableCellsMeta = DOMMetaData.dateTableCellsMeta; var length = null === dateTableCellsMeta || void 0 === dateTableCellsMeta ? void 0 : dateTableCellsMeta.length; if (!length) { return { width: 0, height: 0 } } var cellIndex = length > 1 ? 1 : 0; var cellSize = dateTableCellsMeta[cellIndex][0]; return { width: cellSize.width, height: cellSize.height } }; var getMaxAllowedHorizontalPosition = function(groupIndex, viewDataProvider, rtlEnabled, DOMMetaData) { var dateTableCellsMeta = DOMMetaData.dateTableCellsMeta; var firstRow = dateTableCellsMeta[0]; if (!firstRow) { return 0 } var _viewDataProvider$get = viewDataProvider.getLastGroupCellPosition(groupIndex), columnIndex = _viewDataProvider$get.columnIndex; var cellPosition = firstRow[columnIndex]; if (!cellPosition) { return 0 } return !rtlEnabled ? cellPosition.left + cellPosition.width : cellPosition.left }; var getCellHeight = function(DOMMetaData) { return getCellSize(DOMMetaData).height }; exports.getCellHeight = getCellHeight; var getCellWidth = function(DOMMetaData) { return getCellSize(DOMMetaData).width }; exports.getCellWidth = getCellWidth; var getAllDayHeight = function(showAllDayPanel, isVerticalGrouping, DOMMetaData) { if (!showAllDayPanel) { return 0 } if (isVerticalGrouping) { var dateTableCellsMeta = DOMMetaData.dateTableCellsMeta; var length = null === dateTableCellsMeta || void 0 === dateTableCellsMeta ? void 0 : dateTableCellsMeta.length; return length ? dateTableCellsMeta[0][0].height : 0 } var allDayPanelCellsMeta = DOMMetaData.allDayPanelCellsMeta; return null !== allDayPanelCellsMeta && void 0 !== allDayPanelCellsMeta && allDayPanelCellsMeta.length ? allDayPanelCellsMeta[0].height : 0 }; exports.getAllDayHeight = getAllDayHeight; var getMaxAllowedPosition = function(groupIndex, viewDataProvider, rtlEnabled, DOMMetaData) { var validGroupIndex = groupIndex || 0; return getMaxAllowedHorizontalPosition(validGroupIndex, viewDataProvider, rtlEnabled, DOMMetaData) }; exports.getMaxAllowedPosition = getMaxAllowedPosition; var getGroupWidth = function(groupIndex, viewDataProvider, options) { var isVirtualScrolling = options.isVirtualScrolling, rtlEnabled = options.rtlEnabled, DOMMetaData = options.DOMMetaData; var cellWidth = getCellWidth(DOMMetaData); var result = viewDataProvider.getCellCount(options) * cellWidth; if (isVirtualScrolling) { var groupedData = viewDataProvider.groupedDataMap.dateTableGroupedMap; var groupLength = groupedData[groupIndex][0].length; result = groupLength * cellWidth } var position = getMaxAllowedPosition(groupIndex, viewDataProvider, rtlEnabled, DOMMetaData); var currentPosition = position[groupIndex]; if (currentPosition) { if (rtlEnabled) { result = currentPosition - position[groupIndex + 1] } else if (0 === groupIndex) { result = currentPosition } else { result = currentPosition - position[groupIndex - 1] } } return result }; exports.getGroupWidth = getGroupWidth; var PositionHelper = function() { function PositionHelper(options) { this.options = options; this.groupStrategy = this.options.isVerticalGrouping ? new GroupStrategyBase(this.options) : new GroupStrategyHorizontal(this.options) } var _proto = PositionHelper.prototype; _proto.getHorizontalMax = function(groupIndex) { var _this = this; var getMaxPosition = function(groupIndex) { return getMaxAllowedPosition(groupIndex, _this.viewDataProvider, _this.rtlEnabled, _this.DOMMetaData) }; if (this.isGroupedByDate) { var viewPortGroupCount = this.viewDataProvider.getViewPortGroupCount(); return Math.max(getMaxPosition(groupIndex), getMaxPosition(viewPortGroupCount - 1)) } return getMaxPosition(groupIndex) }; _proto.getResizableStep = function() { var cellWidth = getCellWidth(this.DOMMetaData); if (this.isGroupedByDate) { return this.groupCount * cellWidth } return cellWidth }; _proto.getVerticalMax = function(options) { return this.groupStrategy.getVerticalMax(options) }; _proto.getOffsetByAllDayPanel = function(options) { return this.groupStrategy.getOffsetByAllDayPanel(options) }; _proto.getGroupTop = function(options) { return this.groupStrategy.getGroupTop(options) }; _createClass(PositionHelper, [{ key: "viewDataProvider", get: function() { return this.options.viewDataProvider } }, { key: "rtlEnabled", get: function() { return this.options.rtlEnabled } }, { key: "isGroupedByDate", get: function() { return this.options.isGroupedByDate } }, { key: "groupCount", get: function() { return this.options.groupCount } }, { key: "DOMMetaData", get: function() { return this.options.getDOMMetaDataCallback() } }]); return PositionHelper }(); exports.PositionHelper = PositionHelper; var GroupStrategyBase = function() { function GroupStrategyBase(options) { this.options = options } var _proto2 = GroupStrategyBase.prototype; _proto2.getOffsetByAllDayPanel = function(_ref) { var groupIndex = _ref.groupIndex, supportAllDayRow = _ref.supportAllDayRow, showAllDayPanel = _ref.showAllDayPanel; var result = 0; if (supportAllDayRow && showAllDayPanel) { var allDayPanelHeight = getAllDayHeight(showAllDayPanel, true, this.DOMMetaData); result = allDayPanelHeight * (groupIndex + 1) } return result }; _proto2.getVerticalMax = function(options) { var maxAllowedPosition = this._getMaxAllowedVerticalPosition(_extends({}, options, { viewDataProvider: this.viewDataProvider, rtlEnabled: this.rtlEnabled, DOMMetaData: this.DOMMetaData })); maxAllowedPosition += this.getOffsetByAllDayPanel(options); return maxAllowedPosition }; _proto2.getGroupTop = function(_ref2) { var groupIndex = _ref2.groupIndex, showAllDayPanel = _ref2.showAllDayPanel, isGroupedAllDayPanel = _ref2.isGroupedAllDayPanel; var rowCount = this.viewDataProvider.getRowCountInGroup(groupIndex); var maxVerticalPosition = this._getMaxAllowedVerticalPosition({ groupIndex: groupIndex, viewDataProvider: this.viewDataProvider, showAllDayPanel: showAllDayPanel, isGroupedAllDayPanel: isGroupedAllDayPanel, isVerticalGrouping: true, DOMMetaData: this.DOMMetaData }); return maxVerticalPosition - getCellHeight(this.DOMMetaData) * rowCount }; _proto2._getAllDayHeight = function(showAllDayPanel) { return getAllDayHeight(showAllDayPanel, true, this.DOMMetaData) }; _proto2._getMaxAllowedVerticalPosition = function(_ref3) { var groupIndex = _ref3.groupIndex, showAllDayPanel = _ref3.showAllDayPanel, isGroupedAllDayPanel = _ref3.isGroupedAllDayPanel; var _this$viewDataProvide = this.viewDataProvider.getLastGroupCellPosition(groupIndex), rowIndex = _this$viewDataProvide.rowIndex; var dateTableCellsMeta = this.DOMMetaData.dateTableCellsMeta; var lastGroupRow = dateTableCellsMeta[rowIndex]; if (!lastGroupRow) { return 0 } var result = lastGroupRow[0].top + lastGroupRow[0].height; if (isGroupedAllDayPanel) { result -= (groupIndex + 1) * this._getAllDayHeight(showAllDayPanel) } return result }; _createClass(GroupStrategyBase, [{ key: "viewDataProvider", get: function() { return this.options.viewDataProvider } }, { key: "isGroupedByDate", get: function() { return this.options.isGroupedByDate } }, { key: "rtlEnabled", get: function() { return this.options.rtlEnabled } }, { key: "groupCount", get: function() { return this.options.groupCount } }, { key: "DOMMetaData", get: function() { return this.options.getDOMMetaDataCallback() } }]); return GroupStrategyBase }(); var GroupStrategyHorizontal = function(_GroupStrategyBase) { _inheritsLoose(GroupStrategyHorizontal, _GroupStrategyBase); function GroupStrategyHorizontal() { return _GroupStrategyBase.apply(this, arguments) || this } var _proto3 = GroupStrategyHorizontal.prototype; _proto3.getOffsetByAllDayPanel = function(options) { return 0 }; _proto3.getVerticalMax = function(options) { var isVirtualScrolling = options.isVirtualScrolling, groupIndex = options.groupIndex; var correctedGroupIndex = isVirtualScrolling ? groupIndex : 0; return this._getMaxAllowedVerticalPosition(_extends({}, options, { groupIndex: correctedGroupIndex })) }; _proto3.getGroupTop = function(options) { return 0 }; _proto3._getAllDayHeight = function(showAllDayPanel) { return getAllDayHeight(showAllDayPanel, false, this.DOMMetaData) }; return GroupStrategyHorizontal }(GroupStrategyBase);