UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

322 lines (311 loc) • 14.1 kB
/** * DevExtreme (cjs/ui/scheduler/workspaces/ui.scheduler.work_space.indicator.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 _uiScheduler = _interopRequireDefault(require("./ui.scheduler.work_space")); var _component_registrator = _interopRequireDefault(require("../../../core/component_registrator")); var _date = _interopRequireDefault(require("../../../core/utils/date")); var _extend = require("../../../core/utils/extend"); var _position = require("../../../core/utils/position"); var _window = require("../../../core/utils/window"); var _classes = require("../classes"); var _base = require("../../../renovation/ui/scheduler/view_model/to_test/views/utils/base"); var _utils = _interopRequireDefault(require("../utils.timeZone")); 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 _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 toMs = _date.default.dateToMilliseconds; var SCHEDULER_DATE_TIME_INDICATOR_CLASS = "dx-scheduler-date-time-indicator"; var TIME_PANEL_CURRENT_TIME_CELL_CLASS = "dx-scheduler-time-panel-current-time-cell"; var SchedulerWorkSpaceIndicator = function(_SchedulerWorkSpace) { _inheritsLoose(SchedulerWorkSpaceIndicator, _SchedulerWorkSpace); function SchedulerWorkSpaceIndicator() { return _SchedulerWorkSpace.apply(this, arguments) || this } var _proto = SchedulerWorkSpaceIndicator.prototype; _proto._getToday = function() { return (0, _base.getToday)(this.option("indicatorTime"), this.timeZoneCalculator) }; _proto.isIndicationOnView = function() { if (this.option("showCurrentTimeIndicator")) { var today = this._getToday(); var endViewDate = _date.default.trimTime(this.getEndViewDate()); return _date.default.dateInRange(today, this.getStartViewDate(), new Date(endViewDate.getTime() + toMs("day"))) } return false }; _proto.isIndicationAvailable = function() { if (!(0, _window.hasWindow)()) { return false } var today = this._getToday(); return today >= _date.default.trimTime(new Date(this.getStartViewDate())) }; _proto.isIndicatorVisible = function() { var today = this._getToday(); var endViewDate = new Date(this.getEndViewDate().getTime() + toMs("minute") - 1); var firstViewDate = new Date(this.getStartViewDate()); firstViewDate.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()); endViewDate.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()); return _date.default.dateInRange(today, firstViewDate, endViewDate) }; _proto._renderDateTimeIndication = function() { if (this.isIndicationAvailable()) { if (this.option("shadeUntilCurrentTime")) { this._shader.render() } if (this.isIndicationOnView() && this.isIndicatorVisible()) { var groupCount = this._getGroupCount() || 1; var $container = this._dateTableScrollable.$content(); var height = this.getIndicationHeight(); var rtlOffset = this._getRtlOffset(this.getCellWidth()); this._renderIndicator(height, rtlOffset, $container, groupCount); this._setCurrentTimeCells() } } }; _proto._renderIndicator = function(height, rtlOffset, $container, groupCount) { var groupedByDate = this.isGroupedByDate(); var repeatCount = groupedByDate ? 1 : groupCount; for (var i = 0; i < repeatCount; i++) { var $indicator = this._createIndicator($container); (0, _size.setWidth)($indicator, groupedByDate ? this.getCellWidth() * groupCount : this.getCellWidth()); this._groupedStrategy.shiftIndicator($indicator, height, rtlOffset, i) } }; _proto._createIndicator = function($container) { var $indicator = (0, _renderer.default)("<div>").addClass(SCHEDULER_DATE_TIME_INDICATOR_CLASS); $container.append($indicator); return $indicator }; _proto._getRtlOffset = function(width) { return this.option("rtlEnabled") ? (0, _position.getBoundingRect)(this._dateTableScrollable.$content().get(0)).width - this.getTimePanelWidth() - width : 0 }; _proto._setIndicationUpdateInterval = function() { if (!this.option("showCurrentTimeIndicator") || 0 === this.option("indicatorUpdateInterval")) { return } this._clearIndicatorUpdateInterval(); this._indicatorInterval = setInterval(function() { this._refreshDateTimeIndication() }.bind(this), this.option("indicatorUpdateInterval")) }; _proto._clearIndicatorUpdateInterval = function() { if (this._indicatorInterval) { clearInterval(this._indicatorInterval); delete this._indicatorInterval } }; _proto._isVerticalShader = function() { return true }; _proto.getIndicationWidth = function(groupIndex) { var maxWidth = this.getCellWidth() * this._getCellCount(); var difference = this._getIndicatorDuration(); if (difference > this._getCellCount()) { difference = this._getCellCount() } var width = difference * this.getRoundedCellWidth(groupIndex, groupIndex * this._getCellCount(), difference); return maxWidth < width ? maxWidth : width }; _proto.getIndicatorOffset = function(groupIndex) { var difference = this._getIndicatorDuration() - 1; var offset = difference * this.getRoundedCellWidth(groupIndex, groupIndex * this._getCellCount(), difference); return offset }; _proto._getIndicatorDuration = function() { var today = this._getToday(); var firstViewDate = new Date(this.getStartViewDate()); var timeDiff = today.getTime() - firstViewDate.getTime(); if ("workWeek" === this.option("type")) { timeDiff -= this._getWeekendsCount(Math.round(timeDiff / toMs("day"))) * toMs("day") } return Math.ceil((timeDiff + 1) / toMs("day")) }; _proto.getIndicationHeight = function() { var today = _utils.default.getDateWithoutTimezoneChange(this._getToday()); var cellHeight = this.getCellHeight(); var date = new Date(this.getStartViewDate()); if (this.isIndicationOnView()) { date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()) } var duration = today.getTime() - date.getTime(); var cellCount = duration / this.getCellDuration(); return cellCount * cellHeight }; _proto._dispose = function() { this._clearIndicatorUpdateInterval(); _SchedulerWorkSpace.prototype._dispose.apply(this, arguments) }; _proto._refreshDateTimeIndication = function() { var _this$_shader; this._cleanDateTimeIndicator(); this._cleanCurrentTimeCells(); null === (_this$_shader = this._shader) || void 0 === _this$_shader ? void 0 : _this$_shader.clean(); this._renderDateTimeIndication() }; _proto._setCurrentTimeCells = function() { var timePanelCells = this._getTimePanelCells(); var currentTimeCellIndices = this._getCurrentTimePanelCellIndices(); currentTimeCellIndices.forEach((function(timePanelCellIndex) { timePanelCells.eq(timePanelCellIndex).addClass(TIME_PANEL_CURRENT_TIME_CELL_CLASS) })) }; _proto._isCurrentTimeHeaderCell = function(headerIndex) { if (this.isIndicationOnView()) { var completeDateHeaderMap = this.viewDataProvider.completeDateHeaderMap; var date = completeDateHeaderMap[completeDateHeaderMap.length - 1][headerIndex].startDate; return _date.default.sameDate(date, this._getToday()) } return false }; _proto._getHeaderPanelCellClass = function(i) { var cellClass = _SchedulerWorkSpace.prototype._getHeaderPanelCellClass.call(this, i); if (this._isCurrentTimeHeaderCell(i)) { return cellClass + " " + _classes.HEADER_CURRENT_TIME_CELL_CLASS } return cellClass }; _proto._cleanView = function() { _SchedulerWorkSpace.prototype._cleanView.call(this); this._cleanDateTimeIndicator() }; _proto._dimensionChanged = function() { _SchedulerWorkSpace.prototype._dimensionChanged.call(this); this._refreshDateTimeIndication() }; _proto._cleanDateTimeIndicator = function() { this.$element().find("." + SCHEDULER_DATE_TIME_INDICATOR_CLASS).remove() }; _proto._cleanCurrentTimeCells = function() { this.$element().find(".".concat(TIME_PANEL_CURRENT_TIME_CELL_CLASS)).removeClass(TIME_PANEL_CURRENT_TIME_CELL_CLASS) }; _proto._cleanWorkSpace = function() { _SchedulerWorkSpace.prototype._cleanWorkSpace.call(this); this._renderDateTimeIndication(); this._setIndicationUpdateInterval() }; _proto._optionChanged = function(args) { switch (args.name) { case "showCurrentTimeIndicator": case "indicatorTime": this._cleanWorkSpace(); break; case "indicatorUpdateInterval": this._setIndicationUpdateInterval(); break; case "showAllDayPanel": case "allDayExpanded": case "crossScrollingEnabled": _SchedulerWorkSpace.prototype._optionChanged.call(this, args); this._refreshDateTimeIndication(); break; case "shadeUntilCurrentTime": this._refreshDateTimeIndication(); break; default: _SchedulerWorkSpace.prototype._optionChanged.call(this, args) } }; _proto._getDefaultOptions = function() { return (0, _extend.extend)(_SchedulerWorkSpace.prototype._getDefaultOptions.call(this), { showCurrentTimeIndicator: true, indicatorTime: new Date, indicatorUpdateInterval: 5 * toMs("minute"), shadeUntilCurrentTime: true }) }; _proto._getCurrentTimePanelCellIndices = function() { var rowCountPerGroup = this._getTimePanelRowCount(); var today = this._getToday(); var index = this.getCellIndexByDate(today); var _this$_getCellCoordin = this._getCellCoordinatesByIndex(index), currentTimeRowIndex = _this$_getCellCoordin.rowIndex; if (void 0 === currentTimeRowIndex) { return [] } var cellIndices; if (0 === currentTimeRowIndex) { cellIndices = [currentTimeRowIndex] } else { cellIndices = currentTimeRowIndex % 2 === 0 ? [currentTimeRowIndex - 1, currentTimeRowIndex] : [currentTimeRowIndex, currentTimeRowIndex + 1] } var verticalGroupCount = this._isVerticalGroupedWorkSpace() ? this._getGroupCount() : 1; return _toConsumableArray(new Array(verticalGroupCount)).reduce((function(currentIndices, _, groupIndex) { return [].concat(_toConsumableArray(currentIndices), _toConsumableArray(cellIndices.map((function(cellIndex) { return rowCountPerGroup * groupIndex + cellIndex })))) }), []) }; return SchedulerWorkSpaceIndicator }(_uiScheduler.default); (0, _component_registrator.default)("dxSchedulerWorkSpace", SchedulerWorkSpaceIndicator); var _default = SchedulerWorkSpaceIndicator; exports.default = _default; module.exports = exports.default; module.exports.default = exports.default;