UNPKG

@syncfusion/ej2-pivotview

Version:

The pivot grid, or pivot table, is used to visualize large sets of relational data in a cross-tabular format, similar to an Excel pivot table.

2,076 lines 122 kB
import * as events from '../../common/base/constant';
import * as cls from '../../common/base/css-constant';
import { Chart, ColumnSeries, LineSeries, Legend, Tooltip, Category, AreaSeries, Selection, StripLine, DataLabel, StackingLineSeries } from '@syncfusion/ej2-charts';
import { AccumulationChart, PieSeries, FunnelSeries, PyramidSeries } from '@syncfusion/ej2-charts';
import { SplineAreaSeries, MultiColoredLineSeries, RangeAreaSeries, StackingAreaSeries, StepAreaSeries } from '@syncfusion/ej2-charts';
import { MultiColoredAreaSeries, SplineSeries, StepLineSeries, AccumulationLegend, AccumulationTooltip } from '@syncfusion/ej2-charts';
import { StackingColumnSeries, RangeColumnSeries, BarSeries, StackingBarSeries, ScatterSeries } from '@syncfusion/ej2-charts';
import { RadarSeries } from '@syncfusion/ej2-charts';
import { ScrollBar, Zoom, PolarSeries } from '@syncfusion/ej2-charts';
import { ParetoSeries, Export, Crosshair, MultiLevelLabel } from '@syncfusion/ej2-charts';
import { BubbleSeries } from '@syncfusion/ej2-charts';
import { AccumulationDataLabel, getSeriesColor } from '@syncfusion/ej2-charts';
import { createElement, remove, isNullOrUndefined, select, getInstance } from '@syncfusion/ej2-base';
import { PivotUtil } from '../../base/util';
import { ContextMenu } from '@syncfusion/ej2-navigations';
import { hideSpinner } from '@syncfusion/ej2-popups';
import { DataManager } from '@syncfusion/ej2-data';
var PivotChart = /** @class */ (function () {
    /**
     * Constructor for pivot chart module.
     *
     *  @param {PivotView} parent - Instance of pivot table.
     */
    function PivotChart(parent) {
        this.headerColl = {};
        this.maxLevel = 0;
        this.columnGroupObject = {};
        this.selectedLegend = 0;
        this.chartSeriesInfo = {};
        this.measurePos = -1;
        this.measuresNames = {};
        this.accumulationType = ['Pie', 'Pyramid', 'Doughnut', 'Funnel'];
        this.isChartInitial = true;
        this.parent = parent;
    }
    /**
     * Get component name.
     *
     * @returns {string} - string
     * @private
     */
    PivotChart.prototype.getModuleName = function () {
        return 'pivotChart';
    };
    /**
     * Initialize the pivot chart rendering
     *
     * @param {PivotView} parent - Specifies the pivot table component instance.
     * @param {ChartSettingsModel} chartSettings - Specifies the chart settings.
     * @returns {void}
     * @private
     */
    PivotChart.prototype.loadChart = function (parent, chartSettings) {
        this.parent = parent;
        this.measuresNames = {};
        this.engineModule = this.parent.dataType === 'olap' ? this.parent.olapEngineModule : this.parent.engineModule;
        this.dataSourceSettings = this.parent.dataSourceSettings;
        this.chartSettings = chartSettings;
        var isDataAvail = parent.dataType === 'olap' ?
            (parent.dataSourceSettings.url !== '' && !parent.olapEngineModule.isEmptyData &&
                parent.olapEngineModule.tupColumnInfo.length > 0 && parent.olapEngineModule.tupRowInfo.length > 0 &&
                (!isNullOrUndefined(parent.olapEngineModule.colMeasurePos) || !isNullOrUndefined(parent.olapEngineModule.rowMeasurePos)))
            : this.parent.dataSourceSettings.mode === 'Server' ? (!isNullOrUndefined(parent.dataSourceSettings.url) &&
                parent.dataSourceSettings.url !== '' && parent.dataSourceSettings.values.length > 0 && !parent.engineModule.isEmptyData) :
                (parent.dataSourceSettings.values.length > 0 && parent.dataSourceSettings.dataSource &&
                    (parent.dataSourceSettings.dataSource.length > 0 ||
                        (parent.dataSourceSettings.dataSource instanceof DataManager)) && !parent.engineModule.isEmptyData);
        if (isDataAvail) {
            if (!this.parent.chart && (this.parent.element.querySelector('.e-chart') || this.parent.element.querySelector('.e-accumulationchart'))) {
                remove(select('#' + this.parent.element.id + '_chart', this.parent.element));
            }
            if (this.chartSettings.enableMultipleAxis && this.accumulationType.indexOf(chartSettings.chartSeries.type) < 0 && this.chartSettings.chartSeries.type !== 'Pareto') {
                this.measureList = this.dataSourceSettings.values.map(function (item) { return item.name; });
            }
            else {
                this.measureList = [chartSettings.value === '' ? this.dataSourceSettings.values[0].name : chartSettings.value];
            }
            for (var _i = 0, _a = this.dataSourceSettings.values; _i < _a.length; _i++) {
                var field = _a[_i];
                var fieldName = field.name.replace(/[^A-Z0-9]+/ig, '_');
                this.measuresNames[field.name] = fieldName;
                this.measuresNames[fieldName] = field.name;
                if ((this.chartSettings.chartSeries.type === 'Polar' || this.chartSettings.chartSeries.type === 'Radar')) {
                    this.measuresNames[field.caption ? field.caption : field.name] = field.name;
                }
            }
        }
        else if (this.parent.chart) {
            if (this.parent.element.querySelector('.e-chart')) {
                this.parent.chart.series = [];
                this.parent.chart.rows = [];
                this.parent.chart.primaryXAxis.title = '';
                this.parent.chart.primaryYAxis.title = '';
                this.parent.chart.primaryXAxis.multiLevelLabels = [];
                this.parent.chart.primaryYAxis.multiLevelLabels = [];
                if (this.parent.chart.axes.length > 0) {
                    this.parent.chart.axes[0].title = '';
                }
                this.parent.chart.primaryXAxis.zoomFactor = isNullOrUndefined(this.parent.chartSettings.primaryXAxis.zoomFactor)
                    ? 1 : this.parent.chartSettings.primaryXAxis.zoomFactor;
            }
            else if (this.parent.element.querySelector('.e-accumulationchart')) {
                this.parent.chart.series[0].dataSource = [{}];
                this.parent.chart.series[0].dataLabel = {};
            }
            this.parent.chart.refresh();
            return;
        }
        else {
            this.parent.appendChartElement();
            if (this.parent.enableVirtualization && this.isChartInitial) {
                this.isChartInitial = false;
                this.parent.onContentReady();
            }
            this.parent.notify(events.contentReady, {});
            return;
        }
        this.columnGroupObject = {};
        this.accEmptyPoint = false;
        var pivotValues = this.engineModule.pivotValues;
        this.currentMeasure = (chartSettings.enableMultipleAxis && this.accumulationType.indexOf(chartSettings.chartSeries.type) < 0 && this.chartSettings.chartSeries.type !== 'Pareto') ? this.measureList[0] :
            (((chartSettings.value === '' || this.dataSourceSettings.values.filter(function (item) {
                return item.name === chartSettings.value;
            }).length === 0) && this.dataSourceSettings.values.length > 0) ? this.dataSourceSettings.values[0].name : chartSettings.value);
        var totColIndex = this.getColumnTotalIndex(pivotValues);
        var rKeys = Object.keys(pivotValues);
        var prevLevel;
        var firstLevelUName;
        var levelCollection = {};
        var prevCell;
        var integratedLevel = 0;
        var indexCount = -0.5;
        this.headerColl = {};
        this.maxLevel = 0;
        var levelPos = {};
        var lastHierarchy = '';
        var lastDimension = '';
        var memberCell;
        var drillDimension = '';
        this.chartSeriesInfo = {};
        this.selectedLegend = 0;
        var isDrill = false;
        var measureNames = {};
        var isValidHeader = false;
        var delimiter = this.parent.dataSourceSettings.valueSortSettings.headerDelimiter;
        for (var _b = 0, _c = this.dataSourceSettings.values; _b < _c.length; _b++) {
            var field = _c[_b];
            var fieldName = field.name;
            measureNames[fieldName] = field.caption ? field.caption : fieldName;
            measureNames[field.caption ? field.caption : fieldName] = fieldName;
        }
        if (this.parent.dataType === 'olap') {
            var fieldPosition = [];
            levelPos = this.groupHierarchyWithLevels(pivotValues, fieldPosition);
            lastHierarchy = fieldPosition[fieldPosition.length - 1];
            lastDimension = (this.measurePos === (fieldPosition.length - 1) && fieldPosition.length > 1) ?
                fieldPosition[fieldPosition.length - 2] : lastHierarchy;
            drillDimension = lastDimension;
        }
        var reductionLevel = 0;
        var reductionLevelCount = 0;
        var finalReductionLevel = 0;
        var rowsInclude = false;
        var ignoreCount = 0;
        var rowReduction = 0;
        var previousHeader = 0;
        for (var _d = 0, rKeys_1 = rKeys; _d < rKeys_1.length; _d++) {
            var rKey = rKeys_1[_d];
            var rowIndex = Number(rKey);
            var drillMem = void 0;
            var previousRow = false;
            var firstRowCell = void 0;
            var indexReduction = void 0;
            if (rowsInclude) {
                firstRowCell = pivotValues[rowIndex - rowReduction][this.parent.engineModule.rowMaxLevel];
            }
            else {
                firstRowCell = pivotValues[rowIndex] &&
                    pivotValues[rowIndex][this.parent.gridSettings.layout === 'Tabular' ?
                        this.parent.engineModule.rowMaxLevel : 0];
            }
            if (firstRowCell) {
                indexReduction = rowReduction === firstRowCell.level ? 1 : (rowReduction + 1);
            }
            if (this.parent.gridSettings.layout === 'Tabular' && (!this.parent.dataSourceSettings.showSubTotals ||
                (!this.parent.dataSourceSettings.showRowSubTotals && this.parent.dataSourceSettings.showColumnSubTotals))) {
                if (firstRowCell && pivotValues[rowIndex - (rowReduction === firstRowCell.level ? 1 : (rowReduction + 1))] &&
                    pivotValues[rowIndex - indexReduction][this.parent.engineModule.rowMaxLevel]) {
                    var previousRowCell = rowsInclude ?
                        pivotValues[rowIndex - (rowReduction + 1)][this.parent.engineModule.rowMaxLevel]
                        : pivotValues[rowIndex - indexReduction][this.parent.engineModule.rowMaxLevel];
                    var previousRowLevelName = previousRowCell.valueSort.levelName;
                    var previousRowLevelNameCollection = previousRowLevelName.split(delimiter);
                    var firstRowLevelName = firstRowCell.valueSort.levelName;
                    var levelNameCollection = firstRowLevelName.split(delimiter);
                    var previousRowTextCollection = previousRowCell.formattedText.split(' ');
                    drillMem = PivotUtil.isMemberDrilled(previousRowCell, previousRowTextCollection, this.parent.dataSourceSettings.drilledMembers);
                    for (var z = ((previousRowLevelNameCollection.length - 2) - previousHeader); z >= 0; z--) {
                        if (previousRowLevelNameCollection[z] !==
                            levelNameCollection[z] && !drillMem) {
                            if (ignoreCount !== 1) {
                                firstRowCell = rowsInclude ? pivotValues[rowIndex - (rowReduction + 1)][z] :
                                    pivotValues[rowIndex - (rowReduction === firstRowCell.level ? 1 : (rowReduction + 1))][z];
                                previousRow = true;
                                rowsInclude = true;
                                ignoreCount++;
                                rowReduction++;
                                var rowKeys = Number(rKeys[rKeys.length - 1]) + 1;
                                rKeys[rKeys.length] = rowKeys.toString();
                                if (previousRowLevelNameCollection[z - 1] && previousRowLevelNameCollection[z - 1] !==
                                    levelNameCollection[z - 1]) {
                                    ignoreCount = 0;
                                    previousHeader++;
                                }
                                else {
                                    previousHeader = 0;
                                }
                            }
                            else {
                                ignoreCount--;
                            }
                            break;
                        }
                    }
                }
            }
            if (!isNullOrUndefined(pivotValues[rowIndex - rowReduction])) {
                var colIndex = this.parent.gridSettings.layout === 'Tabular' ? this.parent.engineModule.rowMaxLevel : 0;
                var header = pivotValues[rowIndex - rowReduction][colIndex];
                var valueSort = header && header.valueSort && !isNullOrUndefined(header.valueSort.levelName) ?
                    header.valueSort.levelName.toString().split(delimiter) : undefined;
                isValidHeader = false;
                if (valueSort && valueSort[0] !== 'Grand Total') {
                    if ((chartSettings.enableMultipleAxis && this.accumulationType.indexOf(chartSettings.chartSeries.type) < 0 && this.chartSettings.chartSeries.type !== 'Pareto') ||
                        valueSort.indexOf(measureNames[this.currentMeasure]) > -1) {
                        isValidHeader = true;
                    }
                    if (!isValidHeader) {
                        for (var _e = 0, valueSort_1 = valueSort; _e < valueSort_1.length; _e++) {
                            var levelName = valueSort_1[_e];
                            if (measureNames[levelName]) {
                                isValidHeader = true;
                                break;
                            }
                        }
                        isValidHeader = isValidHeader ? false : true;
                    }
                }
                if (header && header.axis === 'row' && (this.dataSourceSettings.rows.length === 0 ? true :
                    (header.type !== 'grand sum' && isValidHeader))) {
                    if (this.parent.gridSettings.layout !== 'Tabular') {
                        if (firstRowCell.isSum) {
                            continue;
                        }
                    }
                    var tupInfo = this.parent.dataType === 'olap' ?
                        this.engineModule.tupRowInfo[firstRowCell.ordinal] : undefined;
                    var fieldPos = -1;
                    var currrentLevel = firstRowCell.level;
                    if (this.parent.dataType === 'olap') {
                        isDrill = firstRowCell.hierarchy === '[Measures]' ? isDrill : this.isAttributeDrill(firstRowCell.hierarchy, tupInfo.drillInfo);
                        drillDimension = drillDimension === lastDimension ? lastDimension : (firstRowCell.hierarchy === '[Measures]' || firstRowCell.isNamedSet || (this.engineModule.fieldList[firstRowCell.hierarchy] && !this.engineModule.fieldList[firstRowCell.hierarchy].hasAllMember)) ? lastDimension : drillDimension;
                        fieldPos = tupInfo.drillInfo.length - 1;
                        if (firstRowCell.memberType !== 3 && (tupInfo.measureName ?
                            tupInfo.measureName === this.dataSourceSettings.values[0].name : true)) {
                            firstLevelUName = firstLevelUName === undefined ? firstRowCell.levelUniqueName : firstLevelUName;
                            integratedLevel = firstLevelUName === firstRowCell.levelUniqueName ? 0 : integratedLevel;
                            levelCollection = integratedLevel === 0 ? {} : levelCollection;
                            integratedLevel = (prevCell && firstLevelUName !== firstRowCell.levelUniqueName) ?
                                (prevCell.hierarchy === firstRowCell.hierarchy ?
                                    (integratedLevel + (firstRowCell.level - prevCell.level)) :
                                    (isNullOrUndefined(levelCollection[firstRowCell.levelUniqueName]) ?
                                        (levelPos[firstRowCell.hierarchy].start) :
                                        levelCollection[firstRowCell.levelUniqueName])) : integratedLevel;
                            levelCollection[firstRowCell.levelUniqueName] = integratedLevel;
                            currrentLevel = integratedLevel;
                            indexCount += (prevCell && drillDimension === prevCell.hierarchy && !(prevCell.isDrilled && prevCell.hasChild))
                                ? 1 : 0;
                            drillDimension = isDrill ? firstRowCell.hierarchy : lastDimension;
                            prevLevel = integratedLevel;
                            prevCell = firstRowCell;
                        }
                    }
                    else if (firstRowCell.type !== 'value') {
                        if (this.parent.gridSettings.layout === 'Tabular') {
                            var firstRowLevelName = firstRowCell.valueSort.levelName;
                            var levelNameCollection = firstRowLevelName.split(delimiter);
                            var formattedTextCollection = firstRowCell.formattedText.split(' ');
                            drillMem = PivotUtil.isMemberDrilled(firstRowCell, levelNameCollection, this.parent.dataSourceSettings.drilledMembers);
                            var valueSortIndex = (valueSort.length - 2) !== (this.parent.engineModule.rowMaxLevel - 1) ?
                                (valueSort.length - 2) : this.parent.engineModule.rowMaxLevel - 1;
                            for (var k = 0; k <= this.parent.engineModule.rowMaxLevel; k++) {
                                if (this.headerColl[indexCount] && this.headerColl[indexCount][k] ||
                                    previousRow) {
                                    if (firstRowCell.isSum || previousRow) {
                                        if (firstRowCell.level > 0) {
                                            indexCount = indexCount - (firstRowCell.level === this.parent.engineModule.rowMaxLevel - 1 ?
                                                reductionLevel - 1 : reductionLevelCount - 1);
                                            firstRowCell.formattedText = (!this.parent.dataSourceSettings.showSubTotals ||
                                                (!this.parent.dataSourceSettings.showRowSubTotals &&
                                                    this.parent.dataSourceSettings.showColumnSubTotals)) ? firstRowCell.formattedText :
                                                formattedTextCollection.length > 2 ?
                                                    formattedTextCollection.slice(0, formattedTextCollection.length - 1).join(' ') :
                                                    formattedTextCollection[0];
                                            firstRowCell.hasChild = true;
                                            break;
                                        }
                                        else {
                                            indexCount = indexCount - (finalReductionLevel - 1);
                                            firstRowCell.formattedText = (!this.parent.dataSourceSettings.showSubTotals ||
                                                (!this.parent.dataSourceSettings.showRowSubTotals &&
                                                    this.parent.dataSourceSettings.showColumnSubTotals)) ? firstRowCell.formattedText :
                                                formattedTextCollection.length > 2 ?
                                                    formattedTextCollection.slice(0, formattedTextCollection.length - 1).join(' ') :
                                                    formattedTextCollection[0];
                                            firstRowCell.hasChild = true;
                                            break;
                                        }
                                    }
                                    else {
                                        if (this.headerColl[indexCount][k] && valueSort[valueSortIndex] !==
                                            this.headerColl[indexCount][k].name) {
                                            indexCount++;
                                            break;
                                        }
                                    }
                                }
                            }
                            if (!firstRowCell.isSum && !previousRow) {
                                reductionLevel++;
                                reductionLevelCount++;
                                finalReductionLevel++;
                            }
                            if (!this.parent.dataSourceSettings.expandAll) {
                                firstRowCell.isDrilled = drillMem ? true : false;
                            }
                            else {
                                firstRowCell.isDrilled = drillMem ? false : true;
                            }
                        }
                        else {
                            if (!(prevLevel === undefined || prevLevel < currrentLevel)) {
                                indexCount++;
                            }
                        }
                        prevLevel = currrentLevel;
                    }
                    this.maxLevel = currrentLevel > this.maxLevel ? currrentLevel : this.maxLevel;
                    var name_1 = this.parent.dataType === 'olap' ? firstRowCell.formattedText :
                        (firstRowCell.actualText ? firstRowCell.actualText.toString() : firstRowCell.formattedText.toString());
                    var values = this.engineModule.fieldList[this.currentMeasure];
                    var text = this.parent.dataSourceSettings.rows.length === 0 ? this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(values.aggregateType) + ' ' +
                        this.parent.localeObj.getConstant('of') + ' ' + (!isNullOrUndefined(values.caption) ? values.caption : values.name) : firstRowCell.formattedText ? firstRowCell.formattedText.toString() : name_1;
                    var caption = (firstRowCell.hasChild && !firstRowCell.isNamedSet) ?
                        ((firstRowCell.isDrilled ? ' - ' : ' + ') + text) : text;
                    var levelName = tupInfo ? tupInfo.uNameCollection : firstRowCell.valueSort.levelName.toString();
                    var cellInfo = {
                        name: name_1,
                        text: caption,
                        hasChild: firstRowCell.hasChild,
                        isDrilled: firstRowCell.isDrilled,
                        levelName: levelName,
                        level: currrentLevel,
                        fieldName: firstRowCell.valueSort.axis ? firstRowCell.valueSort.axis.toString() : '',
                        rowIndex: rowIndex - rowReduction,
                        colIndex: 0,
                        cell: firstRowCell
                    };
                    if (this.parent.dataType === 'olap' ? firstRowCell.memberType !== 3 : firstRowCell.type !== 'value') {
                        if (this.headerColl[indexCount]) {
                            this.headerColl[indexCount][currrentLevel] = cellInfo;
                        }
                        else {
                            this.headerColl[indexCount] = {};
                            this.headerColl[indexCount][currrentLevel] = cellInfo;
                        }
                        if (this.parent.gridSettings.layout === 'Tabular') {
                            if (firstRowCell.isSum || previousRow) {
                                if (firstRowCell.level > 0) {
                                    indexCount = indexCount + (firstRowCell.level === this.parent.engineModule.rowMaxLevel - 1 ?
                                        reductionLevel - 1 : reductionLevelCount - 1);
                                }
                                else {
                                    indexCount = indexCount + (finalReductionLevel - 1);
                                }
                            }
                            if (firstRowCell.level === 0) {
                                reductionLevelCount = 0;
                                reductionLevel = 0;
                                finalReductionLevel = 0;
                            }
                            else if (firstRowCell.level === this.parent.engineModule.rowMaxLevel - 1) {
                                reductionLevel = 0;
                            }
                            else if (firstRowCell.level < this.parent.engineModule.rowMaxLevel - 1 && firstRowCell.level !== 0) {
                                reductionLevel = 0;
                                reductionLevelCount = 0;
                            }
                        }
                    }
                    var rows = this.parent.gridSettings.layout === 'Tabular' ? pivotValues[rowIndex - rowReduction]
                        : pivotValues[rowIndex];
                    var cKeys = Object.keys(rows);
                    var prevMemberCell = void 0;
                    if (this.parent.dataType === 'olap') {
                        memberCell = firstRowCell.memberType !== 3 ? firstRowCell : memberCell;
                    }
                    else {
                        memberCell = firstRowCell.type !== 'value' ? firstRowCell : memberCell;
                        if (firstRowCell.type !== 'value') {
                            memberCell = firstRowCell;
                        }
                        else {
                            var valueSort_2 = firstRowCell && firstRowCell.valueSort && firstRowCell.valueSort.levelName &&
                                firstRowCell.valueSort.levelName.toString().split(delimiter);
                            var levelName_1 = void 0;
                            if (valueSort_2 && valueSort_2.length > 0) {
                                valueSort_2.splice(valueSort_2.length - 1, 1);
                                levelName_1 = valueSort_2.join(delimiter);
                            }
                            if ((this.parent.dataSourceSettings.valueIndex <= 0 || this.engineModule.valueAxis &&
                                this.dataSourceSettings.rows.length === this.engineModule.measureIndex) ||
                                isNullOrUndefined(memberCell.valueSort) || (levelName_1 === memberCell.valueSort.levelName)) {
                                memberCell = memberCell;
                            }
                            else {
                                var prevIndex = rowIndex;
                                while (prevIndex > -1) {
                                    if (pivotValues[prevIndex] && pivotValues[prevIndex][0] &&
                                        pivotValues[prevIndex][0].valueSort &&
                                        pivotValues[prevIndex][0].valueSort.levelName === levelName_1) {
                                        memberCell = pivotValues[prevIndex][0];
                                        prevIndex = 0;
                                    }
                                    prevIndex--;
                                }
                            }
                        }
                    }
                    for (var f = this.parent.gridSettings.layout === 'Tabular' ? this.parent.engineModule.rowMaxLevel : 0; f < cKeys.length; f++) {
                        var cKey = cKeys[f];
                        var cellIndex = Number(cKey);
                        var cell = pivotValues[rowIndex - rowReduction][cellIndex];
                        var measureAllow = isNullOrUndefined(cell.rowHeaders) ? this.dataSourceSettings.rows.length === 0 : true;
                        var actualText = (this.parent.dataType === 'olap' && tupInfo && tupInfo.measureName) ?
                            tupInfo.measureName : cell.actualText;
                        if (!(this.parent.dataType === 'olap' && cell.isGrandSum) && !totColIndex[cell.colIndex] && cell.axis === 'value' && firstRowCell.type !== 'header' &&
                            actualText !== '' && ((chartSettings.enableMultipleAxis && this.accumulationType.indexOf(chartSettings.chartSeries.type) < 0 && this.chartSettings.chartSeries.type !== 'Pareto') ? true : actualText === this.currentMeasure)) {
                            if (isNullOrUndefined(firstRowCell.members)) {
                                firstRowCell.members = [];
                            }
                            if (this.parent.dataType === 'olap' ? ((lastHierarchy === firstRowCell.hierarchy || isDrill) ?
                                ((firstRowCell.memberType === 3 && prevMemberCell) ?
                                    (fieldPos === this.measurePos ? (prevMemberCell.isDrilled && prevMemberCell.hasChild) : true) :
                                    (firstRowCell.isDrilled && firstRowCell.hasChild)) : true)
                                : (((firstRowCell.type === 'value' && prevMemberCell) ?
                                    (!isNullOrUndefined(prevMemberCell.members) && prevMemberCell.hasChild &&
                                        prevMemberCell.isDrilled) : firstRowCell.hasChild && firstRowCell.isDrilled) ||
                                    !measureAllow)) {
                                break;
                            }
                            if (this.parent.dataType === 'olap' && cell.isSum === true && this.parent.dataSourceSettings.valueAxis === 'row') {
                                continue;
                            }
                            var colHeaders = '';
                            if (this.parent.dataType === 'olap') {
                                colHeaders = cell.columnHeaders.toString().split(/~~|::/).join(' - ');
                            }
                            else {
                                var values_1 = cell.columnHeaders.toString().split(delimiter);
                                colHeaders = PivotUtil.formatChartHeaders(values_1, this, true, cell);
                            }
                            var rowHeaders = '';
                            if (this.parent.dataType === 'olap') {
                                rowHeaders = cell.rowHeaders.toString().split(/~~|::/).join(' - ');
                            }
                            else {
                                var values_2 = cell.rowHeaders.toString().split(delimiter);
                                rowHeaders = PivotUtil.formatChartHeaders(values_2, this, false, cell);
                            }
                            var columnSeries = colHeaders + ' | ' + actualText;
                            this.chartSeriesInfo[colHeaders] = { uniqueName: colHeaders, caption: cell.hierarchyName && cell.hierarchyName.toString().split(delimiter).join(' - '), colorIndex: [] };
                            this.chartSeriesInfo[this.chartSeriesInfo[colHeaders].caption] =
                                this.chartSeriesInfo[colHeaders];
                            var yValue = (this.parent.dataType === 'pivot' ? (this.engineModule.aggregatedValueMatrix[rowIndex] &&
                                !isNullOrUndefined(this.engineModule.aggregatedValueMatrix[rowIndex][cellIndex])) ?
                                Number(this.engineModule.aggregatedValueMatrix[rowIndex][cellIndex]) :
                                (!isNullOrUndefined(cell.value) ? Number(cell.value) : cell.value) : (!isNullOrUndefined(cell.value)
                                ? Number(cell.value) : cell.value));
                            yValue = yValue === Infinity ? null : yValue;
                            if (yValue === 0) {
                                this.accEmptyPoint = true;
                            }
                            if (this.columnGroupObject[columnSeries]) {
                                this.columnGroupObject[columnSeries].push({
                                    x: this.dataSourceSettings.rows.length === 0 ? firstRowCell.formattedText : rowHeaders,
                                    y: yValue,
                                    rIndex: rowIndex - rowReduction,
                                    cIndex: cellIndex
                                });
                            }
                            else {
                                this.columnGroupObject[columnSeries] = [{
                                        x: this.dataSourceSettings.rows.length === 0 ? firstRowCell.formattedText : rowHeaders,
                                        y: yValue,
                                        rIndex: rowIndex - rowReduction,
                                        cIndex: cellIndex
                                    }];
                            }
                        }
                        prevMemberCell = memberCell;
                    }
                }
            }
        }
        this.refreshChart();
    };
    /**
     * Refreshing chart based on the updated chartSettings.
     *
     * @returns {void}
     * @hidden
     */
    PivotChart.prototype.refreshChart = function () {
        this.chartSeries = [];
        var prevColorIndex = 0;
        var chartSeriesInfo = {};
        var columnKeys = Object.keys(this.columnGroupObject);
        this.persistSettings = JSON.parse(this.parent.getChartSettings()).chartSettings;
        var seriesColors = this.persistSettings.palettes && this.persistSettings.palettes.length > 0
            ? this.persistSettings.palettes : getSeriesColor(this.chartSettings.theme);
        var delimiter = this.parent.chartSettings.columnDelimiter ? this.parent.chartSettings.columnDelimiter : '-';
        var columnHeader = (this.parent.chartSettings.columnHeader && this.parent.chartSettings.columnHeader !== '') ?
            this.parent.chartSettings.columnHeader.split(delimiter).join(' - ') : '';
        var chartType = this.chartSettings.chartSeries ? this.chartSettings.chartSeries.type : undefined;
        var fieldWithCaption = {};
        for (var i = 0; i < this.parent.dataSourceSettings.values.length; i++) {
            fieldWithCaption[this.parent.dataSourceSettings.values[i].name] =
                !isNullOrUndefined(this.parent.dataSourceSettings.values[i].caption) ?
                    this.parent.dataSourceSettings.values[i].caption : undefined;
        }
        if (this.accumulationType.indexOf(chartType) > -1 && columnKeys.length > 0) {
            this.currentColumn = (columnKeys.indexOf(columnHeader + ' | ' + this.currentMeasure) > -1 && columnHeader !== undefined) ? columnHeader + ' | ' + this.currentMeasure : columnKeys[0];
            var currentSeries = {};
            currentSeries = this.persistSettings.chartSeries ? this.frameChartSeries(this.persistSettings.chartSeries) : currentSeries;
            if ((isNullOrUndefined(currentSeries.palettes) || currentSeries.palettes.length === 0) &&
                !isNullOrUndefined(this.persistSettings.palettes) && this.persistSettings.palettes.length > 0) {
                currentSeries.palettes = this.persistSettings.palettes;
            }
            currentSeries.dataSource = this.columnGroupObject[this.currentColumn];
            currentSeries.xName = 'x';
            currentSeries.yName = 'y';
            if (this.persistSettings.chartSeries && this.persistSettings.chartSeries.dataLabel) {
                currentSeries.dataLabel = this.persistSettings.chartSeries.dataLabel;
                currentSeries.dataLabel.name = 'x';
            }
            else {
                currentSeries.dataLabel = { visible: true, position: 'Outside', name: 'x' };
                this.parent.setProperties({ chartSettings: { chartSeries: { dataLabel: { visible: true, position: 'Outside' } } } }, true);
            }
            if (this.accEmptyPoint && currentSeries.emptyPointSettings) {
                currentSeries.emptyPointSettings.mode = 'Zero';
            }
            else if (this.accEmptyPoint) {
                currentSeries.emptyPointSettings = { mode: 'Zero' };
            }
            currentSeries.name = this.currentColumn;
            if (chartType === 'Doughnut') {
                currentSeries.type = 'Pie';
                currentSeries.innerRadius = this.chartSettings.chartSeries.innerRadius ? this.chartSettings.chartSeries.innerRadius : '40%';
            }
            else if (chartType === 'Pie') {
                currentSeries.innerRadius = this.chartSettings.chartSeries.innerRadius ? this.chartSettings.chartSeries.innerRadius : '0';
            }
            this.chartSeries = this.chartSeries.concat(currentSeries);
        }
        else {
            for (var _i = 0, columnKeys_1 = columnKeys; _i < columnKeys_1.length; _i++) {
                var key = columnKeys_1[_i];
                var currentSeries = {};
                currentSeries = this.persistSettings.chartSeries ? this.frameChartSeries(this.persistSettings.chartSeries) : currentSeries;
                if (!isNullOrUndefined(currentSeries.palettes) &&
                    currentSeries.palettes.length > 0 && (isNullOrUndefined(this.persistSettings.palettes) ||
                    this.persistSettings.palettes.length === 0)) {
                    this.chartSettings.palettes = currentSeries.palettes;
                }
                for (var i = 0; i < this.columnGroupObject[key].length; i++) {
                    var values = this.engineModule.fieldList[this.currentMeasure];
                    this.columnGroupObject[key][i].x = (this.parent.dataSourceSettings.rows.length === 0 && !this.chartSettings.showMultiLevelLabels) ? this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(values.aggregateType) + ' ' +
                        this.parent.localeObj.getConstant('of') + ' ' + (!isNullOrUndefined(values.caption) ? values.caption : values.name) : this.columnGroupObject[key][i].x === '' ? this.parent.localeObj.getConstant('blank') : this.columnGroupObject[key][i].x;
                }
                currentSeries.dataSource = this.columnGroupObject[key];
                currentSeries.xName = 'x';
                currentSeries.yName = 'y';
                currentSeries.visible = true;
                var multiAxisKey = void 0;
                var fieldName = void 0;
                var currentSeriesName = void 0;
                for (var i = 0, j = key.split(' | '); i < j.length; i++) {
                    if (this.measuresNames && this.measuresNames[j[i]]) {
                        fieldName = j[i];
                        currentSeriesName = key.split((' | ' + fieldName))[0];
                    }
                }
                if (this.chartSettings.enableMultipleAxis) {
                    var fieldCaptionName = fieldName;
                    fieldCaptionName = !isNullOrUndefined(fieldWithCaption[fieldCaptionName]) ?
                        fieldWithCaption[fieldCaptionName] : fieldCaptionName;
                    multiAxisKey = currentSeriesName + ' | ' + fieldCaptionName;
                }
                currentSeries.name = this.chartSettings.enableMultipleAxis ? multiAxisKey : currentSeriesName;
                if (this.chartSettings.showPointColorByMembers && this.chartSettings.enableMultipleAxis) {
                    currentSeries.name = currentSeriesName;
                    var seriesName = this.chartSeriesInfo[currentSeries.name].caption;
                    currentSeries.name = seriesName !== undefined && seriesName !== null ? seriesName : currentSeries.name;
                    if (!chartSeriesInfo[currentSeries.name]) {
                        prevColorIndex = seriesColors[prevColorIndex] ? prevColorIndex : 0;
                        chartSeriesInfo[currentSeries.name] = { name: currentSeries.name, color: seriesColors[prevColorIndex] };
                        currentSeries.fill = seriesColors[prevColorIndex++];
                        this.chartSeriesInfo[currentSeries.name].colorIndex.push(this.selectedLegend++);
                    }
                    else {
                        currentSeries.fill = chartSeriesInfo[currentSeries.name].color;
                        this.chartSeriesInfo[currentSeries.name].colorIndex.push(this.selectedLegend++);
                        currentSeries.name = undefined;
                    }
                }
                if (['Radar', 'Polar'].indexOf(chartType) < 0) {
                    var measure = fieldName;
                    currentSeries.tooltipMappingName = this.measuresNames[measure];
                    currentSeries.yAxisName = (this.chartSettings.enableMultipleAxis && this.chartSettings.multipleAxisMode === 'Combined') ?
                        this.measureList.join('_') : this.measuresNames[measure] ? this.measuresNames[measure] : measure;
                }
                if (this.persistSettings.chartSeries && this.persistSettings.chartSeries.emptyPointSettings) {
                    currentSeries.emptyPointSettings = this.persistSettings.chartSeries.emptyPointSettings;
                }
                if (!currentSeries.emptyPointSettings) {
                    currentSeries.emptyPointSettings = { mode: 'Zero' };
                }
                this.chartSeries = this.chartSeries.concat(currentSeries);
            }
        }
        var seriesEvent = { series: this.chartSeries, cancel: false };
        var pivotChart = this;
        this.parent.trigger(events.chartSeriesCreated, seriesEvent, function (observedArgs) {
            if (!observedArgs.cancel) {
                pivotChart.bindChart();
            }
            else {
                if (pivotChart.element) {
                    remove(pivotChart.element);
                }
                pivotChart.parent.notify(events.contentReady, {});
            }
        });
    };
    PivotChart.prototype.frameObjectWithKeys = function (series) {
        var keys = Object.keys(series);
        var keyPos = 0;
        var framedSeries = {};
        while (keyPos < keys.length) {
            framedSeries[keys[keyPos]] = series[keys[keyPos]];
            keyPos++;
        }
        return framedSeries;
    };
    PivotChart.prototype.frameChartSeries = function (series) {
        var keys = Object.keys(series);
        var keyPos = 0;
        var framedSeries = {};
        while (keyPos < keys.length) {
            if ((this.accumulationType.indexOf(this.parent.chartSettings.chartSeries.type) > -1 && ['fill', 'dashArray', 'width', 'segmentAxis',
                'drawType', 'isClosed', 'segments', 'stackingGroup', 'marker', 'errorBar', 'trendlines', 'minRadius',
                'splineType', 'maxRadius', 'cardinalSplineTension', 'columnWidth', 'columnSpacing', 'cornerRadius'].indexOf(keys[keyPos]) > -1) ||
                (this.accumulationType.indexOf(this.parent.chartSettings.chartSeries.type) < 0 && ['endAngle', 'explode', 'explodeAll', 'explodeIndex',
                    'explodeOffset', 'gapRatio', 'groupMode', 'groupTo', 'neckHeight', 'neckWidth', 'pyramidMode', 'startAngle',
                    'dataLabel', 'innerRadius'].indexOf(keys[keyPos]) > -1)) {
                keyPos++;
                continue;
            }
            framedSeries[keys[keyPos]] = series[keys[keyPos]];
            keyPos++;
        }
        return framedSeries;
    };
    PivotChart.prototype.bindChart = function () {
        this.parent.showWaitingPopup();
        var currentXAxis = this.configXAxis();
        var currentTooltipSettings = this.configTooltipSettings();
        var currentLegendSettings = this.configLegendSettings();
        var currentZoomSettings = this.configZoomSettings();
        var axesWithRows = this.frameAxesWithRows();
        var type = this.chartSettings.chartSeries.type;
        if (this.parent.displayOption.view === 'Both') {
            this.element = this.parent.displayOption.primary === 'Chart' ?
                (this.parent.element.insertBefore((!this.element ?
                    (createElement('div', {
                        className: cls.PIVOTCHART, id: this.parent.element.id + '_chart'
                    }))
                    : this.element), this.parent.element.querySelector('.' + cls.GRID_CLASS))) :
                (this.parent.element.appendChild(!this.element ? (createElement('div', {
                    className: cls.PIVOTCHART, id: this.parent.element.id + '_chart'
                })) : this.element));
        }
        else if (!this.element) {
            this.element = this.parent.element.appendChild(createElement('div', {
                className: cls.PIVOTCHART, id: this.parent.element.id + '_chart'
            }));
        }
        if (!this.chartElement && this.parent.chartSettings.enableScrollOnMultiAxis && this.parent.chartSettings.enableMultipleAxis && this.chartSettings.chartSeries.type !== 'Pareto') {
            this.parent.element.querySelector('.' + cls.PIVOTCHART).innerHTML = '';
            this.chartElement = this.parent.element.querySelector('.' + cls.PIVOTCHART).appendChild(createElement('div', {
                className: cls.PIVOTCHART_INNER, id: this.parent.element.id + '_chartInner'
            }));
        }
        if (this.parent.element.querySelector('.' + cls.PIVOTCHART_INNER)) {
            this.parent.element.querySelector('.' + cls.PIVOTCHART_INNER).innerHTML = '';
        }
        if (this.parent.showGroupingBar) {
            this.element.style.minWidth = this.parent.minWidth ? this.parent.minWidth + 'px' : '400px !important';
        }
        else {
            this.element.style.minWidth = this.parent.minWidth ? this.parent.minWidth + 'px' : '310px !important';
        }
        var width = this.parent.width.toString();
        if (this.parent.showToolbar && this.parent.grid) {
            width = this.parent.getGridWidthAsNumber().toString();
        }
        var height = this.getChartHeight();
        if (this.parent.chartSettings.enableScrollOnMultiAxis && this.parent.chartSettings.enableMultipleAxis &&
            this.accumulationType.indexOf(type) < 0 && this.chartSettings.chartSeries.type !== 'Pareto') {
            this.parent.element.querySelector('.' + cls.PIVOTCHART).style.height =
                (height === 'auto' ? this.getChartAutoHeight() : height) + 'px';
            this.parent.element.querySelector('.' + cls.PIVOTCHART).style.width = width + 'px';
            if (this.parent.chartSettings.chartSeries.type !== 'Polar' && this.parent.chartSettings.chartSeries.type !== 'Radar') {
                this.parent.element.querySelector('.' + cls.PIVOTCHART).style.overflow = 'auto';
                this.parent.element.querySelector('.' + cls.PIVOTCHART).style.overflowX = 'hidden';
            }
        }
        if (this.parent.chart && ((this.parent.chart.getModuleName() === 'accumulationchart' &&
            this.accumulationType.indexOf(type) < 0) || (this.parent.chart.getModuleName() === 'chart' &&
            this.accumulationType.indexOf(type) > -1 && this.chartSettings.chartSeries.type !== 'Pareto'))) {
            this.parent.chart.destroy();
            if (select('#' + this.parent.element.id + '_chart', this.parent.element)) {
                select('#' + this.parent.element.id + '_chart', this.parent.element).innerHTML = '';
                select('#' + this.parent.element.id + '_chart', this.parent.element).appendChild(createElement('div', {
                    className: cls.PIVOTCHART_INNER, id: this.parent.element.id + '_chartInner'
                }));
            }
        }
        if (!(this.parent.chart && this.parent.chart.element && this.parent.element.querySelector('.e-chart') || this.parent.element.querySelector('.e-accumulationchart')) ||
            (this.parent.toolbarModule && this.parent.toolbarModule.isMultiAxisChange)) {
            if (this.parent.toolbarModule && this.parent.toolbarModule.isMultiAxisChange && this.parent.chart) {
                if (!this.parent.chart.isDestroyed) {
                    this.parent.chart.destroy();
                }
                this.parent.chart = undefined;
                select('#' + this.parent.element.id + '_chart', this.parent.element).innerHTML = '';
                select('#' + this.parent.element.id + '_chart', this.parent.element).appendChild(createElement('div', {
                    className: cls.PIVOTCHART_INNER, id: this.parent.element.id + '_chartInner'
                }));
                this.parent.toolbarModule.isMultiAxisChange = false;
            }
            Chart.Inject(ColumnSeries, StackingColumnSeries, RangeColumnSeries, BarSeries, StackingBarSeries, ScatterSeries, BubbleSeries, LineSeries, StepLineSeries, SplineSeries, SplineAreaSeries, MultiColoredLineSeries, PolarSeries, RadarSeries, AreaSeries, RangeAreaSeries, StackingAreaSeries, StepAreaSeries, StackingLineSeries, MultiColoredAreaSeries, ParetoSeries, Legend, Tooltip, Category, MultiLevelLabel, ScrollBar, Zoom, Export, Crosshair, Selection, StripLine, DataLabel);
            AccumulationChart.Inject(PieSeries, FunnelSeries, PyramidSeries, AccumulationDataLabel, AccumulationLegend, AccumulationTooltip, Export);
            if (this.accumulationType.indexOf(type) > -1) {
                this.parent.chart = new AccumulationChart({
                    series: this.chartSeries.length > 0 ? this.chartSeries : [{}],
                    legendSettings: currentLegendSettings,
                    tooltip: currentTooltipSettings,
                    width: width,
                    height: height.toString(),
                    title: this.chartSettings.title,
                    enableSmartLabels: this.chartSettings.enableSmartLabels,
                    center: this.chartSettings.pieCenter,
                    enableBorderOnMouseMove: this.chartSettings.enableBorderOnMouseMove,
                    highlightMode: this.chartSettings.highlightMode,
                    highlightPattern: this.chartSettings.highlightPattern,
                    titleStyle: this.chartSettings.titleStyle,
                    subTitle: this.chartSettings.subTitle,
                    subTitleStyle: this.chartSettings.subTitleStyle,
                    margin: this.chartSettings.margin,
                    border: this.chartSettings.border,
                    background: this.chartSettings.background,
                    theme: this.chartSettings.theme,
                    selectionMode: this.chartSettings.accumulationSelectionMode,
                    isMultiSelect: this.chartSettings.isMultiSelect,
                    enableExport: this.chartSettings.enableExport,
                    selectedDataIndexes: this.chartSettings.selectedDataIndexes,
                    enableAnimation: this.chartSettings.enableAnimation,
                    useGroupingSeparator: this.chartSettings.useGroupingSeparator,
                    locale: this.parent.locale,
                    enableRtl: this.parent.enableRtl,
                    beforePrint: this.beforePrint.bind(this),
                    animationComplete: this.animationComplete.bind(this),
                    legendRender: this.legendRender.bind(this),
                    textRender: this.textRender.bind(this),
                    pointRender: this.pointRender.bind(this),
                    seriesRender: this.seriesRender.bind(this),
                    chartMouseMove: this.chartMouseMove.bind(this),
                    chartMouseClick: this.chartMouseClick.bind(this),
                    pointMove: this.pointMove.bind(this),
                    pointClick: this.pointClick.bind(this),
                    chartMouseLeave: this.chartMouseLeave.bind(this),
                    chartMouseDown: this.chartMouseDown.bind(this),
                    chartMouseUp: this.chartMouseUp.bind(this),
                    tooltipRender: this.tooltipRender.bind(this),
                    loaded: this.loaded.bind(this),
                    load: this.load.bind(this),
                    resized: this.resized.bind(this)
                });
            }
            else {
                this.parent.chart = new Chart({
                    series: this.chartSeries.length > 0 ? this.chartSeries : [{}],
                    legendSettings: currentLegendSettings,
                    tooltip: currentTooltipSettings,
                    zoomSettings: currentZoomSettings,
                    axes: (type === 'Polar' || type === 'Radar') ? [] : axesWithRows.axes,
                    rows: (type === 'Polar' || type === 'Radar') ? [{}] :
                        (type === 'Bar' || type === 'StackingBar' || type === 'StackingBar100' || type === 'Pareto' &&
                            this.chartSettings.enableMultipleAxis) ? [{ height: '100%' }] : axesWithRows.rows,
                    columns: (type === 'Polar' || type === 'Radar') ? [{}] :
                        (type === 'Bar' || type === 'StackingBar' || type === 'StackingBar100' &&
                            this.chartSettings.enableMultipleAxis) ? axesWithRows.columns : [{ width: '100%' }],
                    primaryYAxis: (type === 'Polar' || type === 'Radar') ? axesWithRows.axes[0] : { visible: false },
                    primaryXAxis: currentXAxis,
                    width: width,
                    height: (this.parent.chartSettings.chartSeries.type !== 'Polar' &&
                        this.parent.chartSettings.chartSeries.type !== 'Radar' && this.parent.chartSettings.enableScrollOnMultiAxis &&
                        this.parent.chartSettings.enableMultipleAxis && this.parent.chartSettings.chartSeries.type !== 'Pareto' && this.parent.dataSourceSettings.values.length > 0) ?
                        Number(height) > (this.parent.dataSourceSettings.values.length * 235) + 100 ? isNaN(Number(height)) ?
                            height.toString() : (Number(height) - 5).toString() :
                            (!isNaN(Number(height)) || this.parent.dataSourceSettings.values.length > 1) ?
                                ((this.parent.dataSourceSettings.values.length * 235) + 100).toString() :
                                height.toString() : height.toString(),
                    title: this.chartSettings.title,
                    titleStyle: this.chartSettings.titleStyle,
                    subTitle: this.chartSettings.subTitle,
                    subTitleStyle: this.chartSettings.subTitleStyle,
                    margin: this.chartSettings.margin,
                    border: this.chartSettings.border,
                    background: this.chartSettings.background,
                    chartArea: !isNullOrUndefined(this.persistSettings.chartArea) ? this.persistSettings.chartArea :
                        this.chartSettings.chartArea,
                    palettes: this.chartSettings.palettes,
                    theme: this.chartSettings.theme,
                    crosshair: this.chartSettings.crosshair,
                    selectionMode: this.chartSettings.selectionMode,
                    isMultiSelect: this.chartSettings.isMultiSelect,
                    enableExport: this.chartSettings.enableExport,
                    selectedDataIndexes: this.chartSettings.selectedDataIndexes,
                    isTransposed: this.chartSettings.isTransposed,
                    enableAnimation: this.chartSettings.enableAnimation,
                    enableCanvas: this.chartSettings.enableCanvas,
                    useGroupingSeparator: this.chartSettings.useGroupingSeparator,
                    description: this.chartSettings.description,
                    tabIndex: this.chartSettings.tabIndex,
                    locale: this.parent.locale,
                    enableRtl: this.parent.enableRtl,
                    enableSideBySidePlacement: this.chartSettings.enableSideBySidePlacement,
                    beforePrint: this.beforePrint.bind(this),
                    animationComplete: this.animationComplete.bind(this),
                    legendRender: this.legendRender.bind(this),
                    textRender: this.textRender.bind(this),
                    pointRender: this.pointRender.bind(this),
                    seriesRender: this.seriesRender.bind(this),
                    chartMouseMove: this.chartMouseMove.bind(this),
                    chartMouseClick: this.chartMouseClick.bind(this),
                    pointMove: this.pointMove.bind(this),
                    pointClick: this.pointClick.bind(this),
                    chartMouseLeave: this.chartMouseLeave.bind(this),
                    chartMouseDown: this.chartMouseDown.bind(this),
                    chartMouseUp: this.chartMouseUp.bind(this),
                    dragComplete: this.dragComplete.bind(this),
                    zoomComplete: this.zoomComplete.bind(this),
                    scrollStart: this.scrollStart.bind(this),
                    scrollEnd: this.scrollEnd.bind(this),
                    scrollChanged: this.scrollChanged.bind(this),
                    tooltipRender: this.tooltipRender.bind(this),
                    legendClick: this.legendClick.bind(this),
                    loaded: this.loaded.bind(this),
                    load: this.load.bind(this),
                    resized: this.resized.bind(this),
                    axisLabelRender: this.axisLabelRender.bind(this),
                    multiLevelLabelClick: this.multiLevelLabelClick.bind(this),
                    axisMultiLabelRender: this.multiLevelLabelRender.bind(this)
                });
            }
            this.parent.chart.isStringTemplate = true;
        }
        else {
            this.parent.chart.series = this.chartSeries;
            this.parent.chart.title = this.parent.chartSettings.title;
            this.parent.chart.subTitle = this.parent.chartSettings.subTitle;
            this.parent.chart.background = this.parent.chartSettings.background;
            this.parent.chart.theme = this.parent.chartSettings.theme;
            this.parent.chart.legendSettings = currentLegendSettings;
            this.parent.chart.selectionMode = this.parent.chartSettings.selectionMode;
            this.parent.chart.enableExport = this.chartSettings.enableExport;
            this.parent.chart.isMultiSelect = this.parent.chartSettings.isMultiSelect;
            this.parent.chart.enableAnimation = this.parent.chartSettings.enableAnimation;
            this.parent.chart.useGroupingSeparator = this.parent.chartSettings.useGroupingSeparator;
            this.parent.chart.highlightPattern = this.parent.chartSettings.highlightPattern;
            if (this.accumulationType.indexOf(type) > -1) {
                this.parent.chart.enableBorderOnMouseMove = this.parent.chartSettings.enableBorderOnMouseMove;
                this.parent.chart.highlightMode = this.parent.chartSettings.highlightMode;
                this.parent.chart.enableSmartLabels = this.parent.chartSettings.enableSmartLabels;
            }
            else {
                this.parent.chart.palettes = this.parent.chartSettings.palettes;
                this.parent.chart.isTransposed = this.parent.chartSettings.isTransposed;
                this.parent.chart.enableSideBySidePlacement = this.parent.chartSettings.enableSideBySidePlacement;
                this.parent.chart.tabIndex = this.parent.chartSettings.tabIndex;
                this.parent.chart.description = this.parent.chartSettings.description;
                this.parent.chart.enableCanvas = this.parent.chartSettings.enableCanvas;
            }
            if (type === 'Polar' || type === 'Radar') {
                this.parent.chart.primaryXAxis = currentXAxis;
                this.parent.chart.primaryYAxis.visible = true;
                this.parent.chart.primaryYAxis = axesWithRows.axes[0];
                this.parent.chart.axes = [];
                this.parent.chart.rows = [{}];
            }
            else if ((this.accumulationType.indexOf(type) < 0) && this.parent.chart.getModuleName() === 'chart') {
                this.parent.chart.primaryYAxis.visible = false;
                this.parent.chart.primaryXAxis = currentXAxis;
                this.parent.chart.axes = axesWithRows.axes;
                if (type === 'Bar' || type === 'StackingBar' || type === 'StackingBar100' &&
                    this.chartSettings.enableMultipleAxis) {
                    this.parent.chart.rows = [{ height: '100%' }];
                    this.parent.chart.columns = axesWithRows.columns;
                }
                else if (type === 'Pareto' && this.chartSettings.enableMultipleAxis) {
                    this.parent.chart.rows = [{ height: '100%' }];
                    this.parent.chart.columns = [{ width: '100%' }];
                }
                else {
                    this.parent.chart.rows = axesWithRows.rows;
                    this.parent.chart.columns = [{ width: '100%' }];
                }
            }
            this.parent.chart.refresh();
            if ((this.accumulationType.indexOf(type) > -1) && this.parent.chart.getModuleName() === 'accumulationchart' && (this.parent.dataSourceSettings.rows.length === 0 || this.parent.dataSourceSettings.columns.length === 0)) {
                this.parent.hideWaitingPopup();
                if (this.parent.pivotFieldListModule) {
                    hideSpinner(this.parent.pivotFieldListModule.fieldListSpinnerElement);
                }
            }
        }
        if (this.parent.chartSettings.enableScrollOnMultiAxis && this.parent.chartSettings.enableMultipleAxis) {
            this.parent.chart.appendTo(select('#' + this.parent.element.id + '_chartInner', this.parent.element));
        }
        else {
            this.parent.chart.appendTo(select('#' + this.parent.element.id + '_chart', this.parent.element));
        }
    };
    PivotChart.prototype.legendClick = function (args) {
        if (this.chartSettings.showPointColorByMembers && this.chartSettings.enableMultipleAxis) {
            var colorIndex = this.chartSeriesInfo[args.legendText].colorIndex;
            for (var i = 1; i < colorIndex.length; i++) {
                args.chart.series[colorIndex[i]].visible = !args.chart.series[colorIndex[i]].visible;
            }
        }
        this.parent.trigger(events.chartLegendClick, args);
    };
    PivotChart.prototype.pointClick = function (args) {
        var dataSource = args.series.dataSource ? args.series.dataSource :
            this.parent.chart.series[args.seriesIndex].dataSource;
        if (((['Pie', 'Funnel', 'Doughnut', 'Pyramid', 'Radar', 'Polar'].indexOf(this.parent.chartSettings.chartSeries.type) > -1) ||
            !this.parent.chartSettings.showMultiLevelLabels) && (this.parent.dataType === 'olap' ? true :
            this.parent.dataSourceSettings.rows.length > 1)) {
            this.pivotIndex = {
                rIndex: dataSource ? dataSource[args.pointIndex].rIndex : undefined,
                cIndex: dataSource ? dataSource[args.pointIndex].cIndex : undefined
            };
            this.creatMenu();
            var pos = this.parent.element.getBoundingClientRect();
            var y = (this.parent.element.querySelector('.e-pivot-toolbar') ?
                this.parent.element.querySelector('.e-pivot-toolbar').clientHeight : 0) +
                (this.parent.element.querySelector('.e-chart-grouping-bar') ?
                    this.parent.element.querySelector('.e-chart-grouping-bar').clientHeight : 0) +
                (window.scrollY || document.documentElement.scrollTop) + pos.top;
            this.accumulationMenu.open(y + args.y, args.x + pos.left + (window.scrollX || document.documentElement.scrollLeft));
        }
        else if ((this.parent.allowDrillThrough || this.parent.editSettings.allowEditing) && this.parent.drillThroughModule) {
            var rIndex = dataSource[args.pointIndex].rIndex;
            var cIndex = dataSource[args.pointIndex].cIndex;
            this.parent.drillThroughModule.executeDrillThrough(this.parent.pivotValues[rIndex][cIndex], rIndex, cIndex);
        }
        this.parent.trigger(events.chartPointClick, args);
    };
    PivotChart.prototype.frameAxesWithRows = function () {
        var axes = [];
        var rows = [];
        var columns = [];
        var yAxisTitles = [];
        var percentChart = this.persistSettings.chartSeries && (this.persistSettings.chartSeries.type === 'StackingColumn100' ||
            this.persistSettings.chartSeries.type === 'StackingBar100' ||
            this.persistSettings.chartSeries.type === 'StackingArea100' ||
            this.persistSettings.chartSeries.type === 'StackingLine100');
        var percentAggregateTypes = ['PercentageOfGrandTotal', 'PercentageOfColumnTotal', 'PercentageOfRowTotal',
            'PercentageOfDifferenceFrom', 'PercentageOfParentRowTotal', 'PercentageOfParentColumnTotal', 'PercentageOfParentTotal'];
        if (this.chartSettings.enableMultipleAxis) {
            var valCnt = 0;
            var divider = (100 / this.dataSourceSettings.values.length) + '%';
            for (var _i = 0, _a = this.dataSourceSettings.values; _i < _a.length; _i++) {
                var item = _a[_i];
                var measureField = this.engineModule.fieldList[item.name];
                var measureAggregatedName = (this.parent.dataType === 'olap' ? '' : (this.parent.localeObj.getConstant(measureField.aggregateType) + ' ' +
                    this.parent.localeObj.getConstant('of') + ' ')) + measureField.caption;
                // let formatSetting: IFormatSettings = this.dataSourceSettings.formatSettings.filter((itm: IFormatSettings) => {
                //     return itm.name === item.name;
                // })[0];
                yAxisTitles.push(measureAggregatedName);
                var formatSetting = void 0;
                for (var _b = 0, _c = this.dataSourceSettings.formatSettings; _b < _c.length; _b++) {
                    var field = _c[_b];
                    if (field.name === item.name) {
                        formatSetting = field;
                        break;
                    }
                }
                var format = PivotUtil.inArray(measureField.aggregateType, percentAggregateTypes) !== -1 ? 'P2' : (formatSetting ? formatSetting.format :
                    this.parent.dataType === 'olap' ? this.getFormat(measureField.formatString) : 'N');
                var resFormat = (this.chartSettings.chartSeries.type === 'Polar' || this.chartSettings.chartSeries.type === 'Radar') ? true : false;
                var currentYAxis = {};
                currentYAxis = this.persistSettings.primaryYAxis ? this.frameObjectWithKeys(this.persistSettings.primaryYAxis) : currentYAxis;
                currentYAxis.labelFormat = currentYAxis.labelFormat ?
                    currentYAxis.labelFormat : (percentChart ? '' : (!resFormat ? format : 'N'));
                currentYAxis.title = currentYAxis.title ? currentYAxis.title :
                    (this.chartSettings.multipleAxisMode === 'Combined') ? yAxisTitles.join(' - ') : measureAggregatedName;
                currentYAxis.zoomFactor = isNullOrUndefined(this.chartSettings.primaryYAxis.zoomFactor) ? 1
                    : this.chartSettings.primaryYAxis.zoomFactor;
                currentYAxis.edgeLabelPlacement = this.chartSettings.primaryYAxis.edgeLabelPlacement ?
                    this.chartSettings.primaryYAxis.edgeLabelPlacement : this.persistSettings.primaryYAxis.edgeLabelPlacement;
                if (this.chartSettings.chartSeries.type === 'Bar' || this.chartSettings.chartSeries.type === 'StackingBar' ||
                    this.chartSettings.chartSeries.type === 'StackingBar100') {
                    currentYAxis.plotOffsetRight = currentYAxis.plotOffsetRight ? currentYAxis.plotOffsetRight : 30;
                }
                else {
                    currentYAxis.plotOffsetTop = currentYAxis.plotOffsetTop ? currentYAxis.plotOffsetTop : 30;
                }
                if (!resFormat) {
                    currentYAxis.name = (this.chartSettings.multipleAxisMode === 'Combined') ? this.measureList.join('_') :
                        this.measuresNames[item.name] ? this.measuresNames[item.name] : item.name;
                }
                axes = axes.concat(currentYAxis);
                if (this.chartSettings.multipleAxisMode === 'Combined') {
                    axes = [axes[axes.length - 1]];
                }
                if (this.chartSettings.multipleAxisMode === 'Stacked') {
                    currentYAxis.rowIndex = valCnt;
                    currentYAxis.columnIndex = valCnt;
                    rows.push({ height: divider });
                    columns.push({ width: divider });
                }
                else {
                    currentYAxis.rowIndex = 0;
                    currentYAxis.columnIndex = 0;
                    rows = [{ height: '100%' }];
                    columns = [{ width: '100%' }];
                }
                valCnt++;
            }
        }
        else {
            var measureField = this.engineModule.fieldList[this.currentMeasure];
            var measureAggregatedName = (this.parent.dataType === 'olap' ? '' :
                (this.parent.localeObj.getConstant(measureField.aggregateType) + ' ' +
                    this.parent.localeObj.getConstant('of') + ' ')) + measureField.caption;
            // let formatSetting: IFormatSettings = this.dataSourceSettings.formatSettings.filter((item: IFormatSettings) => {
            //     return item.name === this.currentMeasure;
            // })[0];
            var formatSetting = void 0;
            for (var _d = 0, _e = this.dataSourceSettings.formatSettings; _d < _e.length; _d++) {
                var item = _e[_d];
                if (item.name === this.currentMeasure) {
                    formatSetting = item;
                    break;
                }
            }
            var currentYAxis = {};
            var format = PivotUtil.inArray(measureField.aggregateType, percentAggregateTypes) !== -1 ? 'P2' : (formatSetting ? formatSetting.format :
                this.parent.dataType === 'olap' ? this.getFormat(measureField.formatString) : 'N');
            currentYAxis = this.persistSettings.primaryYAxis ? this.frameObjectWithKeys(this.persistSettings.primaryYAxis) : currentYAxis;
            currentYAxis.zoomFactor = isNullOrUndefined(this.chartSettings.primaryYAxis.zoomFactor) ? 1
                : this.chartSettings.primaryYAxis.zoomFactor;
            currentYAxis.rowIndex = 0;
            currentYAxis.columnIndex = 0;
            currentYAxis.edgeLabelPlacement = this.chartSettings.primaryYAxis.edgeLabelPlacement ?
                this.chartSettings.primaryYAxis.edgeLabelPlacement : this.persistSettings.primaryYAxis.edgeLabelPlacement;
            if (!(this.chartSettings.chartSeries.type === 'Polar' || this.chartSettings.chartSeries.type === 'Radar')) {
                currentYAxis.name = this.measuresNames[this.currentMeasure] ? this.measuresNames[this.currentMeasure] : this.currentMeasure;
            }
            currentYAxis.labelFormat = currentYAxis.labelFormat ? currentYAxis.labelFormat : (percentChart ? '' : format);
            currentYAxis.title = currentYAxis.title ? currentYAxis.title : measureAggregatedName;
            axes = axes.concat(currentYAxis);
            rows.push({ height: '100%' });
            columns.push({ width: '100%' });
        }
        return { axes: axes, rows: rows, columns: columns };
    };
    PivotChart.prototype.getFormat = function (format) {
        if (format === 'Currency') {
            format = 'C';
        }
        else if (format === 'Percent') {
            format = 'P';
        }
        else {
            format = 'N';
        }
        return format;
    };
    /** @hidden */
    PivotChart.prototype.getColumnTotalIndex = function (pivotValues) {
        var colIndexColl = {};
        var rKeys = Object.keys(pivotValues);
        for (var _i = 0, rKeys_2 = rKeys; _i < rKeys_2.length; _i++) {
            var rowIndex = rKeys_2[_i];
            var rows = pivotValues[Number(rowIndex)];
            var cKeys = void 0;
            if (!isNullOrUndefined(rows)) {
                cKeys = Object.keys(rows);
                for (var _a = 0, cKeys_1 = cKeys; _a < cKeys_1.length; _a++) {
                    var cellIndex = cKeys_1[_a];
                    var cell = rows[Number(cellIndex)];
                    if (!isNullOrUndefined(cell)) {
                        if (cell.axis !== 'column') {
                            return colIndexColl;
                        }
                        else if ((cell.type === 'sum' || (this.dataSourceSettings && this.dataSourceSettings.columns &&
                            this.dataSourceSettings.columns.length === 0 ? false : cell.type === 'grand sum')) && cell.rowSpan !== -1) {
                            colIndexColl[cell.colIndex] = cell.colIndex;
                        }
                    }
                }
            }
        }
        return colIndexColl;
    };
    PivotChart.prototype.groupHierarchyWithLevels = function (pivotValues, fieldPosition) {
        var _a, _b;
        var group = {};
        var fieldCount = 0;
        var levelPos = {};
        this.measurePos = this.engineModule.tupRowInfo[0].measurePosition;
        for (var rowPos = 0; rowPos < pivotValues.length; rowPos++) {
            var cell = pivotValues[rowPos][0];
            if (cell && cell.axis === 'row' && cell.type !== 'grand sum') {
                if (isNullOrUndefined(group[cell.hierarchy])) {
                    if (cell.memberType === 3) {
                        if (fieldCount === this.measurePos) {
                            fieldPosition[this.measurePos] = cell.hierarchy;
                            group[cell.hierarchy] = (_a = {}, _a[cell.levelUniqueName] = cell.levelUniqueName, _a);
                        }
                        else {
                            fieldCount--;
                        }
                    }
                    else {
                        fieldPosition[fieldCount] = cell.hierarchy;
                        group[cell.hierarchy] = (_b = {}, _b[cell.levelUniqueName] = cell.levelUniqueName, _b);
                    }
                    fieldCount++;
                }
                else {
                    group[cell.hierarchy][cell.levelUniqueName] = cell.levelUniqueName;
                }
            }
        }
        var lastEnd = -1;
        for (var pos = 0; pos < fieldPosition.length; pos++) {
            if (this.measurePos !== pos) {
                levelPos[fieldPosition[pos]] = {
                    start: (lastEnd + 1),
                    end: (lastEnd + Object.keys(group[fieldPosition[pos]]).length)
                };
                lastEnd = levelPos[fieldPosition[pos]].end;
            }
        }
        return levelPos;
    };
    PivotChart.prototype.frameMultiLevelLabels = function () {
        var startKeys = Object.keys(this.headerColl);
        var parentHeaders = this.headerColl[-0.5];
        for (var _i = 0, startKeys_1 = startKeys; _i < startKeys_1.length; _i++) {
            var startKey = startKeys_1[_i];
            var sKey = Number(startKey);
            var headers = this.headerColl[sKey];
            var levelPos = 0;
            var isAvail = false;
            while (levelPos <= this.maxLevel) {
                if (!isAvail) {
                    if (!headers[levelPos]) {
                        headers[levelPos] = parentHeaders[levelPos];
                    }
                    else {
                        isAvail = true;
                    }
                }
                else if (!headers[levelPos]) {
                    headers[levelPos] = {
                        name: headers[levelPos - 1].name,
                        // text: headers[levelPos - 1].text,
                        text: '',
                        hasChild: headers[levelPos - 1].hasChild,
                        isDrilled: headers[levelPos - 1].isDrilled,
                        levelName: headers[levelPos - 1].levelName,
                        level: headers[levelPos - 1].level,
                        fieldName: headers[levelPos - 1].fieldName,
                        rowIndex: headers[levelPos - 1].rowIndex,
                        colIndex: headers[levelPos - 1].colIndex,
                        span: -1
                    };
                    // headers[levelPos - 1].span = 0;
                }
                levelPos++;
            }
            parentHeaders = this.headerColl[sKey];
        }
        var gRows = {};
        for (var _a = 0, startKeys_2 = startKeys; _a < startKeys_2.length; _a++) {
            var startKey = startKeys_2[_a];
            var sKey = Number(startKey);
            var headers = this.headerColl[sKey];
            var lKeys = Object.keys(headers);
            for (var _b = 0, lKeys_1 = lKeys; _b < lKeys_1.length; _b++) {
                var levelKey = lKeys_1[_b];
                var lKey = Number(levelKey);
                if (gRows[lKey]) {
                    var len = gRows[lKey].length;
                    if (headers[lKey].levelName === parentHeaders[lKey].levelName) {
                        gRows[lKey][len - 1].end = gRows[lKey][len - 1].end + 1;
                    }
                    else {
                        gRows[lKey].push({
                            start: sKey, end: sKey + 1, text: headers[lKey].text,
                            type: !isNullOrUndefined(this.persistSettings.primaryXAxis) &&
                                !isNullOrUndefined(this.persistSettings.primaryXAxis.border) &&
                                !isNullOrUndefined(this.persistSettings.primaryXAxis.border.type) ?
                                this.persistSettings.primaryXAxis.border.type : (headers[lKey].span === -1 ?
                                'WithoutTopandBottomBorder' : 'WithoutTopBorder'),
                            customAttributes: headers[lKey]
                        });
                    }
                }
                else {
                    gRows[lKey] = [{
                            start: sKey, end: sKey + 1, text: headers[lKey].text,
                            type: !isNullOrUndefined(this.persistSettings.primaryXAxis) &&
                                !isNullOrUndefined(this.persistSettings.primaryXAxis.border) &&
                                !isNullOrUndefined(this.persistSettings.primaryXAxis.border.type) ?
                                this.persistSettings.primaryXAxis.border.type : (headers[lKey].span === -1 ?
                                'WithoutTopandBottomBorder' : 'WithoutTopBorder'),
                            customAttributes: headers[lKey]
                        }];
                }
            }
            parentHeaders = headers;
        }
        var levellength = Object.keys(gRows).length;
        var multiLevelLabels = [];
        for (var level = levellength - 1; level > -1; level--) {
            multiLevelLabels.push({ categories: gRows[level], border: { width: 1 }, overflow: 'Trim' });
        }
        return multiLevelLabels;
    };
    PivotChart.prototype.getZoomFactor = function () {
        this.calculatedWidth = this.getCalulatedWidth();
        var seriesLength = (this.chartSeries.length * 10) > 120 ? (this.chartSeries.length * 10) : 120;
        var zoomFactor = this.chartSeries.length > 0 ?
            (this.calculatedWidth / (Object.keys(this.chartSeries[0].dataSource).length * seriesLength)) : 1;
        zoomFactor = (zoomFactor < 1 && zoomFactor > 0) ? zoomFactor : 1;
        return zoomFactor;
    };
    /** @hidden */
    PivotChart.prototype.getCalulatedWidth = function () {
        if (!isNaN(Number(this.parent.width))) {
            this.calculatedWidth = Number(this.parent.width);
        }
        else if (this.parent.width.indexOf('%') > -1) {
            this.calculatedWidth = this.parent.element.clientWidth * (parseFloat(this.parent.width) / 100);
        }
        else if (this.parent.width.indexOf('px') > -1) {
            this.calculatedWidth = Number(this.parent.width.toString().split('px')[0]);
        }
        else {
            this.calculatedWidth = this.parent.element.clientWidth;
        }
        return this.calculatedWidth;
    };
    PivotChart.prototype.configTooltipSettings = function () {
        var tooltip = this.persistSettings.tooltip ? this.persistSettings.tooltip :
            this.chartSettings.tooltip;
        tooltip.enable = tooltip.enable === undefined ? true : tooltip.enable;
        if (tooltip.enable && tooltip.template) {
            this.templateFn = this.parent.templateParser(tooltip.template);
        }
        if (this.parent.tooltipTemplate) {
            tooltip.template = tooltip.template ? tooltip.template : this.parent.tooltipTemplate;
        }
        tooltip.header = tooltip.header ? tooltip.header : '';
        tooltip.enableMarker = tooltip.enableMarker === undefined ? true : tooltip.enableMarker;
        return tooltip;
    };
    PivotChart.prototype.configLegendSettings = function () {
        var legendSettings = {};
        if (this.chartSettings.legendSettings) {
            var keyPos = 0;
            var keys = Object.keys(this.chartSettings.legendSettings);
            while (keyPos < keys.length) {
                legendSettings[keys[keyPos]] = this.chartSettings.legendSettings[keys[keyPos]];
                keyPos++;
            }
        }
        legendSettings.visible = legendSettings.visible !== false;
        legendSettings.padding = legendSettings.padding ? legendSettings.padding : 25;
        legendSettings.shapePadding = legendSettings.shapePadding ? legendSettings.shapePadding : 10;
        return legendSettings;
    };
    PivotChart.prototype.configXAxis = function () {
        var currentXAxis = {};
        currentXAxis = this.persistSettings.primaryXAxis ? this.frameObjectWithKeys(this.persistSettings.primaryXAxis) : currentXAxis;
        currentXAxis.valueType = 'Category';
        currentXAxis.labelIntersectAction = currentXAxis.labelIntersectAction ? currentXAxis.labelIntersectAction : 'Rotate45';
        currentXAxis.title = currentXAxis.title ? currentXAxis.title :
            this.dataSourceSettings.rows.map(function (args) {
                return args.caption || args.name;
            }).join(' / ');
        currentXAxis.zoomFactor = isNullOrUndefined(this.parent.chartSettings.primaryXAxis.zoomFactor) ? this.getZoomFactor()
            : this.parent.chartSettings.primaryXAxis.zoomFactor;
        if (!this.parent.chartSettings.zoomSettings.enableScrollbar) {
            currentXAxis.zoomFactor = 1;
        }
        if (this.chartSettings.showMultiLevelLabels && this.chartSettings.chartSeries.type !== 'Pareto') {
            currentXAxis.multiLevelLabels = this.frameMultiLevelLabels();
            currentXAxis.border = { width: 1, type: !isNullOrUndefined(this.persistSettings.primaryXAxis) &&
                    !isNullOrUndefined(this.persistSettings.primaryXAxis.border) &&
                    !isNullOrUndefined(this.persistSettings.primaryXAxis.border.type) ? this.persistSettings.primaryXAxis.border.type
                    : 'WithoutTopandBottomBorder' };
            currentXAxis.majorTickLines = { width: 0, height: -10 };
        }
        else {
            currentXAxis.multiLevelLabels = [];
            currentXAxis.border = { width: 1, type: !isNullOrUndefined(this.persistSettings.primaryXAxis) &&
                    !isNullOrUndefined(this.persistSettings.primaryXAxis.border) &&
                    !isNullOrUndefined(this.persistSettings.primaryXAxis.border.type) ? this.persistSettings.primaryXAxis.border.type
                    : 'Rectangle' };
            currentXAxis.majorTickLines = { width: 0, height: 5 };
        }
        return currentXAxis;
    };
    PivotChart.prototype.configZoomSettings = function () {
        var zoomSettings = this.chartSettings.zoomSettings;
        zoomSettings.enableSelectionZooming = zoomSettings.enableSelectionZooming === undefined ? true :
            zoomSettings.enableSelectionZooming;
        zoomSettings.enableScrollbar = zoomSettings.enableScrollbar === undefined ? true : zoomSettings.enableScrollbar;
        return zoomSettings;
    };
    PivotChart.prototype.tooltipRender = function (args) {
        var measure = (this.chartSettings.enableMultipleAxis && this.chartSettings.multipleAxisMode === 'Combined' &&
            this.accumulationType.indexOf(this.chartSettings.chartSeries.type) < 0 && this.chartSettings.chartSeries.type !== 'Radar' &&
            this.chartSettings.chartSeries.type !== 'Polar') ? args.series.tooltipMappingName :
            args.series.yAxisName ? (args.series.yAxisName.split('_CumulativeAxis')[0]) :
                ((this.chartSettings.enableMultipleAxis && this.accumulationType.indexOf(this.chartSettings.chartSeries.type) < 0 &&
                    this.chartSettings.chartSeries.type !== 'Pareto') ? args.series.name ? args.series.name.split(' | ')[1] :
                    args.data.seriesName ? args.data.seriesName.split(' | ')[1] : this.currentMeasure : this.measuresNames[this.currentMeasure] ?
                    this.measuresNames[this.currentMeasure] : this.currentMeasure);
        var dataSource = args.series.dataSource ? args.series.dataSource
            : this.parent.chart.series[args.data.seriesIndex].dataSource;
        var rowIndex = dataSource ? dataSource[args.data.pointIndex].rIndex : undefined;
        var colIndex = dataSource ? dataSource[args.data.pointIndex].cIndex : undefined;
        var measureField = this.engineModule.fieldList[this.measuresNames[measure]
            ? this.measuresNames[measure] : measure];
        var aggregateType = this.parent.dataType === 'olap' ? '' : this.parent.localeObj.getConstant(measureField.aggregateType);
        var measureAggregatedName = (this.parent.dataType === 'olap' ? '' : aggregateType + ' ' +
            this.parent.localeObj.getConstant('of') + ' ') + measureField.caption;
        var formattedText = this.engineModule.pivotValues[rowIndex][colIndex].formattedText;
        var formatField = this.engineModule.formatFields[measureField.id];
        var valueFormat = this.engineModule.getFormattedValue(args.point.y, measureField.id, formattedText);
        var formattedValue = (formatField && formatField.format && formatField.format.toLowerCase().match(/n|p|c/) !== null &&
            this.chartSettings.useGroupingSeparator) ? this.parent.dataType === 'olap' ?
            valueFormat.toString() : valueFormat.formattedText :
            formattedText;
        var cell = this.parent.pivotValues[rowIndex][colIndex];
        var text = cell.columnHeaders;
        var columnText = '';
        if (isNullOrUndefined(text)) {
            columnText = undefined;
        }
        else if (this.parent.dataType === 'olap') {
            columnText = this.chartSeriesInfo[text.toString().split(/~~|::/).join(' - ')].uniqueName;
        }
        else {
            var values = text.toString().split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter);
            text = PivotUtil.formatChartHeaders(values, this, true, cell);
            columnText = this.chartSeriesInfo[text.toString()].uniqueName;
        }
        var rowText = args.point.x;
        if (this.parent.tooltipTemplate && this.parent.getTooltipTemplate() !== undefined || this.chartSettings.tooltip.template) {
            var rowFields = dataSource ? this.parent.getHeaderField(rowIndex, colIndex, 'row') : '';
            var columnFields = dataSource ? this.parent.getHeaderField(rowIndex, colIndex, 'Column') : '';
            var templateVariable = {
                rowHeaders: rowText,
                columnHeaders: columnText,
                aggregateType: aggregateType,
                value: formattedValue,
                valueField: measureField.caption,
                rowFields: rowFields,
                columnFields: columnFields
            };
            var template = void 0;
            if (this.parent.chartSettings && this.parent.chartSettings.tooltip &&
                this.parent.chartSettings.tooltip.enable && this.parent.chartSettings.tooltip.template) {
                template = this.tooltipTemplateFn()(templateVariable, this, 'tooltipTemplate', this.element.id + '1tooltipTemplate')[0].outerHTML;
            }
            else {
                template = this.parent.getTooltipTemplate()(templateVariable, this, 'tooltipTemplate', this.element.id + 'tooltipTemplate')[0].outerHTML;
            }
            args.template = template;
        }
        else {
            args.text = measureAggregatedName + ': ' + formattedValue +
                (this.dataSourceSettings.columns.length === 0 ? '' :
                    (' <br/>' + this.parent.localeObj.getConstant('column') + ': ' + columnText)) +
                (this.dataSourceSettings.rows.length === 0 ? '' :
                    (' <br/>' + this.parent.localeObj.getConstant('row') + ': ' + rowText)) +
                ((args.data && args.data.seriesName === 'Pareto') ?
                    " <br/>" + this.parent.localeObj.getConstant('pareto') + ": " + args.data.pointY + "%" : '');
            this.parent.trigger(events.chartTooltipRender, args);
        }
    };
    PivotChart.prototype.tooltipTemplateFn = function () {
        return this.templateFn;
    };
    PivotChart.prototype.loaded = function (args) {
        this.parent.isChartLoaded = true;
        var width = this.parent.grid ? this.parent.getGridWidthAsNumber().toString() : this.parent.getWidthAsNumber().toString();
        if (this.parent.chart && this.parent.showGroupingBar && this.parent.groupingBarModule &&
            this.parent.showFieldList && this.parent.currentView === 'Chart') {
            this.parent.groupingBarModule.alignIcon();
        }
        if (this.chartSettings.showMultiLevelLabels) {
            var multilabelAxisName = PivotUtil.inArray(this.chartSettings.chartSeries.type, ['Bar', 'StackingBar', 'StackingBar100']) > -1 ?
                '_chartYAxisMultiLevelLabel0' : '_chartXAxisMultiLevelLabel0';
            if (!isNullOrUndefined(select('#' + this.parent.element.id + multilabelAxisName, this.parent.element))) {
                this.parent.element.querySelector('#' + this.parent.element.id + multilabelAxisName).setAttribute('cursor', 'pointer');
            }
        }
        var height = this.getChartHeight();
        this.parent.chart.height = height;
        if (this.parent.chartSettings.enableScrollOnMultiAxis && this.parent.chartSettings.enableMultipleAxis) {
            if (['Pie', 'Funnel', 'Pyramid', 'Doughnut', 'Radar', 'Polar', 'Pareto'].indexOf(this.parent.chartSettings.chartSeries.type) >= 0) {
                this.parent.element.querySelector('.' + cls.PIVOTCHART).style.overflow = 'visible';
            }
            else {
                this.parent.element.querySelector('.' + cls.PIVOTCHART).style.overflow = 'auto';
                this.parent.element.querySelector('.' + cls.PIVOTCHART).style.overflowX = 'hidden';
            }
            this.parent.element.querySelector('.' + cls.PIVOTCHART).style.width = width + 'px';
            this.parent.element.querySelector('.' + cls.PIVOTCHART).style.height = height + 'px';
        }
        this.updateView();
        if (this.parent.displayOption.primary === 'Chart' || this.parent.displayOption.view === 'Chart') {
            this.parent.notify(events.contentReady, {});
        }
        this.parent.trigger(events.chartLoaded, args);
        if ((this.parent.dataSourceSettings.mode === 'Server' && this.parent.isServerWaitingPopup) || this.parent.dataSourceSettings.mode === 'Local') {
            this.parent.hideWaitingPopup();
        }
    };
    /** @hidden */
    PivotChart.prototype.updateView = function () {
        if (this.parent.grid && this.parent.chart && this.parent.showToolbar) {
            var groupingTable = this.parent.element.querySelector('.e-pivot-grouping-bar');
            var groupingChartTable = this.parent.element.querySelector('.e-chart-grouping-bar');
            if (this.parent.currentView === 'Table') {
                this.parent.grid.element.style.display = '';
                this.parent.chart.element.style.display = 'none';
                if (this.parent.showGroupingBar && this.parent.groupingBarModule) {
                    if (groupingTable) {
                        groupingTable.style.display = '';
                        if (groupingTable.querySelector('.' + cls.ALL_FIELDS_PANEL_CLASS) &&
                            this.parent.groupingBarModule.gridPanel != null && !this.parent.groupingBarModule.gridPanel.isDestroyed) {
                            this.parent.groupingBarModule.gridPanel.refreshOverflow();
                        }
                    }
                    if (groupingChartTable) {
                        groupingChartTable.style.display = 'none';
                    }
                }
                if (this.parent.chartSettings.enableMultipleAxis && this.parent.chartSettings.enableScrollOnMultiAxis) {
                    this.parent.element.querySelector('.e-pivotchart').style.display = 'none';
                }
            }
            else {
                this.parent.grid.element.style.display = 'none';
                this.parent.chart.element.style.display = '';
                if (this.parent.showGroupingBar && this.parent.groupingBarModule) {
                    if (groupingTable) {
                        groupingTable.style.display = 'none';
                    }
                    if (groupingChartTable) {
                        groupingChartTable.style.display = '';
                        if (groupingChartTable.querySelector('.' + cls.ALL_FIELDS_PANEL_CLASS) &&
                            this.parent.groupingBarModule.chartPanel != null && !this.parent.groupingBarModule.chartPanel.isDestroyed) {
                            this.parent.groupingBarModule.chartPanel.refreshOverflow();
                        }
                    }
                }
                if (this.parent.chartSettings.enableMultipleAxis && this.parent.chartSettings.enableScrollOnMultiAxis) {
                    this.parent.element.querySelector('.e-pivotchart').style.display = '';
                }
            }
        }
    };
    PivotChart.prototype.creatMenu = function () {
        if (this.accumulationMenu && !this.accumulationMenu.isDestroyed) {
            this.accumulationMenu.destroy();
        }
        var items = ((this.parent.allowDrillThrough || this.parent.editSettings.allowEditing)
            && this.parent.drillThroughModule) ? ['expand', 'collapse', 'drillThrough', 'exit'] :
            ['expand', 'collapse', 'exit'];
        var option = [];
        for (var i = 0; i < items.length; i++) {
            option.push({
                id: this.parent.element.id + '_DrillMenuChart_' + items[i],
                text: this.parent.localeObj.getConstant(items[i]),
                items: []
            });
        }
        var getString = this.getMenuItems();
        var expand = [];
        var collapse = [];
        for (var i = 0; i < getString.length; i++) {
            if (getString[i].type === 'expand') {
                expand.push({ id: this.element.id + 'drillExpand_' + getString[i].key, text: getString[i].value });
            }
            else {
                collapse.push({ id: this.element.id + 'drillCollapse_' + getString[i].key, text: getString[i].value });
            }
        }
        if (expand.length > 0) {
            option[0].items = expand;
        }
        if (collapse.length > 0) {
            option[1].items = collapse;
        }
        var menuOptions = {
            cssClass: this.parent.element.id + '_accumulationChart' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
            items: option,
            enableRtl: this.parent.enableRtl,
            beforeOpen: this.drillMenuOpen.bind(this),
            select: this.drillMenuSelect.bind(this),
            locale: this.parent.locale
        };
        this.accumulationMenu = new ContextMenu(menuOptions);
        var contextMenu;
        if (select('#' + this.parent.element.id + '_accumulationChart', this.parent.element)) {
            contextMenu = select('#' + this.parent.element.id + '_accumulationChart', this.parent.element);
            contextMenu.innerHTML = '';
        }
        else {
            contextMenu = createElement('ul', {
                id: this.parent.element.id + '_accumulationChart'
            });
            this.parent.element.appendChild(contextMenu);
        }
        this.accumulationMenu.isStringTemplate = true;
        this.accumulationMenu.appendTo(contextMenu);
    };
    PivotChart.prototype.drillMenuOpen = function (args) {
        if (args.items[0] && args.items[0].text === this.parent.localeObj.getConstant('expand') &&
            args.items[0].items && args.items[0].items.length === 0) {
            this.accumulationMenu.enableItems([this.parent.localeObj.getConstant('expand')], false);
        }
        if (args.items[1] && args.items[1].text === this.parent.localeObj.getConstant('collapse') &&
            args.items[1].items && args.items[1].items.length === 0) {
            this.accumulationMenu.enableItems([this.parent.localeObj.getConstant('collapse')], false);
        }
    };
    PivotChart.prototype.getMenuItems = function () {
        var rowIndex = this.pivotIndex.rIndex;
        var menuItem = [];
        var pivotValues = this.engineModule.pivotValues;
        var levelCol = [];
        var pivotValue = pivotValues[rowIndex][this.pivotIndex.cIndex];
        // let hierarchy: string = pivotValues[rowIndex][0].hierarchy;
        var level = (!pivotValues[rowIndex][0].isNamedSet && pivotValues[rowIndex][0].hasChild) ?
            pivotValues[rowIndex][0].level : undefined;
        var levels = this.parent.dataType === 'olap' ? pivotValue.rowHeaders.toString().split(/~~|::/)
            : pivotValue.rowHeaders.toString().split(this.engineModule.valueSortSettings.headerDelimiter);
        while (pivotValues[rowIndex][0]) {
            pivotValue = pivotValues[rowIndex][0];
            if ((levels.length !== 0) && (levels.indexOf(pivotValue.formattedText.toString()) === (levels.length - 1))) {
                if (pivotValue.hasChild && !pivotValue.isNamedSet && levelCol.indexOf(pivotValue.level) < 0 &&
                    (level ? level >= pivotValue.level : (level === 0 ? (pivotValue.level === 0) : true))) {
                    if (!(pivotValue.isDrilled && pivotValue.hasChild)) {
                        menuItem.push({
                            key: rowIndex,
                            type: 'expand',
                            value: pivotValue.formattedText
                        });
                    }
                    else {
                        menuItem.push({
                            key: rowIndex,
                            type: 'collapse',
                            value: pivotValue.formattedText
                        });
                    }
                    levelCol.push(pivotValue.level);
                    level = level ? (level - 1) : (pivotValue.level - 1);
                }
                var index = levels.indexOf(pivotValue.formattedText.toString());
                levels.splice(index, 1);
            }
            if (pivotValue.level === 0 && pivotValue.hasChild && !pivotValue.isNamedSet) {
                level = undefined;
                levelCol = [];
            }
            rowIndex--;
        }
        return menuItem;
    };
    PivotChart.prototype.drillMenuSelect = function (args) {
        var pivotValues = (this.parent.dataType === 'olap' ?
            this.parent.olapEngineModule.pivotValues : this.parent.engineModule.pivotValues);
        var option = (args.element.id).split('_DrillMenuChart_')[1];
        if (args.element.id.indexOf(this.element.id + 'drill') === 0) {
            var type = args.element.id.split(this.element.id + 'drill')[1].indexOf('Expand') >= 0 ? 'drillExpand' : 'drillCollapse';
            var rowIndex = Number(args.element.id.split(this.element.id + type + '_')[1]);
            var pivotValue = pivotValues[rowIndex][0];
            var name_2 = this.parent.dataType === 'olap' ? pivotValue.formattedText :
                (pivotValue.actualText ? pivotValue.actualText.toString() : pivotValue.formattedText.toString());
            var text = pivotValue.formattedText ? pivotValue.formattedText.toString() : name_2;
            var caption = (pivotValue.hasChild && !pivotValue.isNamedSet) ?
                ((pivotValue.isDrilled ? ' - ' : ' + ') + text) : text;
            var tupInfo = this.parent.dataType === 'olap' ?
                this.engineModule.tupRowInfo[pivotValue.ordinal] : undefined;
            var levelName = tupInfo ? tupInfo.uNameCollection : pivotValue.valueSort.levelName.toString();
            var customAttributes = {
                fieldName: pivotValue.valueSort.axis,
                level: pivotValue.level,
                hasChild: pivotValue.hasChild,
                levelName: levelName,
                name: name_2,
                text: caption,
                rowIndex: rowIndex,
                colIndex: 0,
                isDrilled: pivotValue.isDrilled,
                cell: pivotValue
            };
            if (this.parent.dataType === 'olap') {
                this.parent.onDrill(undefined, customAttributes);
            }
            else {
                this.onDrill({ customAttributes: customAttributes });
            }
        }
        else if (option === 'drillThrough') {
            this.parent.drillThroughModule.executeDrillThrough(pivotValues[this.pivotIndex.rIndex][this.pivotIndex.cIndex], this.pivotIndex.rIndex, this.pivotIndex.rIndex);
        }
        else if (option === 'exit') {
            this.accumulationMenu.close();
        }
    };
    /**
     *
     * @returns {string} - string.
     * @hidden
     */
    PivotChart.prototype.getChartHeight = function () {
        var height;
        var offSetHeight;
        if (isNullOrUndefined(this.parent.getHeightAsNumber())) {
            height = 'auto';
        }
        else {
            var offSetVal = this.parent.showToolbar ? 6 : 5;
            height = (this.parent.getHeightAsNumber() - offSetVal).toString();
            offSetHeight = this.parent.getHeightAsNumber() - offSetVal;
        }
        if (!isNullOrUndefined(this.parent.getHeightAsNumber())) {
            var isNone = false;
            if (this.parent.element.querySelector('.e-chart-grouping-bar') !== null && this.parent.element.querySelector('.e-chart-grouping-bar').style.display.toLowerCase() === 'none') {
                isNone = true;
                this.parent.element.querySelector('.e-chart-grouping-bar').style.display = 'block';
            }
            if (this.parent.showToolbar && this.parent.showGroupingBar) {
                height = (offSetHeight - (this.parent.element.querySelector('.e-pivot-toolbar') ?
                    this.parent.element.querySelector('.e-pivot-toolbar').clientHeight : 42) -
                    (this.parent.element.querySelector('.e-chart-grouping-bar') ?
                        this.parent.element.querySelector('.e-chart-grouping-bar').clientHeight : 62)).toString();
            }
            else if (this.parent.showToolbar) {
                height = (offSetHeight - (this.parent.element.querySelector('.e-pivot-toolbar') ?
                    this.parent.element.querySelector('.e-pivot-toolbar').clientHeight : 42)).toString();
            }
            else if (this.parent.showGroupingBar) {
                height = (offSetHeight - (this.parent.element.querySelector('.e-chart-grouping-bar') ?
                    this.parent.element.querySelector('.e-chart-grouping-bar').clientHeight : 62)).toString();
            }
            else if ((this.parent.chart && parseInt(this.parent.chart.height, 10) < 200) || offSetHeight < 200) {
                height = '200';
            }
            if (isNone) {
                this.parent.element.querySelector('.e-chart-grouping-bar').style.display = 'none';
            }
        }
        else {
            height = 'auto';
        }
        return height;
    };
    PivotChart.prototype.getChartAutoHeight = function () {
        var height = this.parent.element.offsetHeight < this.parent.minHeight ? this.parent.minHeight :
            this.parent.element.offsetHeight;
        if (this.parent.showToolbar && this.parent.showGroupingBar) {
            height = height - (this.parent.element.querySelector('.e-pivot-toolbar') ?
                this.parent.element.querySelector('.e-pivot-toolbar').clientHeight : 42) -
                (this.parent.element.querySelector('.e-chart-grouping-bar') ?
                    this.parent.element.querySelector('.e-chart-grouping-bar').clientHeight : 62);
        }
        else if (this.parent.showToolbar) {
            height = height - (this.parent.element.querySelector('.e-pivot-toolbar') ?
                this.parent.element.querySelector('.e-pivot-toolbar').clientHeight : 42);
        }
        else if (this.parent.showGroupingBar) {
            height = height - (this.parent.element.querySelector('.e-chart-grouping-bar') ?
                this.parent.element.querySelector('.e-chart-grouping-bar').clientHeight : 62);
        }
        return height;
    };
    PivotChart.prototype.axisLabelRender = function (args) {
        if (this.chartSettings.showMultiLevelLabels && this.chartSettings.chartSeries.type !== 'Pareto') {
            if (args.axis.name === 'primaryXAxis') {
                args.text = '';
            }
        }
        if (args.axis.name !== 'primaryXAxis' && !(this.parent.chartSettings.chartSeries.type === 'StackingColumn100' ||
            this.parent.chartSettings.chartSeries.type === 'StackingBar100' ||
            this.parent.chartSettings.chartSeries.type === 'StackingArea100' ||
            this.parent.chartSettings.chartSeries.type === 'StackingLine100')) {
            var key = (this.chartSettings.enableMultipleAxis &&
                this.chartSettings.multipleAxisMode === 'Combined') ? this.currentMeasure :
                this.parent.dataType === 'olap' ? this.measuresNames[args.axis.name] : args.axis.name;
            var formatField = this.engineModule.formatFields[key] || null;
            var valueFormat = this.engineModule.getFormattedValue(args.value, (this.chartSettings.enableMultipleAxis &&
                this.chartSettings.multipleAxisMode === 'Combined') ? this.currentMeasure : args.axis.name, args.text);
            var formattedValue = ((formatField && formatField.format &&
                this.chartSettings.useGroupingSeparator) ? this.parent.dataType === 'olap' ? valueFormat.toString() :
                valueFormat.formattedText : args.value.toString());
            args.text = formattedValue;
        }
        this.parent.trigger(events.chartAxisLabelRender, args);
    };
    PivotChart.prototype.multiLevelLabelClick = function (args) {
        var eventArgs = {
            axis: args.axis,
            text: args.text,
            cell: !isNullOrUndefined(args.customAttributes) ? args.customAttributes.cell : undefined,
            cancel: false
        };
        this.parent.trigger(events.multiLevelLabelClick, eventArgs);
        if (!eventArgs.cancel && args.customAttributes && args.customAttributes.hasChild &&
            !args.customAttributes.cell.isNamedSet) {
            if (this.parent.dataType === 'olap') {
                this.parent.onDrill(undefined, args.customAttributes);
            }
            else {
                this.onDrill(args);
            }
        }
    };
    /**
     * It helped to drills the row or columns.
     *
     * @param {IMultiLevelLabelClickEventArgs} args - It contains the drillInfo.
     * @returns {void}
     * @hidden
     */
    PivotChart.prototype.onDrill = function (args) {
        var labelInfo = args.customAttributes;
        var delimiter = (this.dataSourceSettings.drilledMembers[0] && this.dataSourceSettings.drilledMembers[0].delimiter) ?
            this.dataSourceSettings.drilledMembers[0].delimiter : '**';
        var fieldName = labelInfo.fieldName;
        var currentColIndex = (this.parent.gridSettings.layout === 'Tabular' ? (!this.parent.dataSourceSettings.showSubTotals ||
            (!this.parent.dataSourceSettings.showRowSubTotals && this.parent.dataSourceSettings.showColumnSubTotals)) ?
            labelInfo.level : this.parent.engineModule.rowMaxLevel : labelInfo.colIndex);
        var currentCell = this.engineModule.pivotValues[labelInfo.rowIndex][currentColIndex];
        var memberUqName = currentCell.valueSort.levelName.
            split(this.engineModule.valueSortSettings.headerDelimiter).join(delimiter);
        var fieldAvail = false;
        if (this.dataSourceSettings.drilledMembers.length === 0) {
            this.parent.setProperties({
                dataSourceSettings: { drilledMembers: [{ name: fieldName, items: [memberUqName], delimiter: delimiter }] }
            }, true);
        }
        else {
            for (var fCnt = 0; fCnt < this.dataSourceSettings.drilledMembers.length; fCnt++) {
                var field = this.dataSourceSettings.drilledMembers[fCnt];
                memberUqName = memberUqName.split(delimiter).join(field.delimiter ? field.delimiter : delimiter);
                delimiter = field.delimiter = field.delimiter ? field.delimiter : delimiter;
                if (field.name === fieldName) {
                    fieldAvail = true;
                    var memIndex = field.items.indexOf(memberUqName);
                    if (memIndex > -1) {
                        field.items.splice(memIndex, 1);
                    }
                    else {
                        field.items.push(memberUqName);
                    }
                }
                else {
                    continue;
                }
            }
            if (!fieldAvail) {
                this.dataSourceSettings.drilledMembers.push({ name: fieldName, items: [memberUqName], delimiter: delimiter });
            }
        }
        this.parent.showWaitingPopup();
        var pivot = this;
        //setTimeout(() => {
        var drilledItem = {
            fieldName: fieldName, memberName: memberUqName, delimiter: delimiter,
            axis: 'row',
            action: labelInfo.isDrilled ? 'up' : 'down',
            currentCell: currentCell
        };
        var drillArgs = {
            drillInfo: drilledItem,
            pivotview: pivot.parent
        };
        pivot.parent.trigger(events.drill, drillArgs);
        var enginePopulatingEventArgs = {
            dataSourceSettings: PivotUtil.getClonedDataSourceSettings(this.parent.dataSourceSettings)
        };
        this.parent.trigger(events.enginePopulating, enginePopulatingEventArgs);
        this.parent.setProperties({ dataSourceSettings: enginePopulatingEventArgs.dataSourceSettings }, true);
        if (pivot.parent.enableVirtualization || pivot.parent.enablePaging) {
            if (pivot.parent.dataSourceSettings.mode === 'Server') {
                pivot.parent.getEngine('onDrill', drilledItem, null, null, null, null, null);
            }
            else {
                pivot.engineModule.drilledMembers = pivot.dataSourceSettings.drilledMembers;
                pivot.engineModule.onDrill(drilledItem);
            }
        }
        else if (pivot.parent.dataSourceSettings.mode === 'Server') {
            pivot.parent.getEngine('onDrill', drilledItem, null, null, null, null, null);
        }
        else {
            pivot.engineModule.generateGridData(pivot.dataSourceSettings, true);
        }
        pivot.parent.allowServerDataBinding = false;
        pivot.parent.setProperties({ pivotValues: pivot.engineModule.pivotValues }, true);
        pivot.parent.allowServerDataBinding = true;
        var eventArgs = {
            dataSourceSettings: PivotUtil.getClonedDataSourceSettings(this.parent.dataSourceSettings),
            pivotValues: this.parent.pivotValues
        };
        this.parent.trigger(events.enginePopulated, eventArgs);
        pivot.engineModule.pivotValues = eventArgs.pivotValues;
        pivot.parent.renderPivotGrid();
        //});
    };
    PivotChart.prototype.isAttributeDrill = function (hierarchy, drillInfo) {
        var isDrill = false;
        for (var i = 0; i < this.dataSourceSettings.drilledMembers.length; i++) {
            if (this.dataSourceSettings.drilledMembers[i].name === hierarchy) {
                for (var j = 0; j < this.dataSourceSettings.drilledMembers[i].items.length; j++) {
                    var drillItems = this.dataSourceSettings.drilledMembers[i].items[j]
                        .split(this.dataSourceSettings.drilledMembers[i].delimiter);
                    var levelName = '';
                    for (var k = 0; k < drillItems.length; k++) {
                        if (drillInfo[k] && drillInfo[k].uName) {
                            levelName = levelName + (levelName === '' ? '' : this.dataSourceSettings.drilledMembers[i].delimiter) +
                                (drillInfo[k].uName.indexOf('[Measures]') > -1 ? '[Measures]' : drillInfo[k].uName);
                        }
                    }
                    if (levelName === this.dataSourceSettings.drilledMembers[i].items[j]) {
                        isDrill = true;
                        break;
                    }
                }
            }
        }
        return isDrill;
    };
    PivotChart.prototype.load = function (args) {
        if (args.chart.zoomModule) {
            args.chart.zoomModule.isZoomed = true;
        }
        this.parent.trigger(events.chartLoad, args);
    };
    PivotChart.prototype.beforePrint = function (args) {
        this.parent.trigger(events.beforePrint, args);
    };
    PivotChart.prototype.animationComplete = function (args) {
        this.parent.trigger(events.animationComplete, args);
    };
    PivotChart.prototype.legendRender = function (args) {
        this.parent.trigger(events.legendRender, args);
    };
    PivotChart.prototype.textRender = function (args) {
        this.parent.trigger(events.textRender, args);
    };
    PivotChart.prototype.pointRender = function (args) {
        this.parent.trigger(events.pointRender, args);
    };
    PivotChart.prototype.seriesRender = function (args) {
        this.parent.trigger(events.seriesRender, args);
    };
    PivotChart.prototype.chartMouseMove = function (args) {
        this.parent.trigger(events.chartMouseMove, args);
    };
    PivotChart.prototype.chartMouseClick = function (args) {
        this.parent.trigger(events.chartMouseClick, args);
    };
    PivotChart.prototype.pointMove = function (args) {
        this.parent.trigger(events.pointMove, args);
    };
    PivotChart.prototype.chartMouseLeave = function (args) {
        this.parent.trigger(events.chartMouseLeave, args);
    };
    PivotChart.prototype.chartMouseDown = function (args) {
        this.parent.trigger(events.chartMouseDown, args);
    };
    PivotChart.prototype.chartMouseUp = function (args) {
        this.parent.trigger(events.chartMouseUp, args);
    };
    PivotChart.prototype.dragComplete = function (args) {
        this.parent.trigger(events.dragComplete, args);
    };
    PivotChart.prototype.zoomComplete = function (args) {
        this.parent.trigger(events.zoomComplete, args);
    };
    PivotChart.prototype.scrollStart = function (args) {
        this.parent.trigger(events.scrollStart, args);
    };
    PivotChart.prototype.scrollEnd = function (args) {
        this.parent.trigger(events.scrollEnd, args);
    };
    PivotChart.prototype.scrollChanged = function (args) {
        this.parent.trigger(events.scrollChanged, args);
    };
    PivotChart.prototype.multiLevelLabelRender = function (args) {
        this.parent.trigger(events.multiLevelLabelRender, args);
    };
    PivotChart.prototype.resized = function (args) {
        if (this.accumulationType.indexOf(this.chartSettings.chartSeries.type) < 0) {
            args.chart.primaryXAxis.zoomFactor = isNullOrUndefined(this.parent.chartSettings.primaryXAxis.zoomFactor)
                ? this.getZoomFactor() : this.parent.chartSettings.primaryXAxis.zoomFactor;
            if (!this.parent.chartSettings.zoomSettings.enableScrollbar) {
                args.chart.primaryXAxis.zoomFactor = isNullOrUndefined(this.parent.chartSettings.primaryXAxis.zoomFactor)
                    ? 1 : this.parent.chartSettings.primaryXAxis.zoomFactor;
            }
        }
        this.parent.trigger(events.chartResized, args);
    };
    /** @hidden */
    PivotChart.prototype.getResizedChartHeight = function () {
        var height = ['Pie', 'Funnel', 'Pyramid', 'Doughnut', 'Radar', 'Polar', 'Pareto'].indexOf(this.parent.chartSettings.chartSeries.type) < 0 &&
            this.parent.chartSettings.enableScrollOnMultiAxis && this.parent.chartSettings.enableMultipleAxis &&
            this.parent.dataSourceSettings.values.length > 0 ? Number(this.parent.chart.height) >
            (this.parent.dataSourceSettings.values.length * 235) + 100 ? isNaN(Number(this.getChartHeight())) ?
            this.getChartHeight().toString() : (Number(this.getChartHeight()) - 5).toString() :
            (!isNaN(Number(this.getChartHeight())) || this.parent.dataSourceSettings.values.length > 1) ?
                ((this.parent.dataSourceSettings.values.length * 235) + 100).toString() : this.getChartHeight().toString()
            : this.getChartHeight().toString();
        return height;
    };
    /**
     * To destroy the chart module
     *
     * @returns {void}
     * @hidden
     */
    PivotChart.prototype.destroy = function () {
        if (this.parent && this.parent.isDestroyed) {
            return;
        }
        if (this.accumulationMenu && !this.accumulationMenu.isDestroyed) {
            this.accumulationMenu.destroy();
            this.accumulationMenu = null;
        }
        if (select('#' + this.parent.element.id + '_accumulationChart', document)) {
            remove(select('#' + this.parent.element.id + '_accumulationChart', document));
        }
        if (this.parent && this.parent.chart && !this.parent.chart.isDestroyed) {
            this.parent.chart.destroy();
            this.parent.chart = null;
        }
        else if (this.parent && !this.parent.chart) {
            var emptyChartElement = select('#' + this.parent.element.id + '_chart', this.parent.element);
            var chartInstance = getInstance(emptyChartElement, Chart);
            chartInstance.destroy();
            remove(emptyChartElement);
        }
        if (this.chartElement) {
            if (this.chartElement.parentNode) {
                this.chartElement.parentNode.removeChild(this.chartElement);
            }
            this.chartElement = null;
        }
        if (this.element) {
            if (this.element.parentNode) {
                this.element.parentNode.removeChild(this.element);
            }
            this.element = null;
        }
        if (this.templateFn) {
            this.templateFn = null;
        }
        if (this.engineModule && !this.parent.destroyEngine) {
            this.engineModule.fieldList = {};
            this.engineModule = null;
        }
        if (this.chartSeries) {
            this.chartSeries.length = 0;
            this.chartSeries = null;
        }
        if (this.columnGroupObject) {
            for (var key in this.columnGroupObject) {
                if (Object.prototype.hasOwnProperty.call(this.columnGroupObject, key)) {
                    this.columnGroupObject[key] = null;
                }
            }
            this.columnGroupObject = null;
        }
        if (this.chartSeriesInfo) {
            for (var key in this.chartSeriesInfo) {
                if (Object.prototype.hasOwnProperty.call(this.chartSeriesInfo, key)) {
                    this.chartSeriesInfo[key] = null;
                }
            }
            this.chartSeriesInfo = {};
            this.selectedLegend = null;
        }
        if (this.headerColl) {
            for (var key in this.headerColl) {
                if (Object.prototype.hasOwnProperty.call(this.headerColl, key)) {
                    this.headerColl[key] = null;
                }
            }
            this.headerColl = {};
        }
        if (this.measuresNames) {
            for (var key in this.measuresNames) {
                if (Object.prototype.hasOwnProperty.call(this.measuresNames, key)) {
                    delete this.measuresNames[key];
                }
            }
            this.measuresNames = {};
        }
        this.chartSettings = null;
        this.persistSettings = null;
        this.dataSourceSettings = null;
        this.currentColumn = null;
        this.currentMeasure = null;
        this.pivotIndex = null;
        this.measureList = null;
        this.maxLevel = 0;
        this.measurePos = -1;
        this.accEmptyPoint = false;
        this.isChartInitial = true;
        this.calculatedWidth = null;
    };
    return PivotChart;
}());
export { PivotChart };