| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761 |
- /**
- * DevExtreme (ui/scheduler/ui.scheduler.recurrence_editor.js)
- * Version: 19.1.16
- * Build date: Tue Oct 18 2022
- *
- * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
- * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
- */
- "use strict";
- var _renderer = require("../../core/renderer");
- var _renderer2 = _interopRequireDefault(_renderer);
- var _guid = require("../../core/guid");
- var _guid2 = _interopRequireDefault(_guid);
- var _component_registrator = require("../../core/component_registrator");
- var _component_registrator2 = _interopRequireDefault(_component_registrator);
- var _utils = require("./utils.recurrence");
- var _utils2 = _interopRequireDefault(_utils);
- var _dom = require("../../core/utils/dom");
- var _dom2 = _interopRequireDefault(_dom);
- var _type = require("../../core/utils/type");
- var _extend = require("../../core/utils/extend");
- var _array = require("../../core/utils/array");
- var _iterator = require("../../core/utils/iterator");
- var _editor = require("../editor/editor");
- var _editor2 = _interopRequireDefault(_editor);
- var _check_box = require("../check_box");
- var _check_box2 = _interopRequireDefault(_check_box);
- var _radio_group = require("../radio_group");
- var _radio_group2 = _interopRequireDefault(_radio_group);
- var _number_box = require("../number_box");
- var _number_box2 = _interopRequireDefault(_number_box);
- var _select_box = require("../select_box");
- var _select_box2 = _interopRequireDefault(_select_box);
- var _date_box = require("../date_box");
- var _date_box2 = _interopRequireDefault(_date_box);
- var _message = require("../../localization/message");
- var _message2 = _interopRequireDefault(_message);
- var _date = require("../../localization/date");
- var _date2 = _interopRequireDefault(_date);
- var _date3 = require("../../core/utils/date");
- var _date4 = _interopRequireDefault(_date3);
- var _uiScheduler = require("./ui.scheduler.publisher_mixin");
- var _uiScheduler2 = _interopRequireDefault(_uiScheduler);
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- "default": obj
- }
- }
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function")
- }
- }
- 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)
- }
- Object.defineProperty(Constructor, "prototype", {
- writable: false
- });
- return Constructor
- }
- var RECURRENCE_EDITOR = "dx-recurrence-editor";
- var LABEL_POSTFIX = "-label";
- var WRAPPER_POSTFIX = "-wrapper";
- var RECURRENCE_EDITOR_CONTAINER = "dx-recurrence-editor-container";
- var FREQUENCY_EDITOR = "dx-recurrence-selectbox-freq";
- var INTERVAL_EDITOR = "dx-recurrence-numberbox-interval";
- var INTERVAL_EDITOR_FIELD = "dx-recurrence-interval-field";
- var REPEAT_END_EDITOR = "dx-recurrence-repeat-end";
- var REPEAT_END_EDITOR_CONTAINER = "dx-recurrence-repeat-end-container";
- var REPEAT_TYPE_EDITOR = "dx-recurrence-radiogroup-repeat-type";
- var REPEAT_COUNT_EDITOR = "dx-recurrence-numberbox-repeat-count";
- var REPEAT_UNTIL_DATE_EDITOR = "dx-recurrence-datebox-until-date";
- var REPEAT_ON_EDITOR = "dx-recurrence-repeat-on";
- var REPEAT_ON_WEEK_EDITOR = "dx-recurrence-repeat-on-week";
- var DAY_OF_WEEK = "dx-recurrence-checkbox-day-of-week";
- var REPEAT_ON_MONTH_EDITOR = "dx-recurrence-repeat-on-month";
- var DAY_OF_MONTH = "dx-recurrence-numberbox-day-of-month";
- var REPEAT_ON_YEAR_EDITOR = "dx-recurrence-repeat-on-year";
- var MONTH_OF_YEAR = "dx-recurrence-selectbox-month-of-year";
- var FIELD_CLASS = "dx-field";
- var RECURRENCE_FREQ_FIELD = "dx-recurrence-freq-field";
- var FIELD_LABEL_CLASS = "dx-field-label";
- var FIELD_VALUE_CLASS = "dx-field-value";
- var frequencies = [{
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceNever")
- },
- value: "never"
- }, {
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceDaily")
- },
- value: "daily"
- }, {
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceWeekly")
- },
- value: "weekly"
- }, {
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceMonthly")
- },
- value: "monthly"
- }, {
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceYearly")
- },
- value: "yearly"
- }];
- var repeatEndTypes = [{
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceNever")
- },
- value: "never"
- }, {
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceRepeatOnDate")
- },
- value: "until"
- }, {
- text: function() {
- return _message2.default.format("dxScheduler-recurrenceRepeatCount")
- },
- value: "count"
- }];
- var days = ["SU", "MO", "TU", "WE", "TH", "FR", "SA"];
- var RecurrenceRule = function() {
- function RecurrenceRule(recurrence) {
- _classCallCheck(this, RecurrenceRule);
- this._recurrenceRule = _utils2.default.getRecurrenceRule(recurrence).rule
- }
- _createClass(RecurrenceRule, [{
- key: "makeRules",
- value: function(string) {
- this._recurrenceRule = _utils2.default.getRecurrenceRule(string).rule
- }
- }, {
- key: "makeRule",
- value: function(field, value) {
- if (!value) {
- delete this._recurrenceRule[field];
- return
- }
- if ((0, _type.isDefined)(field)) {
- if ("until" === field) {
- delete this._recurrenceRule.count
- }
- if ("count" === field) {
- delete this._recurrenceRule.until
- }
- this._recurrenceRule[field] = value
- }
- }
- }, {
- key: "repeatableRule",
- value: function() {
- var rules = this._recurrenceRule;
- if ("count" in rules) {
- return "count"
- }
- if ("until" in rules) {
- return "until"
- }
- return null
- }
- }, {
- key: "recurrenceString",
- value: function() {
- return _utils2.default.getRecurrenceString(this._recurrenceRule)
- }
- }, {
- key: "rules",
- value: function() {
- return this._recurrenceRule
- }
- }, {
- key: "daysFromByDayRule",
- value: function() {
- return _utils2.default.daysFromByDayRule(this._recurrenceRule)
- }
- }]);
- return RecurrenceRule
- }();
- var RecurrenceEditor = _editor2.default.inherit({
- _getDefaultOptions: function() {
- return (0, _extend.extend)(this.callBase(), {
- value: null,
- startDate: new Date,
- firstDayOfWeek: void 0
- })
- },
- _getFirstDayOfWeek: function() {
- return (0, _type.isDefined)(this.option("firstDayOfWeek")) ? this.option("firstDayOfWeek") : _date2.default.firstDayOfWeekIndex()
- },
- _createComponent: function(element, name) {
- var config = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
- this._extendConfig(config, {
- readOnly: this.option("readOnly")
- });
- return this.callBase(element, name, config)
- },
- _init: function() {
- this.callBase();
- this._recurrenceRule = new RecurrenceRule(this.option("value"))
- },
- _render: function() {
- this.callBase();
- this.$element().addClass(RECURRENCE_EDITOR);
- this._$container = (0, _renderer2.default)("<div>").addClass(RECURRENCE_EDITOR_CONTAINER).appendTo(this.$element());
- this._renderEditors();
- this._renderContainerVisibility(this.option("value"))
- },
- _renderContainerVisibility: function(value) {
- if (value) {
- this._$container.show();
- _dom2.default.triggerShownEvent(this._$container)
- } else {
- this._$container.hide()
- }
- },
- _changeValueByVisibility: function(value) {
- this._renderContainerVisibility(value);
- if (value) {
- if (!this.option("value")) {
- this._handleDefaults()
- }
- } else {
- this._recurrenceRule.makeRules("");
- this.option("value", "")
- }
- },
- _handleDefaults: function() {
- this._recurrenceRule.makeRule("freq", "daily");
- this._changeEditorValue()
- },
- _changeEditorValue: function() {
- this.option("value", this._recurrenceRule.recurrenceString() || "")
- },
- _renderEditors: function() {
- this._renderFreqEditor();
- this._renderIntervalEditor();
- this._renderRepeatOnEditor();
- this._renderRepeatEndEditor()
- },
- _renderFreqEditor: function() {
- var _this = this;
- var freq = (this._recurrenceRule.rules().freq || "never").toLowerCase();
- var $freqEditor = (0, _renderer2.default)("<div>").addClass(FREQUENCY_EDITOR).addClass(FIELD_VALUE_CLASS);
- this._freqEditor = this._createComponent($freqEditor, _select_box2.default, {
- field: "freq",
- items: frequencies,
- value: freq,
- valueExpr: "value",
- displayExpr: "text",
- layout: "horizontal",
- onValueChanged: function(args) {
- _this._valueChangedHandler(args);
- _this.invoke("resizePopup")
- }
- });
- var $field = (0, _renderer2.default)("<div>").addClass(FIELD_CLASS).addClass(RECURRENCE_FREQ_FIELD).append($freqEditor);
- this.$element().prepend($field)
- },
- _renderIntervalEditor: function() {
- var freq = this._recurrenceRule.rules().freq || "daily";
- var $intervalEditor = (0, _renderer2.default)("<div>").addClass(INTERVAL_EDITOR).addClass(FIELD_VALUE_CLASS);
- var $intervalEditorLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeatEvery")).addClass(INTERVAL_EDITOR + LABEL_POSTFIX).addClass(FIELD_LABEL_CLASS);
- this._$intervalTypeLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeat".concat(freq.charAt(0).toUpperCase()).concat(freq.substr(1).toLowerCase()))).addClass(REPEAT_TYPE_EDITOR + LABEL_POSTFIX);
- var interval = this._recurrenceRule.rules().interval || 1;
- this._intervalEditor = this._createComponent($intervalEditor, _number_box2.default, {
- field: "interval",
- min: 1,
- value: interval,
- showSpinButtons: true,
- useLargeSpinButtons: false,
- onValueChanged: this._valueChangedHandler.bind(this)
- });
- var $field = (0, _renderer2.default)("<div>").addClass(FIELD_CLASS).addClass(INTERVAL_EDITOR_FIELD).append($intervalEditorLabel, $intervalEditor, this._$intervalTypeLabel);
- this._$container.append($field);
- this._setAriaDescribedBy(this._intervalEditor, $intervalEditorLabel)
- },
- _renderRepeatOnEditor: function() {
- var freq = (this._recurrenceRule.rules().freq || "").toLowerCase();
- if (!(0, _type.isDefined)(this._$repeatOnEditor)) {
- this._$repeatOnEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_EDITOR).addClass(FIELD_CLASS).appendTo(this._$container)
- }
- if (!freq || "daily" === freq) {
- this._clearRepeatOnEditor();
- this._clearRepeatOnLabel();
- return
- }
- if (!(0, _type.isDefined)(this._$repeatOnLabel)) {
- this._renderRepeatOnLabel(this._$repeatOnEditor)
- }
- if ("weekly" === freq && !this._$repeatOnWeek) {
- this._renderRepeatOnWeekEditor();
- return
- }
- if ("monthly" === freq && !this._$repeatOnMonth) {
- this._renderRepeatOnMonthEditor();
- return
- }
- if ("yearly" === freq && !this._$repeatOnYear) {
- this._renderRepeatOnYearEditor();
- return
- }
- },
- _renderRepeatOnLabel: function($element) {
- this._$repeatOnLabel = (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeatOn")).addClass(REPEAT_ON_EDITOR + LABEL_POSTFIX).addClass(FIELD_LABEL_CLASS);
- $element.append(this._$repeatOnLabel)
- },
- _clearRepeatOnEditor: function() {
- if ((0, _type.isDefined)(this._$repeatOnWeek)) {
- this._$repeatOnWeek.detach();
- this._$repeatOnWeek.remove();
- delete this._$repeatOnWeek
- }
- if ((0, _type.isDefined)(this._$repeatOnMonth)) {
- this._$repeatOnMonth.detach();
- this._$repeatOnMonth.remove();
- delete this._$repeatOnMonth
- }
- if ((0, _type.isDefined)(this._$repeatOnYear)) {
- this._$repeatOnYear.detach();
- this._$repeatOnYear.remove();
- delete this._$repeatOnYear
- }
- },
- _clearRepeatOnLabel: function() {
- if ((0, _type.isDefined)(this._$repeatOnLabel)) {
- this._$repeatOnLabel.detach();
- this._$repeatOnLabel.remove();
- delete this._$repeatOnLabel
- }
- },
- _renderRepeatOnWeekEditor: function() {
- this._clearRepeatOnEditor();
- this._$repeatOnWeek = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_WEEK_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatOnEditor);
- var localDaysNames = _date2.default.getDayNames("short");
- var daysFromRules = this._daysOfWeekByRules();
- this._daysOfWeek = [];
- for (var i = 0; i < 7; i++) {
- var daysOffset = this._getFirstDayOfWeek() + i;
- var dayIndex = daysOffset % 7;
- var checkBoxText = localDaysNames[dayIndex].toUpperCase();
- var dayName = days[dayIndex];
- var $day = (0, _renderer2.default)("<div>").addClass(DAY_OF_WEEK);
- var day = this._createComponent($day, _check_box2.default, {
- text: checkBoxText,
- value: (0, _array.inArray)(dayName, daysFromRules) > -1 ? true : false,
- onValueChanged: this._repeatByDayValueChangeHandler.bind(this)
- });
- this._daysOfWeek[dayIndex] = day;
- this._$repeatOnWeek.append($day)
- }
- },
- _daysOfWeekByRules: function() {
- var daysByRule = this._recurrenceRule.daysFromByDayRule();
- if (!daysByRule.length) {
- daysByRule = [days[this.option("startDate").getDay()]]
- }
- return daysByRule
- },
- _repeatByDayValueChangeHandler: function() {
- var byDayRule = "";
- (0, _iterator.each)(this._daysOfWeek, function(index, day) {
- if (day.option("value")) {
- var dayName = days[index];
- if (!byDayRule) {
- byDayRule = dayName
- } else {
- byDayRule = "".concat(byDayRule, ",").concat(dayName)
- }
- }
- });
- this._recurrenceRule.makeRule("byday", byDayRule);
- this._changeEditorValue()
- },
- _renderRepeatOnMonthEditor: function() {
- this._clearRepeatOnEditor();
- this._$repeatOnMonth = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_MONTH_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatOnEditor);
- this._renderDayOfMonthEditor(this._$repeatOnMonth)
- },
- _renderRepeatOnYearEditor: function() {
- this._clearRepeatOnEditor();
- this._$repeatOnYear = (0, _renderer2.default)("<div>").addClass(REPEAT_ON_YEAR_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatOnEditor);
- var months = [];
- var monthsNames = _date2.default.getMonthNames("wide");
- for (var i = 0; i < 12; i++) {
- months[i] = {
- value: String(i + 1),
- text: monthsNames[i]
- }
- }
- var byMonth = this._monthOfYearByRules();
- var $monthOfYear = (0, _renderer2.default)("<div>").addClass(MONTH_OF_YEAR).appendTo(this._$repeatOnYear);
- var monthChanged = function(args) {
- this._valueChangedHandler.call(this, args);
- var monthValue = parseInt(args.component.option("value"));
- if (this._dayEditor && monthValue) {
- var maxAllowedDay = new Date((new Date).getFullYear(), parseInt(monthValue), 0).getDate();
- if (2 === monthValue) {
- maxAllowedDay = 29
- }
- this._dayEditor.option("max", maxAllowedDay)
- }
- };
- this._monthEditor = this._createComponent($monthOfYear, _select_box2.default, {
- field: "bymonth",
- items: months,
- value: byMonth,
- displayExpr: "text",
- valueExpr: "value",
- onValueChanged: monthChanged.bind(this)
- });
- this._renderDayOfMonthEditor(this._$repeatOnYear)
- },
- _monthOfYearByRules: function() {
- var monthByRule = this._recurrenceRule.rules().bymonth;
- if (!monthByRule) {
- monthByRule = this.option("startDate").getMonth() + 1
- }
- return monthByRule
- },
- _renderDayOfMonthEditor: function($element) {
- var byMonthDay = this._dayOfMonthByRules();
- var $dayEditor = (0, _renderer2.default)("<div>").addClass(DAY_OF_MONTH);
- this._dayEditor = this._createComponent($dayEditor, _number_box2.default, {
- field: "bymonthday",
- min: 1,
- max: 31,
- showSpinButtons: true,
- useLargeSpinButtons: false,
- value: byMonthDay,
- onValueChanged: this._valueChangedHandler.bind(this)
- });
- $element.append($dayEditor)
- },
- _dayOfMonthByRules: function() {
- var dayByRule = this._recurrenceRule.rules().bymonthday;
- if (!dayByRule) {
- dayByRule = this.option("startDate").getDate()
- }
- return dayByRule
- },
- _setAriaDescribedBy: function(editor, $label) {
- var labelId = "label-".concat(new _guid2.default);
- editor.setAria("describedby", labelId);
- editor.setAria("id", labelId, $label)
- },
- _repeatEndSwitchValueChangeHandler: function(args) {
- var value = args.value;
- this._renderRepeatEndVisibility(value);
- if (!this._recurrenceRule.rules().count && !this._recurrenceRule.rules().until && value) {
- this._handleRepeatEndDefaults()
- } else {
- if (!value) {
- this._recurrenceRule.makeRule("count", "");
- this._recurrenceRule.makeRule("until", "");
- this._changeEditorValue()
- }
- }
- },
- _renderRepeatEndVisibility: function(value) {
- if (!value) {
- this._$repeatEndEditor.hide()
- } else {
- this._$repeatEndEditor.show()
- }
- },
- _handleRepeatEndDefaults: function() {
- this._recurrenceRule.makeRule("count", 1);
- this._changeEditorValue()
- },
- _renderRepeatEndEditor: function(rule) {
- rule = (0, _type.isDefined)(rule) ? rule : this._recurrenceRule.repeatableRule();
- if (!rule) {
- rule = "count"
- }
- if (!(0, _type.isDefined)(this._$repeatEndEditor)) {
- (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceEnd")).addClass(REPEAT_END_EDITOR_CONTAINER + LABEL_POSTFIX).addClass(FIELD_LABEL_CLASS).appendTo(this._$container);
- this._$repeatEndEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR_CONTAINER).addClass(FIELD_CLASS).appendTo(this._$container);
- this._renderRepeatEndTypeEditor()
- }
- },
- _renderRepeatEndTypeEditor: function() {
- var _this2 = this;
- var repeatType = this._recurrenceRule.repeatableRule() || "never";
- this._$repeatTypeEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_TYPE_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo(this._$repeatEndEditor);
- this._repeatTypeEditor = this._createComponent(this._$repeatTypeEditor, _radio_group2.default, {
- items: repeatEndTypes,
- value: repeatType,
- displayExpr: "text",
- valueExpr: "value",
- itemTemplate: function(itemData) {
- if ("count" === itemData.value) {
- return _this2._renderRepeatCountEditor()
- }
- if ("until" === itemData.value) {
- return _this2._renderRepeatUntilEditor()
- }
- return _this2._renderDefaultRepeatEnd()
- },
- layout: "vertical",
- onValueChanged: this._repeatTypeValueChangedHandler.bind(this)
- });
- this._disableRepeatEndParts(repeatType)
- },
- _renderDefaultRepeatEnd: function() {
- var $editorTemplate = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);
- (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceNever")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
- return $editorTemplate
- },
- _repeatTypeValueChangedHandler: function(args) {
- var value = args.value;
- this._disableRepeatEndParts(value);
- if ("until" === value) {
- this._recurrenceRule.makeRule(value, this._getUntilValue())
- }
- if ("count" === value) {
- this._recurrenceRule.makeRule(value, this._repeatCountEditor.option("value"))
- }
- if ("never" === value) {
- this._recurrenceRule.makeRule("count", "");
- this._recurrenceRule.makeRule("until", "")
- }
- this._changeEditorValue()
- },
- _disableRepeatEndParts: function(value) {
- if ("until" === value) {
- this._repeatCountEditor.option("disabled", true);
- this._repeatUntilDate.option("disabled", false)
- }
- if ("count" === value) {
- this._repeatCountEditor.option("disabled", false);
- this._repeatUntilDate.option("disabled", true)
- }
- if ("never" === value) {
- this._repeatCountEditor.option("disabled", true);
- this._repeatUntilDate.option("disabled", true)
- }
- },
- _renderRepeatCountEditor: function() {
- var repeatCount = this._recurrenceRule.rules().count || 1;
- var $editorTemplate = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);
- (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceAfter")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
- this._$repeatCountEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_COUNT_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo($editorTemplate);
- (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceRepeatCount")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
- this._repeatCountEditor = this._createComponent(this._$repeatCountEditor, _number_box2.default, {
- field: "count",
- min: 1,
- showSpinButtons: true,
- useLargeSpinButtons: false,
- value: repeatCount,
- onValueChanged: this._repeatCountValueChangeHandler.bind(this)
- });
- return $editorTemplate
- },
- _repeatCountValueChangeHandler: function(args) {
- if ("count" !== this._recurrenceRule.repeatableRule()) {
- return
- }
- var value = args.value;
- this._recurrenceRule.makeRule("count", value);
- this._changeEditorValue()
- },
- _formatUntilDate: function(date) {
- if (this._recurrenceRule.rules().until && _date4.default.sameDate(this._recurrenceRule.rules().until, date)) {
- return date
- }
- return _date4.default.setToDayEnd(date)
- },
- _renderRepeatUntilEditor: function() {
- var repeatUntil = this._recurrenceRule.rules().until || this._formatUntilDate(new Date);
- var $editorTemplate = (0, _renderer2.default)("<div>").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);
- (0, _renderer2.default)("<div>").text(_message2.default.format("dxScheduler-recurrenceOn")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);
- this._$repeatDateEditor = (0, _renderer2.default)("<div>").addClass(REPEAT_UNTIL_DATE_EDITOR).addClass(FIELD_VALUE_CLASS).appendTo($editorTemplate);
- this._repeatUntilDate = this._createComponent(this._$repeatDateEditor, _date_box2.default, {
- field: "until",
- value: repeatUntil,
- type: "date",
- onValueChanged: this._repeatUntilValueChangeHandler.bind(this),
- calendarOptions: {
- firstDayOfWeek: this._getFirstDayOfWeek()
- }
- });
- return $editorTemplate
- },
- _repeatUntilValueChangeHandler: function(args) {
- if ("until" !== this._recurrenceRule.repeatableRule()) {
- return
- }
- var untilDate = this._formatUntilDate(new Date(args.value));
- this._repeatUntilDate.option("value", untilDate);
- this._recurrenceRule.makeRule("until", untilDate);
- this._changeEditorValue()
- },
- _valueChangedHandler: function(args) {
- var value = args.component.option("value");
- var field = args.component.option("field");
- var freqEditorValue = this._freqEditor && this._freqEditor.option("value");
- var visible = true;
- if ("freq" === field && "never" === value || "freq" !== field && "never" === freqEditorValue) {
- visible = false;
- this.option("value", "")
- } else {
- this._recurrenceRule.makeRule(field, value);
- this._makeRepeatOnRule(field, value);
- this._changeEditorValue()
- }
- this._renderContainerVisibility(visible)
- },
- _makeRepeatOnRule: function(field, value) {
- if ("freq" !== field) {
- return
- }
- if ("daily" === value) {
- this._recurrenceRule.makeRule("byday", "");
- this._recurrenceRule.makeRule("bymonth", "");
- this._recurrenceRule.makeRule("bymonthday", "")
- }
- if ("weekly" === value) {
- this._recurrenceRule.makeRule("byday", this._daysOfWeekByRules());
- this._recurrenceRule.makeRule("bymonth", "");
- this._recurrenceRule.makeRule("bymonthday", "")
- }
- if ("monthly" === value) {
- this._recurrenceRule.makeRule("bymonthday", this._dayOfMonthByRules());
- this._recurrenceRule.makeRule("bymonth", "");
- this._recurrenceRule.makeRule("byday", "")
- }
- if ("yearly" === value) {
- this._recurrenceRule.makeRule("bymonthday", this._dayOfMonthByRules());
- this._recurrenceRule.makeRule("bymonth", this._monthOfYearByRules());
- this._recurrenceRule.makeRule("byday", "")
- }
- },
- _optionChanged: function(args) {
- switch (args.name) {
- case "value":
- this._recurrenceRule.makeRules(args.value);
- this._repeatTypeEditor.option("value", this._recurrenceRule.repeatableRule() || "never");
- this._renderRepeatEndEditor();
- this._renderRepeatOnEditor();
- this._changeEditorsValues(this._recurrenceRule.rules());
- this.callBase(args);
- break;
- case "startDate":
- this._clearRepeatOnEditor();
- this._renderRepeatOnEditor();
- this._makeRepeatOnRule("freq", this._recurrenceRule.rules().freq);
- if ((0, _type.isDefined)(this._recurrenceRule.recurrenceString())) {
- this._changeEditorValue()
- }
- break;
- case "firstDayOfWeek":
- this._clearRepeatOnEditor();
- this._renderRepeatOnEditor();
- if (this._$repeatDateEditor) {
- this._repeatUntilDate.option("calendarOptions.firstDayOfWeek", this._getFirstDayOfWeek())
- }
- break;
- case "visible":
- this._changeValueByVisibility(args.value);
- this.callBase(args);
- break;
- default:
- this.callBase(args)
- }
- },
- _changeEditorsValues: function(rules) {
- this._changeCheckBoxesValue(!!rules.byday);
- this._freqEditor.option("value", (rules.freq || "never").toLowerCase());
- this._changeRepeatTypeLabel();
- this._intervalEditor.option("value", rules.interval);
- this._changeRepeatCountValue();
- this._changeRepeatUntilValue();
- this._changeDayOfMonthValue();
- this._changeMonthOfYearValue()
- },
- _changeRepeatTypeLabel: function() {
- var $labels = this.$element().find(".".concat(REPEAT_TYPE_EDITOR).concat(LABEL_POSTFIX));
- if (!$labels.length) {
- return
- }
- var freq = this._recurrenceRule.rules().freq || "daily";
- (0, _iterator.each)($labels, function(_, $label) {
- (0, _renderer2.default)($label).text(_message2.default.format("dxScheduler-recurrenceRepeat".concat(freq.charAt(0).toUpperCase()).concat(freq.substr(1).toLowerCase())))
- })
- },
- _changeRepeatCountValue: function() {
- if (!this._$repeatCountEditor) {
- return
- }
- var count = this._recurrenceRule.rules().count || 1;
- this._repeatCountEditor.option("value", count)
- },
- _changeRepeatUntilValue: function() {
- if (!this._$repeatDateEditor) {
- return
- }
- this._repeatUntilDate.option("value", this._getUntilValue())
- },
- _getUntilValue: function() {
- return this._recurrenceRule.rules().until || this._formatUntilDate(new Date)
- },
- _changeCheckBoxesValue: function(byDayChanged) {
- if (!this._$repeatOnWeek || !byDayChanged) {
- return
- }
- var daysByRule = this._daysOfWeekByRules();
- (0, _iterator.each)(this._daysOfWeek, function(index, day) {
- var dayName = days[index];
- day.option("value", (0, _array.inArray)(dayName, daysByRule) > -1)
- })
- },
- _changeDayOfMonthValue: function() {
- if (!this._$repeatOnMonth && !this._$repeatOnYear) {
- return
- }
- var day = this._dayOfMonthByRules() || 1;
- this._dayEditor.option("value", day)
- },
- _changeMonthOfYearValue: function() {
- if (!this._$repeatOnYear) {
- return
- }
- var month = this._monthOfYearByRules() || 1;
- this._monthEditor.option("value", month)
- },
- toggle: function() {
- this._freqEditor.focus()
- },
- setAria: function() {
- if (this._switchEditor) {
- this._switchEditor.setAria(arguments.length <= 0 ? void 0 : arguments[0], arguments.length <= 1 ? void 0 : arguments[1])
- }
- }
- }).include(_uiScheduler2.default);
- (0, _component_registrator2.default)("dxRecurrenceEditor", RecurrenceEditor);
- module.exports = RecurrenceEditor;
|