all files / range-navigator/renderer/ period-selector.js

85.71% Statements 90/105
76.67% Branches 23/30
94.44% Functions 17/18
85.58% Lines 89/104
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172   15×   15× 15× 15×             15×   15× 15× 15× 15× 15× 15× 29×   15× 15× 15×             15× 15×     10×   15× 15× 15× 29×           15×     15× 15× 15×                 15×                         12×       15×   25×                 10× 10× 10× 10× 10× 10× 10× 21× 10× 21× 10×     10× 10×       10×                               512×          
define(["require", "exports", "@syncfusion/ej2-base", "@syncfusion/ej2-navigations", "@syncfusion/ej2-calendars", "../../common/utils/helper"], function (require, exports, ej2_base_1, ej2_navigations_1, ej2_calendars_1, helper_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var PeriodSelector = (function () {
        function PeriodSelector(rangeNavigator) {
            this.control = rangeNavigator;
        }
        PeriodSelector.prototype.renderSelectorElement = function (control) {
            var periodSelectorSize = this.periodSelectorSize;
            var thumbSize = control.themeStyle.thumbWidth;
            this.periodSelectorDiv = ej2_base_1.createElement('div', {
                id: control.element.id + '_Secondary_Element',
                styles: 'width: ' + (this.periodSelectorSize.width - thumbSize) + 'px;height: ' +
                    this.periodSelectorSize.height + 'px;top:' +
                    this.periodSelectorSize.y + 'px;left:' +
                    (this.periodSelectorSize.x + thumbSize / 2) + 'px; position: absolute'
            });
            this.control.element.appendChild(this.periodSelectorDiv);
        };
        PeriodSelector.prototype.renderSelector = function () {
            var _this = this;
            var selectorElement = ej2_base_1.createElement('div', { id: this.control.element.id + '_selector' });
            this.periodSelectorDiv.appendChild(selectorElement);
            var selector = [];
            var buttons = this.control.periodSelectorSettings.periods;
            for (var i = 0; i < buttons.length; i++) {
                selector.push({ align: 'Left', text: buttons[i].text });
            }
            this.calendarId = this.control.element.id + '_calendar';
            selector.push({ template: '<div><input type="text" id=' + this.calendarId + '></input></div>', align: 'Right' });
            var selctorArgs = {
                selector: selector,
                name: 'RangeSelector',
                cancel: false,
                enableCustomFormat: false,
                content: ''
            };
            this.control.trigger('selectorRender', selctorArgs);
            this.toolbar = new ej2_navigations_1.Toolbar({
                items: selctorArgs.selector, height: this.periodSelectorSize.height,
                clicked: function (args) {
                    _this.buttonClick(args, _this.control);
                }, created: function () {
                    _this.nodes = _this.toolbar.element.querySelectorAll('.e-toolbar-left')[0];
                    Eif (ej2_base_1.isNullOrUndefined(_this.selectedIndex)) {
                        buttons.map(function (period, index) {
                            Iif (period.selected) {
                                _this.control.startValue = _this.changedRange(period.intervalType, _this.control.endValue, period.interval).getTime();
                                _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;
                            }
                        });
                    }
                    _this.setSelectedStyle(_this.selectedIndex);
                }
            });
            this.toolbar.appendTo(selectorElement);
            this.triggerChange = true;
            this.datePicker = new ej2_calendars_1.DateRangePicker({
                min: new Date(this.control.chartSeries.xMin),
                max: new Date(this.control.chartSeries.xMax),
                format: 'dd\'\/\'MM\'\/\'yyyy',
                placeholder: 'Select a range',
                showClearButton: false,
                startDate: new Date(this.control.startValue),
                endDate: new Date(this.control.endValue),
                created: function (args) {
                    Iif (selctorArgs.enableCustomFormat) {
                        var datePickerElement = document.getElementsByClassName('e-date-range-wrapper')[0];
                        datePickerElement.style.display = 'none';
                        datePickerElement.insertAdjacentElement('afterend', ej2_base_1.createElement('div', { id: 'customRange',
                            innerHTML: selctorArgs.content, className: 'e-btn e-small' }));
                        helper_1.getElement('customRange').insertAdjacentElement('afterbegin', (ej2_base_1.createElement('span', { id: 'dateIcon',
                            className: 'e-input-group-icon e-range-icon e-icons', styles: 'margin-right: 10px' })));
                        document.getElementById('customRange').onclick = function () {
                            _this.datePicker.show(helper_1.getElement('customRange'));
                        };
                    }
                },
                change: function (args) {
                    if (_this.triggerChange) {
                        _this.control.rangeSlider.performAnimation(args.startDate.getTime(), args.endDate.getTime(), _this.control);
                    }
                }
            });
            this.datePicker.appendTo('#' + this.calendarId);
        };
        PeriodSelector.prototype.setSelectedStyle = function (selectedIndex) {
            Iif (this.control.disableRangeSelector) {
                for (var i = 0, length_1 = this.nodes.childNodes.length; i < length_1; i++) {
                    this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');
                    this.nodes.childNodes[i].childNodes[0].classList.remove('e-active');
                }
                this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-flat');
                this.nodes.childNodes[selectedIndex].childNodes[0].classList.add('e-active');
            }
        };
        PeriodSelector.prototype.buttonClick = function (args, control) {
            var _this = this;
            var toolBarItems = this.toolbar.items;
            var clickedEle = args.item;
            var slider = control.rangeSlider;
            var updatedStart;
            var updatedEnd;
            var buttons = control.periodSelectorSettings.periods;
            var button = buttons.filter(function (btn) { return (btn.text === clickedEle.text); });
            buttons.map(function (period, index) {
                if (period.text === args.item.text) {
                    _this.selectedIndex = (_this.nodes.childNodes.length - buttons.length) + index;
                }
            });
            this.setSelectedStyle(this.selectedIndex);
            if (clickedEle.text.toLowerCase() === 'all') {
                updatedStart = control.chartSeries.xMin;
                updatedEnd = control.chartSeries.xMax;
                slider.performAnimation(updatedStart, updatedEnd, control);
            }
            else if (clickedEle.text.toLowerCase() === 'ytd') {
                updatedStart = new Date(new Date(slider.currentEnd).getFullYear().toString()).getTime();
                updatedEnd = slider.currentEnd;
                slider.performAnimation(updatedStart, updatedEnd, control);
            }
            else Eif (clickedEle.text.toLowerCase() !== '') {
                updatedStart = this.changedRange(button[0].intervalType, slider.currentEnd, button[0].interval).getTime();
                updatedEnd = slider.currentEnd;
                slider.performAnimation(updatedStart, updatedEnd, control);
            }
            Iif (helper_1.getElement(this.calendarId + '_popup') && !ej2_base_1.Browser.isDevice) {
                var element = helper_1.getElement(this.calendarId + '_popup');
                element.querySelectorAll('.e-range-header')[0].style.display = 'none';
            }
        };
        PeriodSelector.prototype.changedRange = function (type, end, interval) {
            var result = new Date(end);
            switch (type) {
                case 'Quarter':
                    result.setMonth(result.getMonth() - (3 * interval));
                    break;
                case 'Months':
                    result.setMonth(result.getMonth() - interval);
                    break;
                case 'Weeks':
                    result.setDate(result.getDate() - (interval * 7));
                    break;
                case 'Days':
                    result.setDate(result.getDate() - interval);
                    break;
                case 'Hours':
                    result.setHours(result.getHours() - interval);
                    break;
                case 'Minutes':
                    result.setMinutes(result.getMinutes() - interval);
                    break;
                case 'Seconds':
                    result.setSeconds(result.getSeconds() - interval);
                    break;
                default:
                    result.setFullYear(result.getFullYear() - interval);
                    break;
            }
            return result;
        };
        ;
        PeriodSelector.prototype.getModuleName = function () {
            return 'PeriodSelector';
        };
        PeriodSelector.prototype.destroy = function () {
        };
        return PeriodSelector;
    }());
    exports.PeriodSelector = PeriodSelector;
});