UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

375 lines (358 loc) • 13.9 kB
/** * DevExtreme (cjs/ui/scheduler/header/header.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"; 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) } exports.SchedulerHeader = void 0; var _renderer = _interopRequireDefault(require("../../../core/renderer")); var _extend = require("../../../core/utils/extend"); var _component_registrator = _interopRequireDefault(require("../../../core/component_registrator")); var _errors = _interopRequireDefault(require("../../../core/errors")); var _devices = _interopRequireDefault(require("../../../core/devices")); var _ui = _interopRequireDefault(require("../../widget/ui.widget")); var _toolbar = _interopRequireDefault(require("../../toolbar")); var _calendar = _interopRequireDefault(require("./calendar")); var _date = _interopRequireDefault(require("../../../core/utils/date")); var _viewSwitcher = require("./viewSwitcher"); var _dateNavigator = require("./dateNavigator"); require("../../../ui/button_group"); require("../../../ui/drop_down_button"); var _utils = require("./utils"); var _views = require("../../../renovation/ui/scheduler/model/views"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 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 _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 _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) } 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) } var DEFAULT_ELEMENT = "defaultElement"; var VIEW_SWITCHER = "viewSwitcher"; var DATE_NAVIGATOR = "dateNavigator"; var COMPONENT_CLASS = "dx-scheduler-header"; var SchedulerHeader = function(_Widget) { _inheritsLoose(SchedulerHeader, _Widget); function SchedulerHeader() { return _Widget.apply(this, arguments) || this } var _proto = SchedulerHeader.prototype; _proto._getDefaultOptions = function() { return (0, _extend.extend)(_Widget.prototype._getDefaultOptions.call(this), { _useShortDateFormat: !_devices.default.real().generic || _devices.default.isSimulator() }) }; _proto._createEventMap = function() { var _this = this; this.eventMap = new Map([ ["currentView", [function(view) { _this.currentView = (0, _views.getCurrentView)((0, _utils.getViewName)(view), _this.option("views")) }]], ["items", [this.repaint.bind(this)]], ["views", [_utils.validateViews]], ["currentDate", [this._getCalendarOptionUpdater("date")]], ["min", [this._getCalendarOptionUpdater("min")]], ["max", [this._getCalendarOptionUpdater("max")]], ["tabIndex", [this.repaint.bind(this)]], ["focusStateEnabled", [this.repaint.bind(this)]], ["useDropDownViewSwitcher", [this.repaint.bind(this)]] ]) }; _proto._addEvent = function(name, event) { if (!this.eventMap.has(name)) { this.eventMap.set(name, []) } var events = this.eventMap.get(name); this.eventMap.set(name, [].concat(_toConsumableArray(events), [event])) }; _proto._optionChanged = function(args) { var name = args.name, value = args.value; if (this.eventMap.has(name)) { var events = this.eventMap.get(name); events.forEach((function(event) { event(value) })) } }; _proto._init = function() { _Widget.prototype._init.call(this); this._createEventMap(); this.$element().addClass(COMPONENT_CLASS); this.currentView = (0, _views.getCurrentView)((0, _utils.getViewName)(this.option("currentView")), this.option("views")) }; _proto._render = function() { _Widget.prototype._render.call(this); this._createEventMap(); this._renderToolbar() }; _proto._renderToolbar = function() { var config = this._createToolbarConfig(); var toolbarElement = (0, _renderer.default)("<div>"); toolbarElement.appendTo(this.$element()); this._toolbar = this._createComponent(toolbarElement, _toolbar.default, config) }; _proto._createToolbarConfig = function() { var _this2 = this; var items = this.option("items"); var parsedItems = items.map((function(element) { return _this2._parseItem(element) })); return { items: parsedItems } }; _proto._parseItem = function(item) { var isDefaultElement = this._isDefaultItem(item); if (isDefaultElement) { var defaultElementType = item[DEFAULT_ELEMENT]; switch (defaultElementType) { case VIEW_SWITCHER: if (this.option("useDropDownViewSwitcher")) { return (0, _viewSwitcher.getDropDownViewSwitcher)(this, item) } return (0, _viewSwitcher.getViewSwitcher)(this, item); case DATE_NAVIGATOR: this._renderCalendar(); return (0, _dateNavigator.getDateNavigator)(this, item); default: _errors.default.log("Unknown default element type: ".concat(defaultElementType)) } } return item }; _proto._callEvent = function(event, arg) { if (this.eventMap.has(event)) { var events = this.eventMap.get(event); events.forEach((function(event) { return event(arg) })) } }; _proto._updateCurrentView = function(view) { var onCurrentViewChange = this.option("onCurrentViewChange"); onCurrentViewChange(view.name); this._callEvent("currentView", view) }; _proto._updateCurrentDate = function(date) { var onCurrentDateChange = this.option("onCurrentDateChange"); onCurrentDateChange(date); this._callEvent("currentDate", date) }; _proto._renderCalendar = function() { var _this3 = this; this._calendar = this._createComponent("<div>", _calendar.default, { date: this.option("currentDate"), min: this.option("min"), max: this.option("max"), firstDayOfWeek: this.option("firstDayOfWeek"), focusStateEnabled: this.option("focusStateEnabled"), tabIndex: this.option("tabIndex"), onValueChanged: function(e) { var date = e.value; _this3._updateCurrentDate(date); _this3._calendar.hide() } }); this._calendar.$element().appendTo(this.$element()) }; _proto._getCalendarOptionUpdater = function(name) { var _this4 = this; return function(value) { if (_this4._calendar) { _this4._calendar.option(name, value) } } }; _proto._getNextDate = function(direction) { var initialDate = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; var date = initialDate || this.option("currentDate"); var options = _extends({}, this.intervalOptions, { date: date }); return (0, _utils.getNextIntervalDate)(options, direction) }; _proto._isMonth = function() { var currentView = this.currentView; return "month" === (0, _utils.getViewType)(currentView) }; _proto._getDisplayedDate = function() { var startViewDate = this.option("startViewDate"); if (this._isMonth()) { return (0, _utils.nextWeek)(startViewDate) } return new Date(startViewDate) }; _proto._getCaption = function() { var date = this.option("currentDate"); if (this.option("startViewDate")) { date = this._getDisplayedDate() } date = _date.default.trimTime(date); var options = _extends({}, this.intervalOptions, { date: date }); var customizationFunction = this.option("customizeDateNavigatorText"); var useShortDateFormat = this.option("_useShortDateFormat"); return (0, _utils.getCaption)(options, useShortDateFormat, customizationFunction) }; _proto._updateDateByDirection = function(direction) { var date = this._getNextDate(direction); this._updateCurrentDate(date) }; _proto._showCalendar = function(e) { this._calendar.show(e.element) }; _proto._hideCalendar = function() { this._calendar.hide() }; _proto._isDefaultItem = function(item) { return Object.prototype.hasOwnProperty.call(item, DEFAULT_ELEMENT) }; _createClass(SchedulerHeader, [{ key: "views", get: function() { return this.option("views") } }, { key: "captionText", get: function() { return this._getCaption().text } }, { key: "intervalOptions", get: function() { var step = (0, _utils.getStep)(this.currentView); var intervalCount = this.option("intervalCount"); var firstDayOfWeek = this.option("firstDayOfWeek"); var agendaDuration = this.option("agendaDuration"); return { step: step, intervalCount: intervalCount, firstDayOfWeek: firstDayOfWeek, agendaDuration: agendaDuration } } }]); return SchedulerHeader }(_ui.default); exports.SchedulerHeader = SchedulerHeader; (0, _component_registrator.default)("dxSchedulerHeader", SchedulerHeader);