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,447 lines 142 kB
import { Reorder, headerRefreshed, getScrollBarWidth } from '@syncfusion/ej2-grids';
import { Grid, Resize, ExcelExport, PdfExport, ContextMenu, Freeze } from '@syncfusion/ej2-grids';
import { Selection } from '@syncfusion/ej2-grids';
import { createElement, setStyleAttribute, remove, isNullOrUndefined, EventHandler, getElement, closest, append } from '@syncfusion/ej2-base';
import { addClass, removeClass, SanitizeHtmlHelper, select, selectAll } from '@syncfusion/ej2-base';
import * as cls from '../../common/base/css-constant';
import * as events from '../../common/base/constant';
import { AggregateMenu } from '../../common/popups/aggregate-menu';
import { PivotUtil } from '../../base/util';
/**
 * Module to render PivotGrid control
 */
/** @hidden */
var Render = /** @class */ (function () {
    /** Constructor for render module
     *
     * @param {PivotView} parent - Instance of pivot table.
     */
    function Render(parent) {
        /** @hidden */
        this.isAutoFitEnabled = false;
        /** @hidden */
        this.pivotColumns = [];
        /** @hidden */
        this.indentCollection = {};
        this.colPos = 0;
        this.lastSpan = 0;
        this.lvlCollection = {};
        this.hierarchyCollection = {};
        this.lvlPosCollection = {};
        this.hierarchyPosCollection = {};
        this.position = 0;
        this.measurePos = 0;
        this.maxMeasurePos = 0;
        this.hierarchyCount = 0;
        this.actualText = '';
        this.drilledLevelInfo = {};
        this.parent = parent;
        this.resColWidth = (this.parent.showGroupingBar && this.parent.groupingBarModule) ? (this.parent.isAdaptive ? 180 : 250) :
            (this.parent.isAdaptive ? 140 : 200);
        this.engine = this.parent.dataType === 'olap' ? this.parent.olapEngineModule : this.parent.engineModule;
        this.gridSettings = this.parent.gridSettings;
        this.formatList = this.getFormatList();
        this.aggMenu = new AggregateMenu(this.parent);
    }
    /** @hidden */
    Render.prototype.render = function (refreshRequired) {
        if (refreshRequired) {
            if (this.timeOutObj) {
                clearTimeout(this.timeOutObj);
                this.timeOutObj = undefined;
            }
            this.removeAllHyperlinkEventHandlers();
            this.initProperties();
        }
        this.resColWidth = this.parent.isTabular ? this.gridSettings.columnWidth :
            (this.parent.showGroupingBar && this.parent.groupingBarModule) ? (this.parent.isAdaptive ? 180 : 250) :
                (this.parent.isAdaptive ? 140 : 200);
        this.engine = this.parent.dataType === 'olap' ? this.parent.olapEngineModule : this.parent.engineModule;
        this.gridSettings = this.parent.gridSettings;
        this.formatList = this.getFormatList();
        this.parent.gridCellCollection = {};
        this.injectGridModules(this.parent);
        this.rowStartPos = this.getRowStartPos();
        if (this.parent.grid && this.parent.grid.element && this.parent.element.querySelector('.' + cls.GRID_CLASS)) {
            this.parent.notEmpty = true;
            if (!this.engine.isEngineUpdated) {
                this.engine.headerContent = this.frameDataSource('header');
                this.engine.valueContent = this.frameDataSource('value');
            }
            else {
                if (this.parent.dataType !== 'olap') {
                    if (this.parent.isTabular) {
                        this.engine.headerContent = this.frameDataSource('header');
                    }
                    if (this.parent.enableValueSorting || this.parent.isTabular) {
                        this.engine.valueContent = this.frameDataSource('value');
                    }
                }
            }
            this.engine.isEngineUpdated = false;
            var frozenColumnsLength = this.parent.isTabular ? (this.parent.engineModule.rowMaxLevel + 1) : 1;
            this.parent.grid.setProperties({
                frozenColumns: frozenColumnsLength, columns: this.frameStackedHeaders(), dataSource: ((this.parent.dataType === 'olap' && this.parent.dataSourceSettings.url !== '') ? true :
                    (this.parent.dataSourceSettings.dataSource && this.parent.engineModule.data.length > 0 &&
                        this.parent.dataSourceSettings.values.length > 0)) && !this.engine.isEmptyData ?
                    this.frameGridDataSource(this.engine.valueContent) : this.frameDataSource('value')
            }, true);
            this.parent.grid.notify('datasource-modified', {});
            if (this.parent.isScrolling) {
                this.parent.resizeInfo = {};
            }
            this.parent.grid.width = this.calculateGridWidth();
            this.parent.grid.refreshColumns();
            if (this.parent.showGroupingBar && this.parent.groupingBarModule &&
                this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {
                this.parent.groupingBarModule.setGridRowWidth();
            }
            if (this.isAutoFitEnabled) {
                this.addPivotAutoFitClass();
            }
            else {
                this.removePivotAutoFitClass();
            }
            if (!this.gridSettings.allowAutoResizing && this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {
                this.parent.groupingBarModule.refreshUI();
            }
            if (!this.parent.isScrolling) {
                this.calculateGridHeight(true);
            }
            //this.parent.isScrolling = false;
        }
        else {
            this.parent.element.innerHTML = '';
            this.bindGrid(this.parent, (this.engine.isEmptyData ? true : false));
            var gridElement = createElement('div', { id: this.parent.element.id + '_grid' });
            this.parent.element.appendChild(gridElement);
            this.parent.grid.isStringTemplate = true;
            this.parent.grid.appendTo(gridElement);
        }
        this.parent.grid.on(headerRefreshed, this.refreshHeader, this);
    };
    Render.prototype.initProperties = function () {
        this.rowStartPos = undefined;
        this.maxIndent = undefined;
        this.resColWidth = undefined;
        this.isOverflows = undefined;
        this.indentCollection = {};
        this.formatList = undefined;
        this.colPos = 0;
        this.colGrandPos = undefined;
        this.rowGrandPos = undefined;
        this.lastSpan = 0;
        this.field = undefined;
        this.fieldCaption = undefined;
        this.lvlCollection = {};
        this.hierarchyCollection = {};
        this.lvlPosCollection = {};
        this.hierarchyPosCollection = {};
        this.position = 0;
        this.measurePos = 0;
        this.maxMeasurePos = 0;
        this.hierarchyCount = 0;
        this.actualText = '';
        this.timeOutObj = undefined;
    };
    Render.prototype.refreshHeader = function () {
        var mCont = this.parent.element.querySelector('.' + cls.CONTENT_VIRTUALTABLE_DIV);
        if (this.parent.enableVirtualization && !isNullOrUndefined(mCont)) {
            var virtualTable = closest(mCont, '.' + cls.GRID_CONTENT).querySelector('.' + cls.VIRTUALTABLE_DIV);
            var mHdr = this.parent.element.querySelector('.' + cls.MOVABLEHEADER_DIV);
            var vtr = mCont.querySelector('.' + cls.VIRTUALTRACK_DIV);
            this.parent.virtualHeaderDiv = mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV);
            if (mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV)) {
                remove(mHdr.querySelector('.' + cls.VIRTUALTRACK_DIV));
            }
            else {
                this.parent.virtualHeaderDiv = createElement('div', { className: cls.VIRTUALTRACK_DIV });
            }
            mHdr.appendChild(this.parent.virtualHeaderDiv);
            if (vtr) {
                setStyleAttribute(this.parent.virtualHeaderDiv, { height: 0, width: vtr.style.width });
            }
            if (mHdr.querySelector('.' + cls.TABLE)) {
                setStyleAttribute(mHdr.querySelector('.' + cls.TABLE), {
                    transform: (mCont.querySelector('.' + cls.TABLE).style.transform).split(',')[0] + ',' + 0 + 'px)'
                });
                var freezedCellValue = parseInt(mHdr.querySelector('.' + cls.TABLE)
                    .style.transform.split('(')[1].split(',')[0].split('px')[0], 10);
                if (this.parent.enableRtl) {
                    this.parent.element.querySelector('.' + cls.FREEZED_CELL).style.right
                        = Number(freezedCellValue) + 'px';
                }
                else {
                    this.parent.element.querySelector('.' + cls.FREEZED_CELL).style.left
                        = Number(-freezedCellValue) + 'px';
                }
            }
            var ele = this.parent.isAdaptive ? mCont :
                (virtualTable && (virtualTable.style.display !== 'none')) ? virtualTable : mCont.parentElement;
            mHdr.scrollLeft = ele.scrollLeft;
        }
    };
    /** @hidden */
    Render.prototype.bindGrid = function (parent, isEmpty) {
        this.injectGridModules(parent);
        this.parent.grid = new Grid({
            cssClass: this.parent.cssClass,
            frozenColumns: 1,
            frozenRows: 0,
            enableHover: false,
            dataSource: isEmpty ? this.frameEmptyData() : this.frameDataSource('value'),
            columns: isEmpty ? this.frameEmptyColumns() : this.frameStackedHeaders(),
            height: isEmpty ? 'auto' : this.calculateGridHeight(),
            width: isEmpty ? (this.gridSettings.allowAutoResizing ? this.parent.width : 400) : this.calculateGridWidth(),
            locale: parent.locale,
            enableRtl: parent.enableRtl,
            allowExcelExport: parent.allowExcelExport,
            allowPdfExport: parent.allowPdfExport,
            allowResizing: this.gridSettings.allowResizing,
            allowTextWrap: this.gridSettings.allowTextWrap,
            clipMode: this.gridSettings.clipMode,
            allowReordering: this.gridSettings.allowReordering,
            allowSelection: this.gridSettings.allowSelection,
            contextMenuItems: this.gridSettings.contextMenuItems,
            selectedRowIndex: this.gridSettings.selectedRowIndex,
            selectionSettings: this.gridSettings.selectionSettings,
            textWrapSettings: this.gridSettings.textWrapSettings,
            printMode: this.gridSettings.printMode,
            rowHeight: this.gridSettings.rowHeight,
            gridLines: this.gridSettings.gridLines,
            contextMenuClick: this.contextMenuClick.bind(this),
            contextMenuOpen: this.contextMenuOpen.bind(this),
            beforeCopy: this.gridSettings.beforeCopy ? this.gridSettings.beforeCopy.bind(this.parent) : undefined,
            beforePrint: this.gridSettings.beforePrint ? this.gridSettings.beforePrint.bind(this.parent) : undefined,
            printComplete: this.gridSettings.printComplete ? this.gridSettings.printComplete.bind(this.parent) : undefined,
            rowSelecting: this.gridSettings.rowSelecting ? this.gridSettings.rowSelecting.bind(this.parent) : undefined,
            rowSelected: this.rowSelected.bind(this),
            rowDeselecting: this.gridSettings.rowDeselecting ? this.gridSettings.rowDeselecting.bind(this.parent) : undefined,
            rowDeselected: this.rowDeselected.bind(this),
            cellSelecting: this.cellSelecting.bind(this),
            cellSelected: this.cellSelected.bind(this),
            cellDeselecting: this.gridSettings.cellDeselecting ? this.gridSettings.cellDeselecting.bind(this.parent) : undefined,
            cellDeselected: this.cellDeselected.bind(this),
            resizeStart: this.gridSettings.resizeStart ? this.gridSettings.resizeStart.bind(this.parent) : undefined,
            columnDragStart: this.gridSettings.columnDragStart ? this.gridSettings.columnDragStart.bind(this) : undefined,
            columnDrag: this.gridSettings.columnDrag ? this.gridSettings.columnDrag.bind(this) : undefined,
            columnDrop: this.gridSettings.columnDrop ? this.gridSettings.columnDrop.bind(this) : undefined,
            beforeExcelExport: this.beforeExcelExport.bind(this),
            resizing: this.setGroupWidth.bind(this),
            resizeStop: this.onResizeStop.bind(this),
            queryCellInfo: this.queryCellInfo.bind(this),
            dataBound: this.dataBound.bind(this),
            headerCellInfo: this.headerCellInfo.bind(this),
            excelHeaderQueryCellInfo: this.excelHeaderQueryCellInfo.bind(this),
            pdfHeaderQueryCellInfo: this.pdfHeaderQueryCellInfo.bind(this),
            excelQueryCellInfo: this.excelQueryCellInfo.bind(this),
            pdfQueryCellInfo: this.pdfQueryCellInfo.bind(this),
            beforePdfExport: this.gridSettings.beforePdfExport ? this.gridSettings.beforePdfExport.bind(this) : undefined,
            pdfExportComplete: this.pdfExportComplete.bind(this),
            excelExportComplete: this.excelExportComplete.bind(this),
            actionComplete: this.actionComplete.bind(this)
        });
        this.parent.grid.on('header-refreshed', this.headerRefreshed.bind(this));
        this.parent.grid.on('export-DataBound', this.excelDataBound.bind(this));
    };
    Render.prototype.actionComplete = function (args) {
        if (args && args.requestType === 'refresh' && this.isAutoFitEnabled) {
            this.removePivotAutoFitClass();
        }
    };
    /**
     * It is used to add the pivot autofit class
     *
     * @returns {void}
     * @hidden
     */
    Render.prototype.addPivotAutoFitClass = function () {
        if (!document.body.classList.contains(cls.PIVOT_VIEW_CLASS)) {
            document.body.classList.add(cls.PIVOT_VIEW_CLASS);
        }
        if (!document.body.classList.contains(cls.PIVOT_VIEW_AUTOFIT)) {
            document.body.classList.add(cls.PIVOT_VIEW_AUTOFIT);
        }
    };
    /**
     * It is used to remove the pivot autofit class
     *
     * @returns {void}
     * @hidden
     */
    Render.prototype.removePivotAutoFitClass = function () {
        if (document.body.classList.contains(cls.PIVOT_VIEW_CLASS)) {
            document.body.classList.remove(cls.PIVOT_VIEW_CLASS);
        }
        if (document.body.classList.contains(cls.PIVOT_VIEW_AUTOFIT)) {
            document.body.classList.remove(cls.PIVOT_VIEW_AUTOFIT);
        }
    };
    Render.prototype.headerRefreshed = function () {
        var mHdr = this.parent.element.querySelector('.' + cls.MOVABLEHEADER_DIV);
        if (this.parent.lastGridSettings && Object.keys(this.parent.lastGridSettings).indexOf('allowResizing') > -1 && !isNullOrUndefined(mHdr) && mHdr.querySelector('.' + cls.TABLE) &&
            this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {
            this.parent.lastGridSettings = undefined;
            this.parent.groupingBarModule.setGridRowWidth();
        }
    };
    Render.prototype.beforeExcelExport = function (args) {
        if (!isNullOrUndefined(args.gridObject.columns) && !isNullOrUndefined(this.parent.pivotColumns)) {
            args.gridObject.columns[args.gridObject.columns.length - 1].width =
                this.parent.pivotColumns[this.parent.pivotColumns.length - 1].width;
        }
        this.parent.trigger(events.beforeExcelExport, args);
    };
    Render.prototype.rowSelected = function (args) {
        this.parent.renderModule.selected();
        this.parent.trigger(events.rowSelected, args);
    };
    Render.prototype.rowDeselected = function (args) {
        this.parent.renderModule.selected();
        this.parent.trigger(events.rowDeselected, args);
    };
    Render.prototype.cellSelected = function (args) {
        if (this.parent.rowRangeSelection.enable) {
            this.parent.grid.selectionModule.selectRowsByRange(this.parent.rowRangeSelection.startIndex, this.parent.rowRangeSelection.endIndex);
            this.parent.rowRangeSelection.enable = false;
        }
        else {
            this.parent.renderModule.selected();
            this.parent.trigger(events.selected, args);
        }
    };
    Render.prototype.cellSelecting = function (args) {
        var target = this.parent.grid.selectionModule['actualTarget'];
        if (!isNullOrUndefined(target) && ((target.classList.contains('e-expand') || target.classList.contains('e-collapse'))
            || (this.parent.allowGrouping && !isNullOrUndefined(target.closest('.e-valuescontent'))))) {
            args.cancel = true;
        }
        this.parent.trigger(events.selecting, args);
    };
    Render.prototype.cellDeselected = function (args) {
        this.parent.renderModule.selected();
        this.parent.trigger(events.cellDeselected, args);
    };
    Render.prototype.queryCellInfo = function (args) {
        this.parent.renderModule.rowCellBoundEvent(args);
    };
    Render.prototype.headerCellInfo = function (args) {
        this.parent.renderModule.columnCellBoundEvent(args);
    };
    Render.prototype.excelHeaderQueryCellInfo = function (args) {
        this.parent.renderModule.excelColumnEvent(args);
    };
    Render.prototype.pdfQueryCellInfo = function (args) {
        this.parent.renderModule.pdfRowEvent(args);
    };
    Render.prototype.excelQueryCellInfo = function (args) {
        this.parent.renderModule.excelRowEvent(args);
    };
    Render.prototype.pdfHeaderQueryCellInfo = function (args) {
        this.parent.renderModule.pdfColumnEvent(args);
    };
    Render.prototype.pdfExportComplete = function (args) {
        if (this.parent.lastColumn !== undefined && this.parent.lastColumn &&
            this.parent.lastColumn.width !== 'auto') {
            this.parent.lastColumn.width = 'auto';
            this.parent.lastColumn = undefined;
        }
        var exportCompleteEventArgs = {
            type: 'PDF',
            promise: args.promise
        };
        this.parent.trigger(events.exportComplete, exportCompleteEventArgs);
    };
    Render.prototype.excelExportComplete = function (args) {
        if (this.parent.lastColumn !== undefined && this.parent.lastColumn &&
            this.parent.lastColumn.width !== 'auto') {
            this.parent.lastColumn.width = 'auto';
            this.parent.lastColumn = undefined;
        }
        var exportCompleteEventArgs = {
            type: 'Excel/CSV',
            promise: args.promise
        };
        this.parent.trigger(events.exportComplete, exportCompleteEventArgs);
    };
    Render.prototype.dataBound = function () {
        // if ((this.parent.dataSourceSettings.valueAxis === 'row' ||
        //     !(this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.valueAxis === 'column' && this.parent.engineModule && !this.parent.engineModule.isLastHeaderHasMeasures)) &&
        //     this.parent.element.querySelector('.e-firstcell') && !(this.parent.dataSourceSettings.values.length === 1 && this.parent.dataSourceSettings.columns.length > 0)) {
        //     if (this.parent.enableRtl) {
        //         (this.parent.element.querySelector('.e-firstcell') as HTMLElement).style.borderRight = 'none';
        //     } else {
        //         (this.parent.element.querySelector('.e-firstcell') as HTMLElement).style.borderLeft = 'none';
        //     }
        // }
        if (this.parent.notEmpty) {
            this.calculateGridHeight(true);
        }
        this.parent.isScrolling = false;
        this.setFocusOnLastCell();
        if (!isNullOrUndefined(this.parent['renderReactTemplates'])) {
            this.parent['renderReactTemplates']();
        }
        if (this.parent.isInitial) {
            this.parent.isInitial = false;
            this.parent.refreshData();
            if (this.parent.enableVirtualization) {
                this.parent.onContentReady();
            }
        }
        this.parent.notify(events.contentReady, {});
    };
    Render.prototype.setFocusOnLastCell = function () {
        if (this.parent.keyboardModule && this.parent.keyboardModule.event &&
            this.parent.keyboardModule.event.target.nodeName === 'TD') {
            var gridFocus = this.parent.grid.serviceLocator.getService('focus');
            gridFocus.setFocusedElement(this.parent.keyboardModule.event.target);
            gridFocus.focus(this.parent.keyboardModule.event);
            addClass([this.parent.keyboardModule.event.target], ['e-focused', 'e-focus']);
            this.parent.keyboardModule.event.target.setAttribute('tabindex', '0');
            this.parent.keyboardModule.event = undefined;
        }
    };
    Render.prototype.getCellElement = function (target) {
        var currentElement = closest(target, 'td');
        if (isNullOrUndefined(currentElement)) {
            currentElement = closest(target, 'th');
        }
        return currentElement;
    };
    Render.prototype.contextMenuOpen = function (args) {
        var _this = this;
        if (args.element && this.parent.cssClass) {
            addClass([args.element.parentElement], this.parent.cssClass);
        }
        var _loop_1 = function (item) {
            var cellTarget = this_1.parent.lastCellClicked ? this_1.parent.lastCellClicked :
                (this_1.parent.isAdaptive ? args.event.target : this_1.parent.lastCellClicked);
            var elem = this_1.getCellElement(cellTarget);
            var bool = void 0;
            var isGroupElement = void 0;
            if (!elem || (elem && Number(elem.getAttribute('index')) === 0 && parseInt(elem.getAttribute('aria-colindex'), 10) - 1 === 0)) {
                args.cancel = true;
                return { value: void 0 };
            }
            if (elem.classList.contains('e-valuesheader') || elem.classList.contains('e-stot')) {
                bool = true;
            }
            if (this_1.parent.allowGrouping && this_1.parent.groupingModule && !this_1.validateField(elem)) {
                isGroupElement = true;
            }
            var rowIndex = Number(elem.getAttribute('index'));
            var colIndex = parseInt(elem.getAttribute('aria-colindex'), 10) - 1;
            var pivotValue1 = this_1.parent.pivotValues[rowIndex][colIndex];
            var selectedID = item.id;
            switch (selectedID) {
                case this_1.parent.element.id + '_expand':
                    if (elem.querySelectorAll('.' + cls.EXPAND).length > 0) {
                        if (selectAll('#' + this_1.parent.element.id + '_expand', args.element)) {
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.add(cls.MENU_DISABLE);
                        }
                        if (select('#' + this_1.parent.element.id + '_expand', args.element).classList.contains(cls.MENU_DISABLE)) {
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                        if (select('#' + this_1.parent.element.id + '_expand', args.element).classList.contains(cls.MENU_HIDE)) {
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.remove(cls.MENU_HIDE);
                            select('#' + this_1.parent.element.id + '_collapse', args.element).classList.remove(cls.MENU_HIDE);
                        }
                    }
                    else {
                        if (bool) {
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.add(cls.MENU_HIDE);
                        }
                        else {
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.add(cls.MENU_DISABLE);
                        }
                    }
                    break;
                case this_1.parent.element.id + '_collapse':
                    if (elem.querySelectorAll('.' + cls.COLLAPSE).length > 0) {
                        if (select('#' + this_1.parent.element.id + '_expand', args.element)) {
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.add(cls.MENU_DISABLE);
                        }
                        if (select('#' + this_1.parent.element.id + '_collapse', args.element).classList.contains(cls.MENU_DISABLE)) {
                            select('#' + this_1.parent.element.id + '_collapse', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                        if (select('#' + this_1.parent.element.id + '_collapse', args.element).classList.contains(cls.MENU_HIDE)) {
                            select('#' + this_1.parent.element.id + '_collapse', args.element).classList.remove(cls.MENU_HIDE);
                            select('#' + this_1.parent.element.id + '_expand', args.element).classList.remove(cls.MENU_HIDE);
                        }
                    }
                    else {
                        if (bool) {
                            select('#' + this_1.parent.element.id + '_collapse', args.element).classList.add(cls.MENU_HIDE);
                        }
                        else {
                            select('#' + this_1.parent.element.id + '_collapse', args.element).classList.add(cls.MENU_DISABLE);
                        }
                    }
                    break;
                case this_1.parent.element.id + '_custom_group':
                    if (!isGroupElement && args.items.length === 2) {
                        args.cancel = true;
                    }
                    if (selectAll('#' + this_1.parent.element.id + '_custom_group', args.element)) {
                        addClass([select('#' + this_1.parent.element.id + '_custom_group', args.element)], cls.MENU_HIDE);
                    }
                    if (isGroupElement) {
                        if (selectAll('#' + this_1.parent.element.id + '_custom_group', args.element)) {
                            removeClass([select('#' + this_1.parent.element.id + '_custom_group', args.element)], cls.MENU_HIDE);
                        }
                    }
                    break;
                case this_1.parent.element.id + '_custom_ungroup':
                    if (selectAll('#' + this_1.parent.element.id + '_custom_ungroup', args.element)) {
                        addClass([select('#' + this_1.parent.element.id + '_custom_ungroup', args.element)], cls.MENU_HIDE);
                    }
                    if (isGroupElement) {
                        var isUngroupOption = false;
                        var fieldName = elem.getAttribute('fieldname');
                        var groupField = PivotUtil.getFieldByName(fieldName, this_1.parent.dataSourceSettings.groupSettings);
                        if (groupField && groupField.type === 'Custom' || (this_1.parent.engineModule.fieldList[fieldName].isCustomField && fieldName.indexOf('_custom_group') > -1)) {
                            groupField = PivotUtil.getFieldByName(fieldName.replace('_custom_group', ''), this_1.parent.dataSourceSettings.groupSettings);
                            if (groupField) {
                                var cell = this_1.parent.engineModule.pivotValues[Number(elem.getAttribute('index'))][parseInt(elem.getAttribute('aria-colindex'), 10) - 1];
                                var selectedCellsInfo = this_1.parent.groupingModule.getSelectedCells(cell.axis, fieldName, cell.actualText.toString());
                                selectedCellsInfo.push({ axis: cell.axis, fieldName: fieldName, name: cell.actualText.toString(),
                                    cellInfo: cell });
                                var selectedOptions = this_1.parent.groupingModule.getSelectedOptions(selectedCellsInfo);
                                for (var _i = 0, _a = groupField.customGroups; _i < _a.length; _i++) {
                                    var customGroup = _a[_i];
                                    if (selectedOptions.indexOf(customGroup.groupName) > -1) {
                                        isUngroupOption = true;
                                        break;
                                    }
                                }
                            }
                        }
                        else if (groupField && (groupField.type === 'Date' || groupField.type === 'Number') ||
                            (this_1.parent.engineModule.fieldList[fieldName].isCustomField && fieldName.indexOf('_date_group') > -1)) {
                            isUngroupOption = true;
                        }
                        if (selectAll('#' + this_1.parent.element.id + '_custom_ungroup', args.element) && isUngroupOption) {
                            removeClass([select('#' + this_1.parent.element.id + '_custom_ungroup', args.element)], cls.MENU_HIDE);
                        }
                    }
                    break;
                case this_1.parent.element.id + '_drillthrough':
                    if (!this_1.parent.allowDrillThrough) {
                        if (select('#' + this_1.parent.element.id + '_drillthrough', args.element)) {
                            select('#' + this_1.parent.element.id + '_drillthrough', args.element).classList.add(cls.MENU_DISABLE);
                        }
                    }
                    else if (!(elem.classList.contains('e-summary'))) {
                        if (elem.innerText === '') {
                            if (select('#' + this_1.parent.element.id + '_drillthrough', args.element)) {
                                select('#' + this_1.parent.element.id + '_drillthrough', args.element).classList.add(cls.MENU_DISABLE);
                            }
                        }
                    }
                    else {
                        if (select('#' + this_1.parent.element.id + '_drillthrough', args.element).classList.contains(cls.MENU_DISABLE)) {
                            select('#' + this_1.parent.element.id + '_drillthrough', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                    }
                    break;
                case this_1.parent.element.id + '_sortasc':
                    if (!this_1.parent.enableValueSorting) {
                        if (select('#' + this_1.parent.element.id + '_sortasc', args.element)) {
                            select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.add(cls.MENU_DISABLE);
                        }
                    }
                    else if (elem.querySelectorAll('.e-icon-descending').length > 0) {
                        if (select('#' + this_1.parent.element.id + '_sortdesc', args.element)) {
                            select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.add(cls.MENU_DISABLE);
                        }
                        else {
                            select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                        if (select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.contains(cls.MENU_DISABLE)) {
                            select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                    }
                    else if (select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.contains(cls.MENU_DISABLE)) {
                        select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.remove(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_sortdesc':
                    if (!this_1.parent.enableValueSorting) {
                        if (select('#' + this_1.parent.element.id + '_sortdesc', args.element)) {
                            select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.add(cls.MENU_DISABLE);
                        }
                    }
                    else if (elem.querySelectorAll('.e-icon-ascending').length > 0) {
                        if (select('#' + this_1.parent.element.id + '_sortasc', args.element)) {
                            select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.add(cls.MENU_DISABLE);
                        }
                        else {
                            select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                        if (select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.contains(cls.MENU_DISABLE)) {
                            select('#' + this_1.parent.element.id + '_sortdesc', args.element).classList.remove(cls.MENU_DISABLE);
                        }
                    }
                    else if (select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.contains(cls.MENU_DISABLE)) {
                        select('#' + this_1.parent.element.id + '_sortasc', args.element).classList.remove(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_CalculatedField':
                    if (!this_1.parent.allowCalculatedField) {
                        select('#' + this_1.parent.element.id + '_CalculatedField', args.element).classList.add(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_pdf':
                    if (!this_1.parent.allowPdfExport) {
                        select('#' + this_1.parent.element.id + '_pdf', args.element).classList.add(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_excel':
                    if (!this_1.parent.allowExcelExport) {
                        select('#' + this_1.parent.element.id + '_excel', args.element).classList.add(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_csv':
                    if (!this_1.parent.allowExcelExport) {
                        select('#' + this_1.parent.element.id + '_csv', args.element).classList.add(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_exporting':
                    if ((!this_1.parent.allowExcelExport) && (!this_1.parent.allowPdfExport)) {
                        select('#' + this_1.parent.element.id + '_exporting', args.element).classList.add(cls.MENU_DISABLE);
                    }
                    break;
                case this_1.parent.element.id + '_aggregate':
                    if ((select('#' + this_1.parent.element.id + '_aggregate', args.element)) &&
                        (!select('#' + this_1.parent.element.id + '_aggregate', args.element).classList.contains(cls.MENU_DISABLE))) {
                        select('#' + this_1.parent.element.id + '_aggregate', args.element).classList.add(cls.MENU_DISABLE);
                    }
                    if ((elem.classList.contains('e-valuesheader') || elem.classList.contains('e-valuescontent') ||
                        (elem.classList.contains('e-stot') && elem.classList.contains('e-rowsheader'))) && this_1.parent.dataType !== 'olap') {
                        var fieldType_1;
                        if (!(elem.innerText === '')) {
                            fieldType_1 = this_1.parent.engineModule.fieldList[pivotValue1.actualText.toString()].type;
                        }
                        var eventArgs = {
                            cancel: false, fieldName: pivotValue1.actualText.toString(),
                            aggregateTypes: this_1.getMenuItem(fieldType_1).slice(),
                            displayMenuCount: 7
                        };
                        this_1.parent.trigger(events.aggregateMenuOpen, eventArgs, function (observedArgs) {
                            if (!observedArgs.cancel && !(elem.innerText === '')) {
                                var menuItem = [];
                                var checkDuplicates = [];
                                for (var i = 0; i < observedArgs.aggregateTypes.length; i++) {
                                    var key = observedArgs.aggregateTypes[i];
                                    if (fieldType_1 !== 'number') {
                                        if ((['Count', 'DistinctCount'].indexOf(key) > -1) && (checkDuplicates.indexOf(key) < 0)) {
                                            menuItem.push({ text: _this.parent.localeObj.getConstant(key), id: _this.parent.element.id + '_Agg' + key });
                                            checkDuplicates.push(key);
                                        }
                                    }
                                    else {
                                        if ((_this.parent.getAllSummaryType().indexOf(key) > -1) && (checkDuplicates.indexOf(key) < 0)) {
                                            menuItem.push({ text: _this.parent.localeObj.getConstant(key), id: _this.parent.element.id + '_Agg' + key });
                                            checkDuplicates.push(key);
                                        }
                                    }
                                }
                                if (menuItem.length > observedArgs.displayMenuCount) {
                                    menuItem.splice(observedArgs.displayMenuCount);
                                    menuItem.push({
                                        text: _this.parent.localeObj.getConstant('MoreOption'),
                                        id: _this.parent.element.id + '_Agg' + 'MoreOption'
                                    });
                                }
                                if (menuItem && menuItem.length >= 1) {
                                    item.items = menuItem;
                                    select('#' + _this.parent.element.id + '_aggregate', args.element).classList.remove(cls.MENU_DISABLE);
                                }
                            }
                        });
                    }
                    break;
            }
        };
        var this_1 = this;
        for (var _i = 0, _a = args.items; _i < _a.length; _i++) {
            var item = _a[_i];
            var state_1 = _loop_1(item);
            if (typeof state_1 === "object")
                return state_1.value;
        }
        this.parent.trigger(events.contextMenuOpen, args);
    };
    Render.prototype.getMenuItem = function (isStringField) {
        var menuItems = [];
        for (var i = 0; i < this.parent.aggregateTypes.length; i++) {
            var key = this.parent.aggregateTypes[i];
            if (isStringField !== 'string') {
                if ((this.parent.getAllSummaryType().indexOf(key) > -1) && (menuItems.indexOf(key) === -1)) {
                    menuItems.push(key);
                }
            }
            else {
                if ((['Count', 'DistinctCount'].indexOf(key) > -1) && (menuItems.indexOf(key) === -1)) {
                    menuItems.push(key);
                }
            }
        }
        return menuItems;
    };
    Render.prototype.contextMenuClick = function (args) {
        var _this = this;
        // this.parent.gridSettings.contextMenuClick();
        var target = this.parent.lastCellClicked;
        var selected = args.item.id;
        var exportArgs = {};
        var ele = this.getCellElement(target);
        var rowIndx = Number(ele.getAttribute('index'));
        var colIndx = parseInt(ele.getAttribute('aria-colindex'), 10) - 1;
        var pivotValue = this.parent.pivotValues[rowIndx][colIndx];
        var aggregateType;
        if (args.item.id.indexOf(this.parent.element.id + '_Agg') > -1) {
            this.field = this.parent.engineModule.fieldList[pivotValue.actualText.toString()].id;
            this.fieldCaption = this.parent.engineModule.fieldList[pivotValue.actualText.toString()].caption;
            aggregateType = args.item.id.split('_Agg')[1];
        }
        switch (selected) {
            case this.parent.element.id + '_pdf':
                exportArgs = {
                    pdfDoc: undefined,
                    isBlob: false,
                    isMultipleExport: false,
                    pdfExportProperties: { fileName: 'Export.pdf' }
                };
                this.parent.trigger(events.beforeExport, exportArgs, function (observedArgs) {
                    _this.parent.pdfExport(observedArgs.pdfExportProperties, observedArgs.isMultipleExport, observedArgs.pdfDoc, observedArgs.isBlob);
                });
                break;
            case this.parent.element.id + '_excel':
                exportArgs = {
                    isBlob: false,
                    isMultipleExport: false,
                    workbook: undefined,
                    excelExportProperties: { fileName: 'Export.xlsx' }
                };
                this.parent.trigger(events.beforeExport, exportArgs, function (observedArgs) {
                    _this.parent.excelExport(observedArgs.excelExportProperties, observedArgs.isMultipleExport, observedArgs.workbook, observedArgs.isBlob);
                });
                break;
            case this.parent.element.id + '_csv':
                exportArgs = {
                    isBlob: false,
                    workbook: undefined,
                    isMultipleExport: false,
                    excelExportProperties: { fileName: 'Export.csv' }
                };
                this.parent.trigger(events.beforeExport, exportArgs, function (observedArgs) {
                    _this.parent.csvExport(observedArgs.excelExportProperties, observedArgs.isMultipleExport, observedArgs.workbook, observedArgs.isBlob);
                });
                break;
            case this.parent.element.id + '_drillthrough_menu': {
                var event_1 = new MouseEvent('dblclick', {
                    'view': window,
                    'bubbles': true,
                    'cancelable': true
                });
                ele.dispatchEvent(event_1);
                break;
            }
            case this.parent.element.id + '_sortasc':
                this.parent.setProperties({
                    dataSourceSettings: {
                        valueSortSettings: {
                            columnHeaderText: pivotValue.valueSort.levelName,
                            headerDelimiter: this.parent.dataSourceSettings.valueSortSettings.headerDelimiter
                        }
                    }
                });
                this.parent.dataSourceSettings.valueSortSettings.sortOrder = 'Ascending';
                break;
            case this.parent.element.id + '_sortdesc':
                this.parent.setProperties({
                    dataSourceSettings: {
                        valueSortSettings: {
                            columnHeaderText: pivotValue.valueSort.levelName,
                            headerDelimiter: this.parent.dataSourceSettings.valueSortSettings.headerDelimiter
                        }
                    }
                });
                this.parent.dataSourceSettings.valueSortSettings.sortOrder = 'Descending';
                break;
            case this.parent.element.id + '_expand':
                if (ele.querySelectorAll('.' + cls.EXPAND)) {
                    var exp = ele.querySelectorAll('.' + cls.EXPAND)[0];
                    this.parent.onDrill(exp);
                }
                break;
            case this.parent.element.id + '_collapse':
                if (ele.querySelectorAll('.' + cls.COLLAPSE)) {
                    var colp = ele.querySelectorAll('.' + cls.COLLAPSE)[0];
                    this.parent.onDrill(colp);
                }
                break;
            case this.parent.element.id + '_CalculatedField':
                this.parent.calculatedFieldModule.createCalculatedFieldDialog();
                break;
            case this.parent.element.id + '_AggMoreOption':
            case this.parent.element.id + '_AggDifferenceFrom':
            case this.parent.element.id + '_AggPercentageOfDifferenceFrom':
            case this.parent.element.id + '_AggPercentageOfParentTotal':
                ele.setAttribute('id', this.field);
                ele.setAttribute('data-caption', this.fieldCaption);
                ele.setAttribute('data-field', this.field);
                ele.setAttribute('data-type', this.engine.fieldList[pivotValue.actualText.toString()].aggregateType);
                ele.setAttribute('data-basefield', this.engine.fieldList[pivotValue.actualText.toString()].baseField);
                ele.setAttribute('data-baseItem', this.engine.fieldList[pivotValue.actualText.toString()].baseItem);
                this.aggMenu.createValueSettingsDialog(ele, this.parent.element, aggregateType);
                break;
            case this.parent.element.id + '_Agg' + aggregateType:
                this.updateAggregate(aggregateType);
                break;
            case this.parent.element.id + '_custom_group':
            case this.parent.element.id + '_custom_ungroup':
                if (this.parent.groupingModule) {
                    var args_1 = {
                        target: ele,
                        option: selected,
                        parentElement: this.parent.element
                    };
                    this.parent.notify(events.initGrouping, args_1);
                    this.parent.grid.contextMenuModule.contextMenu.close();
                }
                break;
        }
        this.parent.trigger(events.contextMenuClick, args);
    };
    Render.prototype.validateColumnTotalcell = function (columnIndex) {
        var headerPosKeys = Object.keys(this.engine.headerContent);
        var keysLength = headerPosKeys.length;
        var sumLock = false;
        var fieldName = '';
        for (var pos = keysLength - 1; pos >= 0; pos--) {
            var cell = this.engine.headerContent[Number(headerPosKeys[pos])][columnIndex];
            if (cell) {
                sumLock = sumLock && fieldName !== '' ? fieldName === cell.valueSort.axis : false;
                fieldName = cell.valueSort.axis ? cell.valueSort.axis.toString() : '';
                if (cell.type === 'sum') {
                    sumLock = true;
                }
                if (sumLock && cell.members && cell.members.length > 0) {
                    return true;
                }
            }
            else {
                return false;
            }
        }
        return false;
    };
    Render.prototype.validateField = function (target) {
        var isValueField = false;
        if (target.classList.contains('e-stot') || target.classList.contains('e-gtot') || target.classList.contains('e-valuescontent') || target.classList.contains('e-valuesheader')) {
            isValueField = true;
        }
        else {
            var fieldName = target.getAttribute('fieldName');
            if (!fieldName || fieldName === '') {
                var rowIndx = Number(target.getAttribute('index'));
                var colIndx = parseInt(target.getAttribute('aria-colindex'), 10) - 1;
                fieldName = this.engine.pivotValues[rowIndx][colIndx].actualText;
            }
            var valuefields = this.parent.dataSourceSettings.values;
            for (var valueCnt = 0; valueCnt < valuefields.length; valueCnt++) {
                if (this.parent.dataSourceSettings.values[valueCnt].name === fieldName) {
                    isValueField = true;
                    break;
                }
            }
        }
        return isValueField;
    };
    Render.prototype.updateAggregate = function (aggregate) {
        if (this.parent.getAllSummaryType().indexOf(aggregate) > -1) {
            var valuefields = this.parent.dataSourceSettings.values;
            for (var valueCnt = 0; valueCnt < this.parent.dataSourceSettings.values.length; valueCnt++) {
                if (this.parent.dataSourceSettings.values[valueCnt].name === this.field) {
                    var dataSourceItem = valuefields[valueCnt];
                    dataSourceItem.type = aggregate;
                }
            }
        }
    };
    Render.prototype.injectGridModules = function (parent) {
        Grid.Inject(Freeze);
        if (parent.allowExcelExport) {
            Grid.Inject(ExcelExport);
        }
        if (parent.allowPdfExport) {
            Grid.Inject(PdfExport);
        }
        Grid.Inject(Selection, Reorder, Resize);
        if (this.gridSettings.contextMenuItems) {
            Grid.Inject(ContextMenu);
        }
    };
    /** @hidden */
    Render.prototype.updateGridSettings = function () {
        this.injectGridModules(this.parent);
        this.parent.grid.allowResizing = this.gridSettings.allowResizing;
        this.parent.grid.clipMode = this.gridSettings.clipMode;
        this.parent.grid.allowTextWrap = this.gridSettings.allowTextWrap;
        this.parent.grid.allowReordering = this.gridSettings.allowReordering;
        this.parent.grid.allowSelection = this.gridSettings.allowSelection;
        this.parent.grid.contextMenuItems = this.gridSettings.contextMenuItems;
        this.parent.grid.selectedRowIndex = this.gridSettings.selectedRowIndex;
        this.parent.grid.selectionSettings = this.gridSettings.selectionSettings;
        this.parent.grid.textWrapSettings = this.gridSettings.textWrapSettings;
        this.parent.grid.printMode = this.gridSettings.printMode;
        this.parent.grid.rowHeight = this.gridSettings.rowHeight;
        this.parent.grid.gridLines = this.gridSettings.gridLines;
        if (this.parent.lastGridSettings) {
            var keys = Object.keys(this.parent.lastGridSettings);
            if (keys.indexOf('height') > -1) {
                this.parent.grid.height = this.gridSettings.height;
            }
            if (keys.indexOf('width') > -1) {
                this.parent.grid.width = this.gridSettings.width;
            }
            this.updatePivotColumns();
            if (keys.indexOf('allowTextWrap') > -1 || keys.indexOf('clipMode') > -1) {
                this.parent.layoutRefresh();
            }
        }
        this.clearColumnSelection();
    };
    Render.prototype.updatePivotColumns = function () {
        var keys = Object.keys(this.parent.lastGridSettings);
        for (var colPos = 0; colPos < this.parent.pivotColumns.length; colPos++) {
            var pivotColumn = this.parent.pivotColumns[colPos];
            for (var keyPos = 0; keyPos < keys.length; keyPos++) {
                var key = keys[keyPos];
                if (!isNullOrUndefined((this.parent.pivotColumns[colPos])[key])) {
                    pivotColumn[key] = this.parent.lastGridSettings[key];
                }
            }
        }
        this.parent.fillGridColumns(this.parent.grid.columns);
    };
    Render.prototype.clearColumnSelection = function () {
        removeClass(this.parent.element.querySelectorAll('.' + cls.CELL_ACTIVE_BGCOLOR), [cls.CELL_ACTIVE_BGCOLOR, cls.SELECTED_BGCOLOR]);
    };
    Render.prototype.appendValueSortIcon = function (cell, tCell, rCnt, cCnt, column) {
        var engine = this.parent.dataType === 'pivot' ? this.parent.engineModule : this.parent.olapEngineModule;
        var vSort = this.parent.dataSourceSettings.valueSortSettings;
        var headerText = vSort && this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.mode !== 'Server'
            ? vSort.columnHeaderText : vSort.headerText;
        var columnOrder = vSort && this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.mode !== 'Server'
            ? vSort.columnSortOrder : vSort.sortOrder;
        if (this.parent.enableValueSorting && vSort && headerText !== '') {
            var len = (cell.type === 'grand sum' &&
                this.parent.dataSourceSettings.values.length === 1 && !this.parent.dataSourceSettings.alwaysShowValueHeader) ? 0 :
                (this.parent.dataSourceSettings.values.length > 1 || this.parent.dataSourceSettings.alwaysShowValueHeader) ?
                    (engine.headerContent.length - 1) :
                    this.parent.dataSourceSettings.columns.length === 0 ? 0 : (engine.headerContent.length - 1);
            var lock = (vSort && headerText) ? cell.valueSort.levelName === headerText : cCnt === vSort.columnIndex;
            if (vSort !== undefined && lock && (rCnt === len || (rCnt + 1) === len && cell.level > -1 &&
                engine.headerContent[(rCnt + 1)][cCnt]
                && engine.headerContent[(rCnt + 1)][cCnt].level === -1)) {
                tCell.querySelector('div div').appendChild(createElement('span', {
                    className: (columnOrder === 'Descending' ?
                        'e-icon-descending e-icons e-descending e-sortfilterdiv e-value-sort-icon' :
                        'e-icon-ascending e-icons e-ascending e-sortfilterdiv e-value-sort-icon') + (cell.hasChild ? ' e-value-sort-align' : ''),
                    styles: column.headerTextAlign === 'Right' ? 'float : left' : ''
                }));
            }
            // return tCell;
        }
        return tCell;
    };
    Render.prototype.onResizeStop = function (args) {
        if (args.column.columns && args.column.columns.length > 0) {
            this.getChildColumnWidth(args.column.columns);
        }
        else {
            var column = this.parent.isTabular ?
                (args.column.index < this.parent.engineModule.rowMaxLevel + 1) ? args.column.index + ".formattedText" :
                    "" + args.column.customAttributes.cell.valueSort.levelName :
                args.column.field === '0.formattedText' ? '0.formattedText' :
                    "" + args.column.customAttributes.cell.valueSort.levelName;
            this.parent.resizeInfo[column] = Number(args.column.width.toString().split('px')[0]);
        }
        if (this.parent.enableVirtualization && args.column.field === '0.formattedText') {
            if (this.parent.dataSourceSettings.values.length > 1
                && !isNullOrUndefined(this.parent.grid.columns[this.parent.grid.columns.length - 1].columns)) {
                var gridColumns = this.parent.grid.columns[this.parent.grid.columns.length - 1].columns;
                gridColumns[gridColumns.length - 1].minWidth = this.parent.gridSettings.columnWidth;
            }
            else {
                this.parent.grid.columns[this.parent.grid.columns.length - 1].minWidth =
                    this.parent.gridSettings.columnWidth;
            }
            this.parent.layoutRefresh();
            this.parent.grid.headerModule.refreshUI();
        }
        this.setGroupWidth(args);
        this.calculateGridHeight(true);
        this.parent.grid.hideScroll();
    };
    Render.prototype.getChildColumnWidth = function (parentColumn) {
        for (var _i = 0, parentColumn_1 = parentColumn; _i < parentColumn_1.length; _i++) {
            var column = parentColumn_1[_i];
            if (column.columns && column.columns.length > 0) {
                this.getChildColumnWidth(column.columns);
            }
            else {
                var colName = column.customAttributes.cell.valueSort.levelName;
                this.parent.resizeInfo[colName] = Number(column.width.toString().split('px')[0]);
            }
        }
    };
    Render.prototype.setGroupWidth = function (args) {
        if (this.parent.enableVirtualization && args.column.field === '0.formattedText') {
            if (this.parent.showGroupingBar && this.parent.groupingBarModule && this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS) && Number(args.column.width.toString().split('px')[0]) < 250) {
                args.cancel = true;
            }
            // else {
            //     (this.parent.element.querySelector('.e-frozenscrollbar') as HTMLElement).style.width = args.column.width.toString().split('px')[0] + 'px';
            // }
        }
        if (this.parent.showGroupingBar && this.parent.groupingBarModule &&
            this.parent.element.querySelector('.' + cls.GROUPING_BAR_CLASS)) {
            this.parent.groupingBarModule.refreshUI();
            if (this.parent.element.querySelector('.e-group-row').offsetWidth < 245 && !this.parent.firstColWidth) {
                args.cancel = true;
                var gridColumn = this.parent.grid.columns;
                if (gridColumn && gridColumn.length > 0) {
                    gridColumn[0].width = this.resColWidth;
                }
                this.parent.element.querySelector('.' + cls.HEADERCONTENT).querySelector('col').style.width = (this.resColWidth + 'px');
                this.parent.element.querySelector('.' + cls.CONTENT_CLASS).querySelector('col').style.width = (this.resColWidth + 'px');
            }
            this.parent.element.querySelector('.e-group-rows').style.height = 'auto';
            this.parent.element.querySelector('.e-group-values').style.width =
                this.parent.element.querySelector('.e-group-row').offsetWidth + 'px';
            var firstRowHeight = this.parent.element.querySelector('.' + cls.HEADERCONTENT).offsetHeight;
            this.parent.element.querySelector('.e-group-rows').style.height = firstRowHeight + 'px';
        }
        if (args.cancel) {
            var column = args.column.field === '0.formattedText' ? '0.formattedText' :
                args.column.customAttributes.cell.valueSort.levelName;
            this.parent.resizeInfo[column] = Number(args.column.width.toString().split('px')[0]);
            if (this.parent.enableVirtualization) {
                this.parent.layoutRefresh();
            }
        }
        if (this.parent.enableVirtualization) {
            this.parent.resizedValue = (args.cancel || args.column.field !== '0.formattedText') ? this.parent.resizedValue : Number(args.column.width.toString().split('px')[0]);
        }
        this.parent.trigger(args.e.type === 'touchend' || args.e.type === 'mouseup' ? events.resizeStop : events.resizing, args);
    };
    /** @hidden */
    Render.prototype.selected = function () {
        clearTimeout(this.timeOutObj);
        this.timeOutObj = setTimeout(this.onSelect.bind(this), 300);
    };
    Render.prototype.onSelect = function () {
        var pivotArgs = { selectedCellsInfo: [], pivotValues: this.parent.pivotValues, currentCell: null };
        var selectedElements = this.parent.element.querySelectorAll('.'
            + cls.CELL_SELECTED_BGCOLOR + ',.' + cls.SELECTED_BGCOLOR);
        for (var i = 0; i < selectedElements.length; i++) {
            var element = selectedElements[i];
            var colIndex = parseInt(element.getAttribute('aria-colindex'), 10) - 1;
            var rowIndex = Number(element.getAttribute('index'));
            var cell = this.engine.pivotValues[rowIndex][colIndex];
            if (cell) {
                if (cell.axis === 'value') {
                    pivotArgs.selectedCellsInfo.push({
                        currentCell: cell,
                        value: cell.value,
                        columnHeaders: cell.columnHeaders,
                        rowHeaders: cell.rowHeaders,
                        measure: cell.actualText.toString()
                    });
                }
                else if (cell.axis === 'column') {
                    pivotArgs.selectedCellsInfo.push({
                        currentCell: cell,
                        value: cell.formattedText,
                        columnHeaders: cell.valueSort.levelName,
                        rowHeaders: '',
                        measure: ''
                    });
                }
                else {
                    pivotArgs.selectedCellsInfo.push({
                        currentCell: cell,
                        value: cell.formattedText,
                        columnHeaders: '',
                        rowHeaders: cell.valueSort.levelName,
                        measure: ''
                    });
                }
            }
        }
        this.parent.trigger(events.cellSelected, pivotArgs);
    };
    Render.prototype.rowCellBoundEvent = function (args) {
        var tCell = args.cell;
        var rowOuterDiv = createElement('div', {
            className: cls.PIVOT_ROW_CONTAINER
        });
        if (tCell && (this.parent.notEmpty) && this.engine.headerContent) {
            var customClass = this.parent.hyperlinkSettings.cssClass;
            var colIndex = args.column && args.column.customAttributes && args.column.customAttributes.cell ?
                args.column.customAttributes.cell.colIndex : parseInt(tCell.getAttribute('aria-colindex'), 10) - 1;
            var index = this.parent.isTabular ? colIndex.toString() : '0';
            var cell = args.data[Number(index)];
            var isRowFieldsAvail = cell.valueSort && cell.valueSort.levelName === (this.parent.dataSourceSettings.rows.length === 0 && this.parent.dataSourceSettings.valueAxis === 'row' &&
                this.parent.localeObj.getConstant('grandTotal') + (this.parent.dataSourceSettings.valueSortSettings.headerDelimiter) + (cell.formattedText));
            tCell.setAttribute('index', cell.rowIndex ? cell.rowIndex.toString() : '0');
            var pivotValue = this.parent.pivotValues[cell.rowIndex] &&
                this.parent.pivotValues[cell.rowIndex][colIndex] ?
                this.parent.pivotValues[cell.rowIndex][colIndex] : null;
            var dataColIndex = this.parent.isTabular ? this.parent.engineModule.rowMaxLevel : 0;
            if (colIndex <= dataColIndex) {
                if (this.parent.dataType === 'pivot') {
                    var isValueCell = cell.type && cell.type === 'value';
                    tCell.innerText = '';
                    var levelName = cell.valueSort ? cell.valueSort.levelName.toString() : '';
                    var memberPos = cell.actualText ?
                        cell.actualText.toString().split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length : 0;
                    var levelPosition = levelName.split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length -
                        (memberPos ? memberPos - 1 : memberPos);
                    var level = levelPosition ? (levelPosition - 1) : 0;
                    if (this.parent.dataSourceSettings.subTotalsPosition === 'Bottom' && !isNullOrUndefined(levelName)) {
                        var cellLevelName = !cell.isSum ? levelName : cell.type === 'value' ?
                            levelName.split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter + (this.parent.engineModule.valueAxisFields[cell.actualText].caption ?
                                this.parent.engineModule.valueAxisFields[cell.actualText].caption :
                                this.parent.engineModule.valueAxisFields[cell.actualText].name))[0] : '';
                        if (cell.isSum && (cell.type === 'value' ? this.drilledLevelInfo[cellLevelName] : true)) {
                            level = level - 1;
                        }
                        else if (!cell.isSum) {
                            if (cellLevelName.split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length === 1) {
                                this.drilledLevelInfo = {};
                            }
                            if (cell.members && cell.members.length > 0) {
                                this.drilledLevelInfo[cellLevelName] = cell.isDrilled;
                            }
                        }
                    }
                    if (!this.parent.isTabular) {
                        do {
                            if (level > 0) {
                                rowOuterDiv.appendChild(createElement('span', {
                                    className: level === 0 ? '' : cls.NEXTSPAN
                                }));
                            }
                            level--;
                        } while (level > -1);
                        level = levelPosition ? (levelPosition - 1) : 0;
                        this.lastSpan = levelPosition ? this.lastSpan : 0;
                        if (!cell.hasChild && (!isValueCell ? level : 0) > 0) {
                            rowOuterDiv.appendChild(createElement('span', {
                                className: cls.LASTSPAN
                            }));
                        }
                    }
                    var fieldName = void 0;
                    if ((this.parent.dataSourceSettings.rows.length > 0 &&
                        (cell.valueSort ? Object.keys(cell.valueSort).length > 0 : true))) {
                        if (isValueCell) {
                            for (var _i = 0, _a = this.parent.dataSourceSettings.values; _i < _a.length; _i++) {
                                var field = _a[_i];
                                var name_1 = field.caption ? field.caption : field.name;
                                if (levelName.indexOf(name_1) > -1) {
                                    fieldName = field.name;
                                    break;
                                }
                            }
                        }
                        else {
                            fieldName = cell.level > -1 && this.parent.dataSourceSettings.rows[cell.level] ?
                                this.parent.dataSourceSettings.rows[cell.level].name : '';
                        }
                        tCell.setAttribute('fieldname', fieldName);
                    }
                }
                else {
                    rowOuterDiv = this.onOlapRowCellBoundEvent(tCell, rowOuterDiv, cell);
                }
                var localizedText = cell.formattedText;
                if (cell.type) {
                    if (cell.type === 'grand sum') {
                        this.rowGrandPos = cell.rowIndex;
                        tCell.classList.add('e-gtot');
                        var values = this.parent.dataSourceSettings.values;
                        localizedText = isNullOrUndefined(cell.valueSort.axis) ? (this.parent.dataSourceSettings.rows.length === 0 && values.length === 1 && this.parent.dataSourceSettings.valueAxis === 'row') ?
                            this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(values[values.length - 1].type) + ' ' +
                                this.parent.localeObj.getConstant('of') + ' ' + (!isNullOrUndefined(values[values.length - 1].caption) ? values[values.length - 1].caption : values[values.length - 1].name) :
                            this.parent.localeObj.getConstant('grandTotal') : cell.formattedText;
                    }
                    else if (cell.valueSort.levelName === (this.parent.localeObj.getConstant('grandTotal') +
                        (this.parent.dataSourceSettings.valueSortSettings.headerDelimiter) + (cell.formattedText))) {
                        tCell.classList.add('e-gtot');
                        localizedText = isRowFieldsAvail ? this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(this.parent.engineModule.fieldList[cell.actualText].aggregateType) + ' '
                            + this.parent.localeObj.getConstant('of') + ' ' + cell.formattedText : localizedText;
                    }
                    else if (cell.type === 'sum' && cell.memberType !== 3) {
                        localizedText = cell.formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total');
                    }
                    else {
                        tCell.classList.add('e-stot');
                    }
                }
                if (this.parent.isTabular) {
                    this.setSpanAttributes('rowspan', cell.rowSpan, tCell);
                    this.setSpanAttributes('colspan', cell.colSpan, tCell);
                }
                else {
                    tCell.classList.add(cls.ROWSHEADER);
                }
                if (cell.hasChild === true && !cell.isNamedSet) {
                    rowOuterDiv.appendChild(createElement('div', {
                        className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,
                        attrs: {
                            'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :
                                this.parent.localeObj.getConstant('expand')
                        }
                    }));
                }
                rowOuterDiv.appendChild(createElement('span', {
                    className: cls.CELLVALUE,
                    innerHTML: (this.parent.isRowCellHyperlink || cell.enableHyperlink ? '<a  data-url="' + localizedText + '" class="e-hyperlinkcell ' + customClass + '">' + localizedText + '</a>' : localizedText)
                }));
                var vSort = this.parent.pivotView.dataSourceSettings.valueSortSettings;
                if (this.parent.enableValueSorting) {
                    var headerText = vSort && this.parent.dataType === 'pivot' &&
                        this.parent.dataSourceSettings.mode !== 'Server' ? vSort.rowHeaderText : vSort.headerText;
                    var rowOrder = vSort && this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.mode !== 'Server'
                        ? vSort.rowSortOrder : vSort.sortOrder;
                    var rowIndex = Number(tCell.getAttribute('index'));
                    var colIndex_1 = Number(tCell.getAttribute('aria-colindex'));
                    var cell_1 = this.parent.pivotValues && this.parent.pivotValues[Number(tCell.getAttribute('index'))] ?
                        this.parent.pivotValues[Number(tCell.getAttribute('index'))][colIndex_1 - 1] : undefined;
                    if (this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.mode !== 'Server'
                        && this.parent.dataSourceSettings.valueAxis === 'row' && this.parent.dataSourceSettings.valueIndex === -1 &&
                        !this.parent.isTabular && cell_1.valueSort.levelName === headerText && cell_1.type !== 'value') {
                        if (this.parent.dataSourceSettings.subTotalsPosition !== 'Bottom') {
                            if (this.parent.pivotValues[rowIndex + 1] && this.parent.pivotValues[rowIndex + 1][colIndex_1 - 1].type === 'value') {
                                rowIndex = cell_1.type === 'value' || cell_1.memberType === 3 ? rowIndex : (rowIndex + 1);
                                this.modifiedHeaderText =
                                    this.parent.pivotValues[rowIndex][colIndex_1 - 1].valueSort.levelName;
                            }
                        }
                        else if (this.parent.dataSourceSettings.subTotalsPosition === 'Bottom' &&
                            this.parent.dataSourceSettings.values.length > 0) {
                            if (isNullOrUndefined(vSort.measure)) {
                                this.modifiedHeaderText =
                                    headerText + vSort.headerDelimiter + this.parent.dataSourceSettings.values[0].name;
                            }
                            else if (!isNullOrUndefined(vSort.measure)) {
                                this.modifiedHeaderText = headerText + vSort.headerDelimiter + vSort.measure;
                            }
                        }
                    }
                    headerText = this.parent.dataSourceSettings.valueAxis === 'row' &&
                        this.modifiedHeaderText ? this.modifiedHeaderText : headerText;
                    var isValidHeader = this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.subTotalsPosition
                        === 'Bottom' && this.parent.dataSourceSettings.rows.length > 1 && cell_1.hasChild ? false : true;
                    if (vSort && headerText && cell_1 && cell_1.valueSort && cell_1.valueSort.levelName) {
                        if ((!this.parent.isTabular && cell_1.valueSort.levelName === headerText && isValidHeader) ||
                            (this.parent.isTabular && cell_1.valueSort.levelName === headerText && cell_1.rowSpan === 1)) {
                            rowOuterDiv.appendChild(createElement('span', {
                                className: (rowOrder === 'Descending' ?
                                    'e-icon-descending e-icons e-descending e-sortfilterdiv e-value-sort-icon' :
                                    'e-icon-ascending e-icons e-ascending e-sortfilterdiv e-value-sort-icon') + (cell_1.hasChild ? ' e-value-sort-align' : ''),
                                styles: rowOuterDiv.style.textAlign === 'right' ? 'float: left' : ''
                            }));
                            this.modifiedHeaderText = undefined;
                        }
                    }
                }
                tCell.appendChild(rowOuterDiv);
            }
            else {
                var innerText = tCell.innerText;
                tCell.innerText = '';
                tCell.classList.add(cls.VALUESCONTENT);
                cell = args.data[colIndex];
                cell = isNullOrUndefined(cell) ? args.column.customAttributes.cell : cell;
                cell.isGrandSum = isRowFieldsAvail ? true : cell.isGrandSum;
                if (cell.isSum) {
                    tCell.classList.add(cls.SUMMARY);
                }
                var isGrandSum = (isNullOrUndefined(cell.isGrandSum) && (!isNullOrUndefined(this.parent.olapEngineModule) && this.parent.olapEngineModule.olapValueAxis === 'column') && this.parent.dataType === 'olap' &&
                    ((this.colGrandPos - this.parent.dataSourceSettings.values.length) < colIndex));
                if (cell.isGrandSum || (isGrandSum || this.colGrandPos === colIndex) || this.rowGrandPos === Number(tCell.getAttribute('index'))) {
                    tCell.classList.add('e-gtot');
                }
                else if (this.parent.dataType === 'olap' ? cell.isSum : this.validateColumnTotalcell(cell.colIndex)) {
                    tCell.classList.add('e-colstot');
                }
                if (pivotValue && pivotValue.cssClass) {
                    tCell.classList.add(pivotValue.cssClass);
                }
                tCell.appendChild(createElement('span', {
                    className: cls.CELLVALUE,
                    innerHTML: ((tCell.className.indexOf('e-summary') !== -1 && this.parent.isSummaryCellHyperlink) ||
                        (tCell.className.indexOf('e-summary') === -1 && this.parent.isValueCellHyperlink && pivotValue) || cell.enableHyperlink ?
                        '<a data-url="' + innerText + '" class="e-hyperlinkcell ' + customClass + '">' + innerText + '</a>' : innerText)
                }));
                if (this.parent.gridSettings.allowReordering) {
                    tCell.setAttribute('aria-colindex', args.column.customAttributes ?
                        (args.column.customAttributes.cell.colIndex + 1).toString() : args.column.index.toString());
                }
            }
            if (this.parent.cellTemplate) {
                this.appendTemplate(tCell, pivotValue);
            }
            this.unWireEvents(tCell);
            this.wireEvents(tCell);
        }
        args.pivotview = this.parent;
        this.parent.trigger(events.queryCellInfo, args);
    };
    Render.prototype.appendTemplate = function (tCell, pivotValue) {
        var element = this.parent.getCellTemplate()({ targetCell: tCell, cellInfo: pivotValue }, this.parent, 'cellTemplate', this.parent.element.id +
            '_cellTemplate', null, null, tCell);
        if (element && element !== '' && element.length > 0) {
            if (this.parent.enableHtmlSanitizer) {
                if (this.parent.isVue || this.parent.isVue3) {
                    var container = createElement('div');
                    container.innerHTML = SanitizeHtmlHelper.sanitize(element);
                    append([container.firstChild], tCell);
                }
                else {
                    this.parent.appendHtml(tCell, SanitizeHtmlHelper.sanitize(element[0].outerHTML));
                }
            }
            else {
                if (this.parent.isVue || this.parent.isVue3) {
                    append(element, tCell);
                }
                else {
                    this.parent.appendHtml(tCell, element[0].outerHTML);
                }
            }
        }
    };
    Render.prototype.onOlapRowCellBoundEvent = function (tCell, rowOuterDiv, cell) {
        tCell.innerText = '';
        var rowMeasurePos = this.engine.rowMeasurePos;
        if (this.parent.enableVirtualization) {
            if (cell.ordinal > -1 && this.parent.olapEngineModule.tupRowInfo.length > 0) {
                var tupInfo = this.parent.olapEngineModule.tupRowInfo[cell.ordinal];
                var cellActualText = cell.memberType === 3 ?
                    this.engine.fieldList[cell.actualText.toString()].tag.toString() :
                    cell.actualText.toString();
                var memberPosition = tupInfo.uNameCollection.indexOf(cellActualText);
                var cropUName = tupInfo.uNameCollection.substring(0, memberPosition) +
                    (cell.memberType === 3 ? '' : cell.actualText.toString());
                var fieldSep = cropUName.split('::[').map(function (item) {
                    return item[0] === '[' ? item : ('[' + item);
                });
                if (cell.memberType === 3 && rowMeasurePos) {
                    fieldSep.push(cell.actualText.toString());
                }
                var nxtIndextCount = -1;
                var lastIndextCount = 0;
                var prevHasChild = false;
                for (var fPos = 0; fPos < fieldSep.length; fPos++) {
                    var fieldMembers = fieldSep[fPos];
                    var membersCount = fieldMembers.split('~~').length;
                    nxtIndextCount += membersCount;
                    var hasChild = tupInfo.typeCollection[fPos] !== '2' ? (this.engine.fieldList[tupInfo.members[fPos].getAttribute('Hierarchy')] && this.engine.fieldList[tupInfo.members[fPos].getAttribute('Hierarchy')].isHierarchy && fPos < this.parent.dataSourceSettings.rows.length - 1 && !this.parent.dataSourceSettings.rows[fPos + 1].isNamedSet && this.parent.dataSourceSettings.rows[fPos + 1].name.indexOf('[Measures]') < 0 && this.engine.fieldList[this.parent.dataSourceSettings.rows[fPos + 1].name] && this.engine.fieldList[this.parent.dataSourceSettings.rows[fPos + 1].name].hasAllMember) ? true : Number(tupInfo.members[fPos].querySelector('CHILDREN_CARDINALITY').textContent) > 0 : false;
                    lastIndextCount += (fPos > 0 && prevHasChild && !hasChild) ? 1 : 0;
                    prevHasChild = hasChild;
                }
                var indent = 0;
                for (var iPos = 0; iPos < nxtIndextCount; iPos++) {
                    rowOuterDiv.appendChild(createElement('span', {
                        className: cls.NEXTSPAN
                    }));
                    indent++;
                }
                for (var iPos = 0; iPos < lastIndextCount && nxtIndextCount > 0; iPos++) {
                    rowOuterDiv.appendChild(createElement('span', {
                        className: cls.LASTSPAN
                    }));
                }
                this.indentCollection[cell.rowIndex] = indent;
                this.maxIndent = this.maxIndent > indent ? this.maxIndent : indent;
            }
        }
        else {
            var hierarchyName = cell.hierarchy;
            var actualLevelName = cell.valueSort ? cell.valueSort.levelName.toString() : '';
            var levelPosition = cell.level === -1 ? this.measurePos :
                actualLevelName.split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length - 1;
            var levelName = cell.memberType === 3 ? (levelPosition + '.' + cell.levelUniqueName) : cell.levelUniqueName;
            var hasChild = cell.hasChild;
            var isSubTotalCell = false;
            if (cell.isSum && cell.memberType === 3) {
                var currPos_1 = this.lvlCollection[cell.parentUniqueName].position;
                for (var i = currPos_1 + 1; i < this.position; i++) {
                    delete this.lvlCollection[this.lvlPosCollection[i]];
                    delete this.lvlPosCollection[i];
                }
                this.position = this.position > (currPos_1 + 1) ? (currPos_1 + 1) : this.position;
                isSubTotalCell = true;
                this.measurePos = this.lvlCollection[cell.parentUniqueName].position;
            }
            if (!this.lvlCollection[levelName] && levelName) {
                this.lvlPosCollection[this.position] = levelName;
                this.lvlCollection[levelName] = { position: this.position, hasChild: hasChild };
                this.position++;
            }
            else if (levelName) {
                var currPos_2 = this.lvlCollection[levelName].position;
                for (var pos = currPos_2 + 1; pos < this.position; pos++) {
                    delete this.lvlCollection[this.lvlPosCollection[pos]];
                    delete this.lvlPosCollection[pos];
                }
                this.position = this.position > (currPos_2 + 1) ? (currPos_2 + 1) : this.position;
            }
            if (!this.hierarchyCollection[hierarchyName] && hierarchyName) {
                this.hierarchyPosCollection[this.hierarchyCount] = hierarchyName;
                this.hierarchyCollection[hierarchyName] = {
                    lvlPosition: this.position - 1,
                    hierarchyPOs: this.hierarchyCount
                };
                this.hierarchyCount++;
            }
            else if (hierarchyName) {
                var currPos_3 = this.hierarchyCollection[hierarchyName].hierarchyPOs;
                for (var pos = currPos_3 + 1; pos < this.hierarchyCount; pos++) {
                    delete this.hierarchyCollection[this.hierarchyPosCollection[pos]];
                    delete this.hierarchyPosCollection[pos];
                }
                this.hierarchyCount = this.hierarchyCount > (currPos_3 + 1) ? (currPos_3 + 1) : this.hierarchyCount;
            }
            if (cell.memberType !== 3 && levelName && this.lvlCollection[levelName]) {
                var currHierarchyPos = this.hierarchyCollection[hierarchyName] ?
                    this.hierarchyCollection[hierarchyName].hierarchyPOs : -1;
                this.measurePos = rowMeasurePos <= currHierarchyPos && this.hierarchyPosCollection[rowMeasurePos + 1] ?
                    this.measurePos : this.lvlCollection[levelName].position;
            }
            var currPos = this.lvlCollection[levelName] ? this.lvlCollection[levelName].position : -1;
            currPos = isSubTotalCell ? currPos - 1 : currPos;
            var lvlPos = 0;
            var indent = 0;
            while (lvlPos <= currPos && currPos > 0 && cell.level > -1) {
                var hasChild_1 = this.lvlCollection[this.lvlPosCollection[lvlPos]].hasChild;
                var prevHasChild = lvlPos > 0 ? this.lvlCollection[this.lvlPosCollection[lvlPos - 1]].hasChild : false;
                if (prevHasChild && !hasChild_1) {
                    rowOuterDiv.appendChild(createElement('span', {
                        className: cls.LASTSPAN
                    }));
                }
                if (lvlPos !== currPos) {
                    rowOuterDiv.appendChild(createElement('span', {
                        className: cls.NEXTSPAN
                    }));
                    indent++;
                }
                lvlPos++;
            }
            if (this.parent.dataSourceSettings.grandTotalsPosition === 'Top' && (!isNullOrUndefined(this.parent.olapEngineModule) && this.parent.olapEngineModule.olapValueAxis === 'row') && this.parent.dataType === 'olap' &&
                (cell.valueSort.levelName.toString()).indexOf(this.parent.localeObj.getConstant('grandTotal') + this.parent.dataSourceSettings.valueSortSettings.headerDelimiter) === 0) {
                rowOuterDiv.appendChild(createElement('span', {
                    className: cls.NEXTSPAN
                }));
            }
            if (cell.memberType === 3 && cell.level === -1 && Object.keys(this.lvlCollection).length > 1) {
                rowOuterDiv.appendChild(createElement('span', {
                    className: cls.NEXTSPAN
                }));
                indent++;
            }
            this.indentCollection[cell.rowIndex] = indent;
            this.maxIndent = this.maxIndent > indent ? this.maxIndent : indent;
        }
        rowOuterDiv.setAttribute('fieldname', cell.hierarchy);
        tCell.setAttribute('fieldname', cell.hierarchy);
        var grandTotal = (this.parent.olapEngineModule.tupRowInfo[cell.ordinal] ?
            (this.parent.olapEngineModule.tupRowInfo[cell.ordinal].measurePosition === 0 ?
                this.parent.olapEngineModule.tupRowInfo[cell.ordinal].allStartPos === 1 :
                this.parent.olapEngineModule.tupRowInfo[cell.ordinal].allStartPos === 0) : false);
        if (grandTotal) {
            tCell.classList.add('e-gtot');
        }
        return rowOuterDiv;
    };
    Render.prototype.columnCellBoundEvent = function (args) {
        if (args.cell.column && args.cell.column.customAttributes) {
            var cell = args.cell.column.customAttributes.cell;
            var tCell = args.node;
            if (cell) {
                var customClass = this.parent.hyperlinkSettings.cssClass;
                var isValueCell = false;
                for (var _i = 0, _a = this.parent.dataSourceSettings.values; _i < _a.length; _i++) {
                    var field = _a[_i];
                    if (field.name === cell.actualText) {
                        isValueCell = true;
                        tCell.setAttribute('fieldname', field.name);
                    }
                }
                if ((cell.level === -1 && !cell.rowSpan) || cell.rowSpan === -1) {
                    args.node.style.display = 'none';
                }
                else if (cell.rowSpan > 1) {
                    args.node.setAttribute('rowspan', cell.rowSpan.toString());
                    args.node.setAttribute('aria-rowspan', cell.rowSpan.toString());
                    if ((cell.rowIndex + cell.rowSpan) === this.engine.headerContent.length) {
                        args.node.style.borderBottomWidth = '0px';
                    }
                }
                args.node.setAttribute('aria-colindex', (cell.colIndex + 1).toString());
                args.node.setAttribute('index', cell.rowIndex.toString());
                var fieldName = void 0;
                if (this.parent.dataType === 'pivot') {
                    if (!isValueCell && !(this.parent.dataSourceSettings.values && this.parent.dataSourceSettings.valueAxis === 'column' &&
                        this.parent.dataSourceSettings.values.length > 1 &&
                        (isValueCell && cell.rowIndex === this.engine.headerContent.length - 1)) && this.parent.dataSourceSettings.columns
                        && this.parent.dataSourceSettings.columns.length > 0) {
                        fieldName = cell.level > -1 && this.parent.dataSourceSettings.columns[cell.level] ?
                            this.parent.dataSourceSettings.columns[cell.level].name : '';
                        tCell.setAttribute('fieldname', fieldName);
                    }
                    if (this.validateColumnTotalcell(cell.colIndex)) {
                        tCell.classList.add('e-colstot');
                    }
                }
                else {
                    tCell = this.onOlapColumnCellBoundEvent(tCell, cell);
                }
                var isColumnFieldsAvail = (this.parent.dataSourceSettings.columns.length === 0 && this.parent.dataSourceSettings.valueAxis === 'column' && cell.valueSort &&
                    cell.valueSort.levelName === (this.parent.localeObj.getConstant('grandTotal') + (this.parent.dataSourceSettings.valueSortSettings.headerDelimiter) + (cell.formattedText)));
                if (cell.type || isColumnFieldsAvail) {
                    tCell.classList.add(cell.type === 'grand sum' ? 'e-gtot' : 'e-stot');
                    if (cell.type === 'grand sum') {
                        this.colGrandPos = cell.colIndex;
                    }
                    else if (cell.type) {
                        tCell.classList.add('e-colstot');
                    }
                    var engine = this.parent.dataType === 'olap' ? this.parent.olapEngineModule : this.parent.engineModule;
                    var localizedText = cell.type === 'grand sum' ? (isNullOrUndefined(cell.valueSort.axis) || this.parent.dataType === 'olap' ? this.parent.localeObj.getConstant('grandTotal') :
                        cell.formattedText) : cell.formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total');
                    localizedText = isColumnFieldsAvail && engine.fieldList ? this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(engine.fieldList[cell.actualText].aggregateType)
                        + ' ' + this.parent.localeObj.getConstant('of') + ' ' + cell.formattedText : localizedText;
                    if (tCell.querySelector('.e-headertext') !== null) {
                        tCell.querySelector('.e-headertext').innerText = localizedText;
                    }
                    else {
                        tCell.querySelector('.e-stackedheadercelldiv').innerText = localizedText;
                    }
                }
                tCell.classList.add(cls.COLUMNSHEADER);
                if (this.parent.isColumnCellHyperlink || cell.enableHyperlink) {
                    if (tCell.querySelector('.e-stackedheadercelldiv')) {
                        var innerText = tCell.querySelector('.e-stackedheadercelldiv').innerText;
                        tCell.querySelector('.e-stackedheadercelldiv').innerHTML =
                            '<a data-url="' + innerText + '" class="e-hyperlinkcell ' + customClass + '">' + innerText + '</a>';
                    }
                    else if (tCell.querySelector('.e-headertext')) {
                        var innerText = tCell.querySelector('.e-headertext').innerText;
                        tCell.querySelector('.e-headertext').innerHTML =
                            '<a data-url="' + innerText + '" class="e-hyperlinkcell ' + customClass + '">' + innerText + '</a>';
                    }
                }
                if (cell.hasChild === true && !cell.isNamedSet) {
                    var hdrdiv = tCell.querySelector('.e-headercelldiv');
                    if (hdrdiv) {
                        hdrdiv.style.height = 'auto';
                        hdrdiv.style.lineHeight = 'normal';
                    }
                    var div = createElement('div', {
                        className: (cell.isDrilled === true ? cls.COLLAPSE : cls.EXPAND) + ' ' + cls.ICON,
                        attrs: {
                            'title': cell.isDrilled === true ? this.parent.localeObj.getConstant('collapse') :
                                this.parent.localeObj.getConstant('expand')
                        }
                    });
                    if (window.navigator.userAgent.indexOf('Edge') > -1 || window.navigator.userAgent.indexOf('Trident') > -1) {
                        tCell.children[0].style.display = 'table';
                    }
                    else {
                        tCell.children[0].style.display = 'block';
                    }
                    this.updateWrapper(tCell, div);
                }
                else {
                    this.updateWrapper(tCell);
                }
                tCell = this.appendValueSortIcon(cell, tCell, cell.rowIndex, cell.colIndex, args.cell.column);
                if (this.parent.cellTemplate) {
                    this.appendTemplate(tCell, cell);
                }
                var len = this.parent.dataSourceSettings.values.length;
                for (var vCnt = 0; vCnt < len; vCnt++) {
                    if (this.parent.dataSourceSettings.values[vCnt].name === cell.actualText) {
                        if (this.parent.dataType === 'olap') {
                            var grandTotal = (this.parent.olapEngineModule.tupColumnInfo[cell.ordinal] ?
                                (this.parent.olapEngineModule.tupColumnInfo[cell.ordinal].measurePosition === 0 ?
                                    this.parent.olapEngineModule.tupColumnInfo[cell.ordinal].allStartPos === 1 :
                                    this.parent.olapEngineModule.tupColumnInfo[cell.ordinal].allStartPos === 0) : false);
                            if (grandTotal) {
                                tCell.classList.add('e-gtot');
                            }
                        }
                        if (cell.valueSort.levelName === (this.parent.localeObj.getConstant('grandTotal') + (this.parent.dataSourceSettings.valueSortSettings.headerDelimiter) + (cell.formattedText))
                            || cell.valueSort.levelName === ('Grand Total' + (this.parent.dataSourceSettings.valueSortSettings.headerDelimiter) + (cell.formattedText))) {
                            tCell.classList.add('e-gtot');
                        }
                        else {
                            tCell.classList.add(cls.VALUESHEADER);
                        }
                    }
                }
                this.unWireEvents(tCell);
                this.wireEvents(tCell);
            }
        }
        else {
            if (this.parent.isTabular) {
                var colIndex = args.cell && args.cell.column && args.cell.column.index;
                var colSpan = this.parent.engineModule.rowMaxLevel + 1;
                if (colIndex === 0) {
                    args.node.setAttribute('colspan', colSpan.toString());
                    args.node.classList.add(cls.FREEZE_LEFT_BORDER);
                }
                else if (this.parent.engineModule.rowMaxLevel >= colIndex) {
                    args.node.style.display = 'none';
                }
            }
        }
        this.parent.trigger(events.headerCellInfo, args);
    };
    Render.prototype.updateWrapper = function (tCell, div) {
        if (tCell.querySelectorAll('.e-headercelldiv').length > 0 || tCell.querySelectorAll('.e-stackedheadercelldiv').length > 0) {
            var outerDiv = createElement('div', {
                className: cls.PIVOT_CELL_CONTAINER
            });
            var innerDiv = createElement('div', {
                className: (div ? 'e-stackedheadertext' : 'e-headertext') + ' ' + cls.CELLVALUE,
                innerHTML: tCell.querySelectorAll('.e-headercelldiv').length > 0 ? tCell.querySelector('.e-headercelldiv').innerHTML : tCell.querySelector('.e-stackedheadercelldiv').innerHTML
            });
            if (div) {
                outerDiv.append(div);
            }
            outerDiv.append(innerDiv);
            tCell.children[0].innerHTML = '';
            tCell.children[0].append(outerDiv);
        }
        return tCell;
    };
    Render.prototype.onOlapColumnCellBoundEvent = function (tCell, cell) {
        tCell.setAttribute('fieldname', cell.memberType === 3 ? cell.actualText.toString() : cell.hierarchy);
        var prevCell = this.engine.headerContent[cell.rowIndex] ?
            this.engine.headerContent[cell.rowIndex][cell.colIndex - 1] : undefined;
        if (prevCell && prevCell.actualText === cell.actualText && prevCell.type === cell.type &&
            (prevCell.colSpan > 1)) {
            tCell.style.display = 'none';
        }
        else {
            // tCell.setAttribute('colspan', cell.colSpan.toString());
            // tCell.setAttribute('aria-colspan', cell.colSpan.toString());
        }
        if (cell.rowIndex === (this.engine.headerContent.length - 1) && cell.memberType === 2) {
            tCell.style.display = this.isSpannedCell(this.engine.headerContent.length, cell) ? 'none' : tCell.style.display;
        }
        return tCell;
    };
    Render.prototype.isSpannedCell = function (colLength, currCell) {
        var prevCell = this.engine.headerContent[currCell.rowIndex - 1] ?
            this.engine.headerContent[currCell.rowIndex - 1][currCell.colIndex] : undefined;
        var parentCellSpan;
        var parentCellPos;
        while (prevCell && ((prevCell.memberType === currCell.memberType) || (prevCell.type && currCell.type))) {
            if (prevCell.rowSpan > 0) {
                parentCellSpan = prevCell.rowSpan;
                parentCellPos = prevCell.rowIndex;
            }
            prevCell = this.engine.headerContent[prevCell.rowIndex - 1] ?
                this.engine.headerContent[prevCell.rowIndex - 1][currCell.colIndex] : undefined;
        }
        return (parentCellPos + parentCellSpan) >= colLength;
    };
    Render.prototype.onHyperCellClick = function (e) {
        var cell = e.target.closest('td.e-rowcell') ? e.target.closest('td.e-rowcell') : e.target.closest('th');
        var args = {
            currentCell: cell,
            data: this.engine.pivotValues[Number(cell.getAttribute('index'))][parseInt(cell.getAttribute('aria-colindex'), 10) - 1],
            cancel: true,
            nativeEvent: e
        };
        this.parent.trigger(events.hyperlinkCellClick, args, function (observedArgs) {
            if (!observedArgs.cancel) {
                args.currentCell = getElement(args.currentCell);
                var url = args.currentCell.getAttribute('data-url') ? (args.currentCell).getAttribute('data-url') :
                    args.currentCell.querySelector('a').getAttribute('data-url');
                window.open(url);
            }
        });
    };
    Render.prototype.getRowStartPos = function () {
        var pivotValues = this.parent.pivotValues;
        var rowPos;
        for (var rCnt = 0; rCnt < (pivotValues ? pivotValues.length : 0); rCnt++) {
            if (pivotValues[rCnt] && pivotValues[rCnt][0] && pivotValues[rCnt][0].axis === 'row') {
                rowPos = rCnt;
                break;
            }
        }
        return rowPos;
    };
    Render.prototype.frameDataSource = function (type) {
        var dataContent = [];
        if (((this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.dataSource && this.parent.engineModule.data.length > 0) || (this.parent.dataType === 'olap' && this.parent.dataSourceSettings.url !== '') ||
            (this.parent.dataSourceSettings.mode === 'Server' && this.parent.dataSourceSettings.url !== '' && this.engine.pivotValues.length > 0)) && this.parent.dataSourceSettings.values.length > 0 && !this.engine.isEmptyData) {
            if ((this.parent.enableValueSorting) || !this.engine.isEngineUpdated || (this.gridSettings.layout === 'Tabular')) {
                var rowCnt = 0;
                var pivotValues = this.parent.pivotValues;
                var start = type === 'value' ? this.rowStartPos : 0;
                var end = type === 'value' ? (pivotValues ? pivotValues.length : 0) : this.rowStartPos;
                for (var rCnt = start; rCnt < end; rCnt++) {
                    if (pivotValues[rCnt]) {
                        rowCnt = type === 'header' ? rCnt : rowCnt;
                        dataContent[rowCnt] = {};
                        for (var cCnt = 0; cCnt < pivotValues[rCnt].length; cCnt++) {
                            if (pivotValues[rCnt][cCnt]) {
                                dataContent[rowCnt][cCnt] = pivotValues[rCnt][cCnt];
                            }
                        }
                        rowCnt++;
                    }
                }
            }
            else {
                dataContent = type === 'value' ? this.engine.valueContent : this.engine.headerContent;
            }
        }
        else {
            dataContent = this.frameEmptyData();
        }
        return dataContent;
    };
    /** @hidden */
    Render.prototype.frameEmptyData = function () {
        var dataContent = [{
                0: { formattedText: this.parent.localeObj.getConstant('grandTotal') },
                1: { formattedText: this.parent.localeObj.getConstant('emptyData') }
            }];
        return dataContent;
    };
    /** @hidden */
    Render.prototype.calculateColWidth = function (colCount) {
        if (!isNullOrUndefined(this.parent.resizedValue)) {
            this.parent.resizedValue = (this.parent.showGroupingBar && this.parent.resizedValue < 250) ? 250 : this.parent.resizedValue;
        }
        this.resColWidth = !isNullOrUndefined(this.parent.resizedValue) ? this.parent.resizedValue : this.resColWidth;
        var offsetWidth = this.calculateGridWidth();
        var eleWidth = this.parent.element.getBoundingClientRect().width ?
            this.parent.element.getBoundingClientRect().width : this.parent.element.offsetWidth;
        var parWidth = isNaN(this.parent.width) ? (this.parent.width.toString().indexOf('%') > -1 ?
            ((parseFloat(this.parent.width.toString()) / 100) * eleWidth) : offsetWidth) :
            Number(this.parent.width);
        parWidth = parWidth - (this.gridSettings.columnWidth > this.resColWidth ? this.gridSettings.columnWidth : this.parent.isTabular ?
            (this.parent.engineModule.rowMaxLevel + 1) * this.resColWidth : this.resColWidth);
        colCount = this.parent.isTabular ? colCount - (this.parent.engineModule.rowMaxLevel + 1) : colCount - 1;
        this.isOverflows = !((colCount * this.gridSettings.columnWidth) < parWidth);
        if (!this.isOverflows) {
            var gridHeight = this.calculateGridHeight();
            var parentHeight = gridHeight === 'auto' ? this.parent.getHeightAsNumber() : gridHeight;
            var headersLength = (this.engine && this.engine.headerContent) ? Object.keys(this.engine.headerContent).length : 1;
            var height = parentHeight - (this.gridSettings.rowHeight * headersLength);
            if (this.engine && this.engine.valueContent && ((this.gridSettings.rowHeight * this.engine.valueContent.length) > height)) {
                parWidth = parWidth - getScrollBarWidth();
            }
        }
        var colWidth = (colCount * this.gridSettings.columnWidth) < parWidth ? (parWidth / colCount) : this.gridSettings.columnWidth;
        return (!this.isOverflows && !this.gridSettings.allowAutoResizing) ? this.gridSettings.columnWidth : colWidth;
    };
    /** @hidden */
    Render.prototype.resizeColWidth = function (colCount) {
        if (!isNullOrUndefined(this.parent.resizedValue)) {
            this.parent.resizedValue = (this.parent.showGroupingBar && this.parent.resizedValue < 250) ? 250 : this.parent.resizedValue;
        }
        this.resColWidth = !isNullOrUndefined(this.parent.resizedValue) ? this.parent.resizedValue : this.resColWidth;
        var parWidth = isNaN(this.parent.width) ? (this.parent.width.toString().indexOf('%') > -1 ?
            ((parseFloat(this.parent.width.toString()) / 100) * this.parent.element.offsetWidth) : this.parent.element.offsetWidth) :
            Number(this.parent.width);
        colCount = colCount - 1;
        parWidth = parWidth - (this.gridSettings.columnWidth > this.resColWidth ? this.gridSettings.columnWidth : this.resColWidth);
        this.isOverflows = !((colCount * this.gridSettings.columnWidth) < parWidth);
        var colWidth = (colCount * this.gridSettings.columnWidth) < parWidth ? (parWidth / colCount) : this.gridSettings.columnWidth;
        return (!this.isOverflows && !this.gridSettings.allowAutoResizing) ? this.gridSettings.columnWidth : colWidth;
    };
    /** @hidden */
    Render.prototype.calculateGridWidth = function () {
        var parWidth = this.parent.width;
        var eleWidth = this.parent.element.getBoundingClientRect().width ?
            this.parent.element.getBoundingClientRect().width : this.parent.element.offsetWidth;
        if (eleWidth === 0) {
            eleWidth = this.parent.element.parentElement.getBoundingClientRect().width ?
                this.parent.element.parentElement.getBoundingClientRect().width : this.parent.element.parentElement.offsetWidth;
        }
        if (this.gridSettings.width === 'auto') {
            if (this.parent.width === 'auto') {
                parWidth = eleWidth;
            }
            else if (this.parent.width.toString().indexOf('%') > -1) {
                parWidth = ((parseFloat(this.parent.width.toString()) / 100) * eleWidth);
            }
            else if (this.parent.width.toString().indexOf('px') > -1) {
                parWidth = this.parent.width.toString().split('px')[0];
            }
        }
        else {
            parWidth = this.gridSettings.width;
        }
        return (!this.gridSettings.allowAutoResizing && parWidth > this.parent.totColWidth) ? this.parent.totColWidth : parWidth;
    };
    /** @hidden */
    Render.prototype.calculateGridHeight = function (elementCreated) {
        var contentElement = this.parent.element.querySelector('.' + cls.GRID_CLASS + ' .' + cls.CONTENT_CLASS);
        var gridHeight = this.parent.height;
        var parHeight = this.parent.getHeightAsNumber();
        if (contentElement) {
            if (isNaN(parHeight)) {
                parHeight = parHeight > this.parent.minHeight ? parHeight : this.parent.minHeight;
            }
            else {
                parHeight = (contentElement.offsetWidth < contentElement.querySelector('.' + cls.TABLE).offsetWidth) ?
                    parHeight - getScrollBarWidth() : parHeight;
            }
            if ((this.parent.showToolbar && this.parent.currentView !== 'Chart') || (!this.parent.showToolbar && this.parent.displayOption.view !== 'Chart')) {
                if (this.gridSettings.height === 'auto' && parHeight && this.parent.element.querySelector('.' + cls.GRID_HEADER)) {
                    var rowColHeight = this.parent.element.querySelector('.' + cls.GRID_HEADER).offsetHeight;
                    var gBarHeight = rowColHeight + (this.parent.element.querySelector('.' + cls.GRID_GROUPING_BAR_CLASS) ?
                        this.parent.element.querySelector('.' + cls.GRID_GROUPING_BAR_CLASS).offsetHeight : 0);
                    var toolBarHeight = this.parent.element.querySelector('.' + cls.GRID_TOOLBAR) ? 42 : 0;
                    var pagerHeight = this.parent.element.querySelector('.' + cls.GRID_PAGER) ? this.parent.element.querySelector('.' + cls.GRID_PAGER).offsetHeight : 0;
                    gridHeight = parHeight - (gBarHeight + toolBarHeight + pagerHeight) - 1;
                    gridHeight = gridHeight < 40 ? 40 : gridHeight;
                    if (elementCreated) {
                        var tableHeight = contentElement.querySelector('.' + cls.TABLE).offsetHeight;
                        var contentHeight = contentElement.querySelector('.' + cls.TABLE).offsetHeight;
                        var tableWidth = contentElement.querySelector('.' + cls.TABLE).offsetWidth;
                        var contentWidth = contentElement.offsetWidth;
                        var horizontalOverflow = contentWidth <= tableWidth;
                        // if (horizontalOverflow && ((contentWidth + 2) < tableWidth) && !this.parent.enableVirtualization) {
                        //     contentElement.style.overflowX = 'scroll';
                        // } else {
                        //     contentElement.style.overflowX = 'hidden';
                        //     horizontalOverflow = false;
                        // }
                        //let verticalOverflow: boolean = contentHeight < tableHeight;
                        var commonOverflow = horizontalOverflow && ((gridHeight - tableHeight) < 15) ? true : false;
                        if (gridHeight >= tableHeight && (horizontalOverflow ? gridHeight >= contentHeight : true) &&
                            !commonOverflow) {
                            this.parent.grid.height = 'auto';
                        }
                        else {
                            this.parent.grid.height = gridHeight;
                            this.parent.grid.dataBind();
                        }
                        // this.parent.grid.widthService.refreshFrozenScrollbar();
                    }
                    else {
                        if (gridHeight > (this.engine.valueContent.length * this.gridSettings.rowHeight)) {
                            gridHeight = 'auto';
                        }
                    }
                }
                else {
                    gridHeight = this.gridSettings.height;
                }
            }
        }
        return gridHeight < this.parent.gridSettings.rowHeight ? this.parent.gridSettings.rowHeight : gridHeight;
    };
    /**
     * It used to frame stacked headers.
     *
     * @returns {ColumnModel[]} - Returns grid columns.
     * @hidden
     */
    Render.prototype.frameStackedHeaders = function () {
        var pivotColumns = this.parent.pivotColumns;
        var engine = this.parent.dataType === 'pivot' ? this.parent.engineModule : this.parent.olapEngineModule;
        var gridColumns = this.parent.grid['columnModel'];
        var autoFitApplied = false;
        var refreshColumn = this.parent.toolbarModule && this.parent.toolbarModule.isReportChange ? true : this.parent.actionObj ? ((this.parent.actionObj.actionName === 'Sort value' && engine.valueAxis === 1) ||
            (this.parent.actionObj.actionName === 'Sort field' && this.parent.actionObj.fieldInfo.axis === 'columns') ||
            (this.parent.pivotFieldListModule && this.parent.pivotFieldListModule.actionObj.actionName === 'Sort field' && this.parent.pivotFieldListModule.actionObj.fieldInfo.axis === 'columns')) : false;
        this.pivotColumns = [];
        if ((((this.parent.dataType === 'olap' && this.parent.dataSourceSettings.url !== '') ? true :
            (this.parent.dataSourceSettings.values.length > 0 && this.parent.dataSourceSettings.dataSource
                && this.parent.engineModule.data.length > 0)) || (this.parent.dataSourceSettings.mode === 'Server'
            && this.parent.dataSourceSettings.values.length > 0 && this.parent.dataSourceSettings.url !== '' &&
            this.engine.pivotValues.length > 0)) && !this.engine.isEmptyData) {
            var headerCnt = this.engine.headerContent.length;
            var headerSplit = [];
            var splitPos = [];
            var colWidth = this.calculateColWidth(this.engine.pivotValues && this.engine.pivotValues[0] ?
                this.engine.pivotValues[0].length : 0);
            var measureFlag = this.parent.dataType === 'olap' && !isNullOrUndefined(this.engine.colMeasurePos)
                && this.engine.colDepth - 1 === this.parent.olapEngineModule.colMeasurePos;
            do {
                var columnModel = [];
                var actualCnt = 0;
                headerCnt--;
                var colField = this.engine.headerContent[headerCnt];
                var colCount = colField ? Object.keys(colField).length : 0;
                if (colField && colCount > 0) {
                    var colLength = this.parent.isTabular ? (this.parent.engineModule.rowMaxLevel + 1) : (colField[0] ? 0 : 1);
                    for (var cCnt = 0, cLen = Object.keys(colField).length + colLength; cCnt < cLen; cCnt++) {
                        var colSpan = (colField[cCnt] && colField[cCnt].colSpan) ?
                            ((colField[cCnt].memberType !== 3 || (colField[cCnt].memberType === 3 && !measureFlag) ||
                                headerCnt === 0) ? colField[cCnt].colSpan : headerSplit[cCnt]) : 1;
                        colSpan = this.parent.dataType === 'olap' && isNullOrUndefined(colSpan) ? 1 : colSpan;
                        var formattedText = colField[cCnt] ? (colField[cCnt].type === 'grand sum' ?
                            (isNullOrUndefined(colField[cCnt].valueSort.axis) ? this.parent.localeObj.getConstant('grandTotal') :
                                colField[cCnt].formattedText) : (colField[cCnt].type === 'sum' ?
                            colField[cCnt].formattedText.split('Total')[0] + this.parent.localeObj.getConstant('total') :
                            colField[cCnt].formattedText)) : '';
                        formattedText = this.parent.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(formattedText) : formattedText;
                        if (headerCnt === this.engine.headerContent.length - 1) {
                            colSpan = 1;
                            autoFitApplied = pivotColumns.length - 1 !== colCount ? false : (!refreshColumn && !this.parent.isEmptyGrid
                                && pivotColumns[actualCnt] && pivotColumns[actualCnt].autoFit);
                            columnModel[actualCnt] = {
                                field: (cCnt + '.formattedText'),
                                headerText: formattedText,
                                customAttributes: { 'cell': this.cloneDataWithoutIndex(colField[cCnt]) },
                                width: autoFitApplied && gridColumns[actualCnt] ?
                                    gridColumns[actualCnt].width : colField[cCnt]
                                    ? colField[cCnt].valueSort ? this.setSavedWidth(colField[cCnt]
                                        .valueSort.levelName, colWidth) : this.resColWidth : this.resColWidth,
                                minWidth: autoFitApplied && actualCnt === colCount
                                    ? gridColumns[gridColumns.length - 1].minWidth : 30,
                                allowReordering: this.parent.gridSettings.allowReordering,
                                allowResizing: this.parent.gridSettings.allowResizing,
                                visible: true,
                                textAlign: this.parent.enableRtl ? 'Left' : 'Right',
                                headerTextAlign: this.parent.enableRtl ? 'Right' : 'Left'
                            };
                            if (cCnt === colCount) {
                                columnModel[actualCnt].width = (columnModel[actualCnt].width - 3);
                                this.lastColumn = columnModel[actualCnt];
                            }
                        }
                        else if (headerSplit[cCnt]) {
                            // colSpan = (colField[cCnt as number] && colField[cCnt as number].type === 'grand sum' &&
                            //     colField[cCnt as number].memberType === 2) ? 1 : colSpan;
                            var tmpSpan = colSpan;
                            var innerModel = [];
                            var innerPos = cCnt;
                            while (tmpSpan > 0) {
                                if (columnModel[actualCnt]) {
                                    if (!this.pivotColumns[splitPos[innerPos]]) {
                                        break;
                                    }
                                    innerModel.push(this.pivotColumns[splitPos[innerPos]]);
                                }
                                else {
                                    columnModel[actualCnt] = {
                                        headerText: formattedText,
                                        field: colField[cCnt] ? colField[cCnt].valueSort
                                            .levelName : '',
                                        customAttributes: { 'cell': this.cloneDataWithoutIndex(colField[cCnt]) },
                                        width: (autoFitApplied && actualCnt === 0 && !refreshColumn && !this.parent.isEmptyGrid
                                            && pivotColumns[0].autoFit) ? gridColumns[0].width : colField[cCnt] ?
                                            this.setSavedWidth(colField[cCnt].valueSort
                                                .levelName, colWidth) : this.resColWidth,
                                        minWidth: 30,
                                        allowReordering: this.parent.gridSettings.allowReordering,
                                        allowResizing: this.parent.gridSettings.allowResizing,
                                        visible: true,
                                        headerTextAlign: this.parent.enableRtl ? 'Right' : 'Left'
                                    };
                                    if (!this.pivotColumns[splitPos[innerPos]]) {
                                        break;
                                    }
                                    innerModel = [this.pivotColumns[splitPos[innerPos]]];
                                }
                                this.isAutoFitEnabled = this.isAutoFitEnabled ? true : autoFitApplied;
                                tmpSpan = tmpSpan - headerSplit[innerPos];
                                innerPos = innerPos + headerSplit[innerPos];
                            }
                            columnModel[actualCnt].columns = innerModel;
                        }
                        if (columnModel[actualCnt]) {
                            columnModel[actualCnt].clipMode = this.gridSettings.clipMode;
                        }
                        headerSplit[cCnt] = colSpan;
                        splitPos[cCnt] = actualCnt;
                        actualCnt++;
                        cCnt = cCnt + colSpan - 1;
                    }
                }
                this.pivotColumns = columnModel.length > 0 ? columnModel : this.pivotColumns;
            } while (headerCnt > 0);
            if (this.parent.isTabular) {
                for (var n = 0; n < this.parent.engineModule.rowMaxLevel + 1; n++) {
                    if (this.parent.showGroupingBar && !this.parent.isAdaptive) {
                        var groupRowElement = this.parent.element.querySelector('.' + cls.GROUP_ROW);
                        var buttonDivs = groupRowElement.querySelectorAll('.e-pvt-btn-div');
                        var rowHeaderWidth = 0;
                        if (this.parent.engineModule.rowMaxLevel !== buttonDivs.length - 1 && n === this.parent.engineModule.rowMaxLevel) {
                            rowHeaderWidth = this.getTotalColumnWidth(buttonDivs, n);
                        }
                        else {
                            if (groupRowElement.querySelectorAll('.e-pvt-btn-div').length === 1) {
                                rowHeaderWidth = 250;
                            }
                            else {
                                if ((this.parent.element.getBoundingClientRect().width * 0.8) <= this.getTotalColumnWidth(buttonDivs, 0)) {
                                    rowHeaderWidth = this.gridSettings.columnWidth;
                                }
                                else {
                                    var buttonWidth = groupRowElement.querySelectorAll('.e-pvt-btn-div')[n].getBoundingClientRect().width
                                        < this.parent.gridSettings.columnWidth ? this.parent.gridSettings.columnWidth :
                                        groupRowElement.querySelectorAll('.e-pvt-btn-div')[n].getBoundingClientRect().width;
                                    rowHeaderWidth = buttonWidth + 6;
                                }
                            }
                        }
                        this.pivotColumns[n] = {
                            field: (n + '.formattedText'),
                            width: rowHeaderWidth > this.gridSettings.columnWidth ? rowHeaderWidth : this.resColWidth,
                            minWidth: 30,
                            headerText: '',
                            allowReordering: false,
                            allowResizing: this.parent.gridSettings.allowResizing,
                            visible: true,
                            clipMode: this.parent.gridSettings.clipMode
                        };
                    }
                    else {
                        for (var n_1 = 0; n_1 < this.parent.engineModule.rowMaxLevel + 1; n_1++) {
                            this.updatePivotColumn(this.pivotColumns, n_1, autoFitApplied, refreshColumn, gridColumns);
                        }
                    }
                }
            }
            else {
                this.updatePivotColumn(this.pivotColumns, 0, autoFitApplied, refreshColumn, gridColumns);
            }
        }
        else {
            this.resColWidth = (this.parent.showGroupingBar && this.parent.groupingBarModule) ? (this.parent.isAdaptive ? 180 : 250) :
                (this.parent.isAdaptive ? 140 : 200);
            this.pivotColumns = this.frameEmptyColumns();
        }
        if (this.parent.toolbarModule && this.parent.showToolbar) {
            this.parent.toolbarModule.isReportChange = false;
        }
        this.parent.triggerColumnRenderEvent(this.pivotColumns);
        autoFitApplied = this.parent.pivotColumns.length > 0 && this.parent.pivotColumns[this.parent.pivotColumns.length - 1].autoFit;
        return this.pivotColumns;
    };
    /** @hidden */
    Render.prototype.setSavedWidth = function (column, width) {
        if (column === '0.formattedText' && !isNullOrUndefined(this.parent.resizedValue)) {
            width = this.parent.resizedValue;
        }
        else {
            if (this.parent.isTabular && this.parent.element.querySelector('.' + cls.ROW_CLASS).querySelector('.' + cls.ROWCELL) &&
                this.parent.showGroupingBar && column === '0.formattedText' && this.parent.dataSourceSettings.values.length === 0) {
                var rowHeaderWidth = 0;
                var buttonDivs = this.parent.element.querySelector('.' + cls.GROUP_ROW)
                    .querySelectorAll('.e-pvt-btn-div');
                if (buttonDivs.length > 1) {
                    for (var i = 0; i < buttonDivs.length; i++) {
                        rowHeaderWidth += buttonDivs[i].getBoundingClientRect().width + 6;
                    }
                    width = rowHeaderWidth;
                }
            }
            width = this.parent.resizeInfo[column] ? this.parent.resizeInfo[column] : width;
        }
        return width;
    };
    /** @hidden */
    Render.prototype.frameEmptyColumns = function () {
        var columns = [];
        var colWidth = this.calculateColWidth(2);
        columns.push({ field: '0.formattedText', headerText: '', minWidth: 30, width: this.resColWidth });
        columns.push({ field: '1.formattedText', headerText: this.parent.localeObj.getConstant('grandTotal'), minWidth: 30, width: colWidth - 3 });
        return columns;
    };
    /** @hidden */
    Render.prototype.getFormatList = function () {
        var formatArray = {};
        for (var vCnt = 0; vCnt < this.parent.dataSourceSettings.values.length; vCnt++) {
            var field = this.parent.dataSourceSettings.values[vCnt];
            var format = 'N';
            if (this.parent.dataType === 'olap') {
                if (this.parent.olapEngineModule.fieldList[field.name] &&
                    !isNullOrUndefined(this.parent.olapEngineModule.fieldList[field.name].formatString)) {
                    var fString = this.parent.olapEngineModule.formatFields[field.name] ?
                        this.parent.olapEngineModule.formatFields[field.name].format :
                        this.parent.olapEngineModule.fieldList[field.name].formatString;
                    fString = (fString === 'Standard') ? 'Number' : fString;
                    format = (fString.indexOf('#') > -1 || fString.match(/\d/) !== null) ? fString : (fString[0] + '2');
                }
            }
            else {
                var advancedAggregateTypes = ['PercentageOfDifferenceFrom', 'PercentageOfRowTotal', 'PercentageOfColumnTotal', 'PercentageOfGrandTotal', 'PercentageOfParentRowTotal', 'PercentageOfParentColumnTotal', 'PercentageOfParentTotal'];
                if ((advancedAggregateTypes).indexOf(field.type) > -1) {
                    format = 'P' + this.engine.getPercentFormat(this.engine.formatFields, field.name);
                }
                else if (['PopulationStDev', 'SampleStDev', 'PopulationVar', 'SampleVar', 'Index'].indexOf(field.type) > -1) {
                    format = undefined;
                }
                if (this.parent.dataSourceSettings.formatSettings.length > 0) {
                    for (var fCnt = 0; fCnt < this.parent.dataSourceSettings.formatSettings.length; fCnt++) {
                        var formatSettings = this.parent.dataSourceSettings.formatSettings[fCnt];
                        if (field.name === formatSettings.name) {
                            if (advancedAggregateTypes.indexOf(field.type) === -1) {
                                format = formatSettings.format;
                            }
                            break;
                        }
                        else {
                            continue;
                        }
                    }
                }
            }
            formatArray[field.name] = format;
        }
        return formatArray;
    };
    Render.prototype.getValidHeader = function (args, axis) {
        var values = this.parent.dataSourceSettings.values;
        var cellValue;
        if (axis === 'row') {
            var cellInfo = args;
            if (this.parent.dataSourceSettings.rows.length === 0 || this.parent.dataSourceSettings.columns.length === 0) {
                if (this.parent.dataSourceSettings.rows.length === 0 && this.parent.dataSourceSettings.valueAxis === 'row' && (this.parent.localeObj.getConstant('grandTotal') +
                    this.parent.dataSourceSettings.valueSortSettings.headerDelimiter + cellInfo.value)
                    === cellInfo.data[0].valueSort.levelName) {
                    return this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(this.parent.engineModule.fieldList[cellInfo.value.toString()].aggregateType)
                        + ' ' + this.parent.localeObj.getConstant('of') + ' ' + cellInfo.value.toString();
                }
                else if (values.length === 1 && this.parent.dataSourceSettings.rows.length === 0) {
                    return this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(values[values.length - 1].type)
                        + ' ' + this.parent.localeObj.getConstant('of') + ' ' + (!isNullOrUndefined(values[values.length - 1].caption) ? values[values.length - 1].caption : values[values.length - 1].name);
                }
            }
            cellValue = cellInfo.value;
        }
        else if (axis === 'column') {
            var cellInfo = args;
            if (this.parent.dataSourceSettings.rows.length === 0 || this.parent.dataSourceSettings.columns.length === 0) {
                if (!isNullOrUndefined(args
                    .gridCell.column.customAttributes) && this.parent.dataSourceSettings.columns.length === 0 &&
                    this.parent.dataSourceSettings.valueAxis === 'column' && (this.parent.localeObj.getConstant('grandTotal') +
                    this.parent.dataSourceSettings.valueSortSettings.headerDelimiter + cellInfo.gridCell.column
                    .customAttributes.cell.formattedText) === cellInfo.gridCell.column
                    .customAttributes.cell.valueSort.levelName) {
                    return this.parent.localeObj.getConstant('total') + ' ' + this.parent.localeObj.getConstant(this.parent.engineModule
                        .fieldList[cellInfo.gridCell.column.customAttributes.cell.actualText]
                        .aggregateType) + ' ' + this.parent.localeObj.getConstant('of') + ' ' + cellInfo.gridCell
                        .column.customAttributes.cell.formattedText;
                }
            }
            cellValue = cellInfo.cell.value;
        }
        return cellValue;
    };
    Render.prototype.excelColumnEvent = function (args) {
        if (this.parent.dataSourceSettings.columns.length === 0 && this.parent.dataSourceSettings.valueAxis === 'column') {
            args.cell.value = this.getValidHeader(args, 'column');
        }
        if (args.gridCell !== undefined && args.gridCell.column.width === 'auto') {
            this.parent.lastColumn = args.gridCell.column;
            args.gridCell.column.width = args.gridCell.column.minWidth;
        }
        args = this.exportHeaderEvent(args, 'XLSX');
        this.parent.trigger(events.excelHeaderQueryCellInfo, args);
    };
    Render.prototype.pdfColumnEvent = function (args) {
        if (this.parent.dataSourceSettings.columns.length === 0 && this.parent.dataSourceSettings.valueAxis === 'column') {
            args.cell.value = this.getValidHeader(args, 'column');
        }
        if (args.gridCell !== undefined && args.gridCell.column.width === 'auto') {
            this.parent.lastColumn = args.gridCell.column;
            args.gridCell.column.width = args.gridCell.column.minWidth;
        }
        if (args.gridCell.column.index === 0) {
            args.cell.colSpan = this.parent.isTabular ? this.parent.engineModule.rowMaxLevel + 1 : 1;
        }
        this.parent.trigger(events.pdfHeaderQueryCellInfo, args);
    };
    Render.prototype.excelRowEvent = function (args) {
        var pivotValue;
        var rowMaxLevel = this.parent.isTabular ? this.parent.engineModule.rowMaxLevel : 0;
        var colIndex = args.column ? args.column.index : undefined;
        if (colIndex >= 0 && colIndex <= rowMaxLevel) {
            var cell = args.data[colIndex];
            var isValueCell = cell.type && cell.type === 'value';
            var level = 0;
            if (this.parent.dataType === 'olap') {
                level = this.indentCollection[cell.rowIndex];
            }
            else {
                var levelName = cell.valueSort ? cell.valueSort.levelName.toString() : '';
                var memberPos = cell.actualText ?
                    cell.actualText.toString().split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length : 0;
                var levelPosition = levelName.split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length -
                    (memberPos ? memberPos - 1 : memberPos);
                level = levelPosition ? (levelPosition - 1) : 0;
            }
            this.colPos = 0;
            args.style = { hAlign: 'Left', indent: level * 2 };
            this.lastSpan = isValueCell ? this.lastSpan : level;
            if ((args.data[colIndex].rowSpan === 0 || args.data[colIndex].colSpan
                === 0) && this.parent.exportType === 'CSV' && this.parent.isTabular) {
                args.value = '';
            }
        }
        else {
            this.colPos++;
            pivotValue = (args.data)[args.column.customAttributes.cell ?
                args.column.customAttributes.cell.colIndex : this.colPos];
            if (isNullOrUndefined(pivotValue.value) || isNullOrUndefined(pivotValue.formattedText) || pivotValue.formattedText === '') {
                args.value = this.parent.exportType === 'Excel' ? null : '';
            }
            else {
                var aggMatrix = this.parent.dataType === 'pivot' && this.parent.engineModule ? this.parent.engineModule.aggregatedValueMatrix : undefined;
                if (aggMatrix && aggMatrix[pivotValue.rowIndex] && aggMatrix[pivotValue.rowIndex][pivotValue.colIndex]) {
                    args.value = aggMatrix[pivotValue.rowIndex][pivotValue.colIndex];
                }
                else {
                    args.value = !isNullOrUndefined(pivotValue.value) ? (pivotValue.formattedText === '#DIV/0!' ? pivotValue.formattedText : pivotValue.value) : pivotValue.formattedText;
                }
            }
        }
        args = this.exportContentEvent(args);
        if (this.parent.dataSourceSettings.rows.length === 0 && this.parent.dataSourceSettings.valueAxis === 'row') {
            args.value = args.column.field === '0.formattedText' ? this.getValidHeader(args, 'row')
                : args.value;
        }
        this.parent.trigger(events.excelQueryCellInfo, args);
        if (pivotValue && !isNullOrUndefined(args.value) && args.value !== '') {
            if (args.style && this.formatList[pivotValue.actualText]) {
                args.style.type = 'number';
                args.style.numberFormat = args.style.numberFormat ? args.style.numberFormat : this.formatList[pivotValue.actualText];
            }
            else if (this.formatList[pivotValue.actualText]) {
                args.style = { numberFormat: this.formatList[pivotValue.actualText] };
            }
            args.column.format = this.formatList[pivotValue.actualText];
        }
    };
    Render.prototype.pdfRowEvent = function (args) {
        args = this.exportContentEvent(args);
        if (args.column.field === '0.formattedText') {
            var level = 0;
            var cell = args.data[0];
            var isValueCell = cell.type && cell.type === 'value';
            if (this.parent.dataType === 'olap') {
                level = this.indentCollection[cell.rowIndex];
            }
            else {
                var levelName = cell.valueSort ? cell.valueSort.levelName.toString() : '';
                var memberPos = cell.actualText ?
                    cell.actualText.toString().split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length : 0;
                var levelPosition = levelName.split(this.parent.dataSourceSettings.valueSortSettings.headerDelimiter).length -
                    (memberPos ? memberPos - 1 : memberPos);
                level = levelPosition ? (levelPosition - 1) : 0;
            }
            args.style = { paragraphIndent: level * 10 };
            this.lastSpan = isValueCell ? this.lastSpan : level;
            if (this.parent.dataSourceSettings.rows.length === 0 && this.parent.dataSourceSettings.valueAxis === 'row') {
                args.value = this.getValidHeader(args, 'row');
            }
        }
        this.parent.trigger(events.pdfQueryCellInfo, args);
    };
    Render.prototype.excelDataBound = function (args) {
        var excelRows = args.excelRows;
        var rowStartPos = Object.keys(this.engine.headerContent).length;
        for (var i = 0; i < rowStartPos; i++) {
            var cells = excelRows[i].cells;
            var tmpCell = [];
            for (var j = 0; j < cells.length; j++) {
                if (cells[j].rowSpan !== -1) {
                    tmpCell.push(cells[j]);
                }
            }
            excelRows[i].cells = tmpCell;
        }
    };
    Render.prototype.exportHeaderEvent = function (args, exportType) {
        var rowSpan = 1;
        if (args.gridCell.column.customAttributes) {
            var cell = args.gridCell.column.customAttributes.cell;
            rowSpan = cell.rowSpan > 0 ? cell.rowSpan : 1;
            if (exportType === 'XLSX') {
                if (cell.rowSpan > 0) {
                    rowSpan = cell.rowSpan;
                }
                else if (!isNullOrUndefined(cell.type) && cell.level !== 0) {
                    rowSpan = 1;
                    args.cell.rowSpan = 1;
                }
            }
            this.actualText = cell.actualText;
        }
        else {
            rowSpan = Object.keys(this.engine.headerContent).length;
        }
        if (args.cell.rowSpan !== rowSpan && rowSpan > 0) {
            args.cell.rowSpan = rowSpan;
        }
        return args;
    };
    /**
     *
     * @param {IGridValues} actualData - It contains the data source.
     * @returns {IGridValues} - It frames the data source without index and indexObject properties.
     * @hidden */
    Render.prototype.frameGridDataSource = function (actualData) {
        var framedDataSource = [];
        for (var i = 0; i < actualData.length; i++) {
            var keyPos = 0;
            framedDataSource[i] = {};
            var keys = Object.keys(actualData[i]);
            for (var j = 0; actualData[i] != null && j < keys.length; j++) {
                while (keyPos < keys.length) {
                    framedDataSource[i][Number(keys[keyPos])] =
                        this.cloneDataWithoutIndex(actualData[i][Number(keys[keyPos])]);
                    keyPos++;
                }
            }
        }
        return framedDataSource;
    };
    /** @hidden */
    Render.prototype.cloneDataWithoutIndex = function (data) {
        if (!isNullOrUndefined(data)) {
            var keys = Object.keys(data);
            var keyPos = 0;
            var clonedData = {};
            while (keyPos < keys.length) {
                if (keys[keyPos] !== 'indexObject' && keys[keyPos] !== 'index') {
                    clonedData[keys[keyPos]] = data[keys[keyPos]];
                }
                keyPos++;
            }
            return clonedData;
        }
        return data;
    };
    Render.prototype.exportContentEvent = function (args) {
        var cell = args.data[Number(args.column.field.split('.formattedText')[0])];
        if (cell.rowSpan > 0 && cell.axis === 'row') {
            args.cell.rowSpan = cell.rowSpan;
        }
        if (cell.colSpan > 0 && cell.axis === 'row') {
            args.colSpan = cell.colSpan;
        }
        args.value = cell.type === 'grand sum' ? (isNullOrUndefined(cell.valueSort.axis) ?
            this.parent.localeObj.getConstant('grandTotal') : cell.formattedText) : args.value;
        return args;
    };
    Render.prototype.unWireEvents = function (cell) {
        if (cell && cell.querySelector('.e-hyperlinkcell')) {
            EventHandler.remove(cell.querySelector('.e-hyperlinkcell'), this.parent.isAdaptive ? 'touchend' : 'click', this.onHyperCellClick);
        }
        else {
            return;
        }
    };
    Render.prototype.wireEvents = function (cell) {
        if (cell.querySelector('.e-hyperlinkcell')) {
            EventHandler.add(cell.querySelector('.e-hyperlinkcell'), this.parent.isAdaptive ? 'touchend' : 'click', this.onHyperCellClick, this);
        }
        else {
            return;
        }
    };
    Render.prototype.setSpanAttributes = function (attrName, spanValue, element) {
        element.setAttribute(attrName, spanValue ? spanValue.toString() : '1');
        element.classList.add(cls.ROWSHEADER, cls.FREEZE_LEFT_BORDER, cls.TABULAR_LAYOUT_HEADER);
        if (spanValue === 0) {
            element.classList.add(cls.ICON_DISABLE);
        }
    };
    Render.prototype.updatePivotColumn = function (pivotColumns, n, autoFitApplied, refreshColumn, gridColumns) {
        pivotColumns[n] = {
            field: (n + '.formattedText'),
            width: (autoFitApplied && !refreshColumn && !this.parent.isEmptyGrid && pivotColumns[n].autoFit)
                ? gridColumns[n].width : this.resColWidth,
            minWidth: 30,
            headerText: '',
            allowReordering: false,
            allowResizing: this.parent.gridSettings.allowResizing,
            visible: true,
            clipMode: this.parent.gridSettings.clipMode
        };
    };
    Render.prototype.getTotalColumnWidth = function (buttonDivs, n) {
        var totalColumnWidth = 0;
        for (var i = n; i < buttonDivs.length; i++) {
            var buttonWidth = buttonDivs[i].getBoundingClientRect().width < this.parent.gridSettings.columnWidth ?
                this.parent.gridSettings.columnWidth : buttonDivs[i].getBoundingClientRect().width;
            totalColumnWidth += buttonWidth + 6;
        }
        return totalColumnWidth;
    };
    /**
     * Add a destroy method to clean up resources
     *
     * @returns {void}
     * @hidden
     */
    Render.prototype.destroy = function () {
        if (this.timeOutObj) {
            clearTimeout(this.timeOutObj);
            this.timeOutObj = undefined;
        }
        this.removeAllHyperlinkEventHandlers();
        if (this.aggMenu) {
            this.aggMenu.destroy();
            this.aggMenu = undefined;
        }
        this.engine = null;
        this.gridSettings = null;
        this.formatList = null;
        this.lastColumn = null;
        this.pivotColumns = [];
        this.indentCollection = {};
        this.lvlCollection = {};
        this.hierarchyCollection = {};
        this.lvlPosCollection = {};
        this.hierarchyPosCollection = {};
        this.drilledLevelInfo = {};
        this.aggMenu = null;
    };
    /**
     * Remove all event handlers from hyperlink cells
     *
     * @returns {void}
     * @private
     */
    Render.prototype.removeAllHyperlinkEventHandlers = function () {
        if (this.parent && this.parent.element) {
            var hyperlinkCells = this.parent.element.querySelectorAll('.e-hyperlinkcell');
            for (var i = 0; i < hyperlinkCells.length; i++) {
                EventHandler.remove(hyperlinkCells[i], this.parent.isAdaptive ? 'touchend' : 'click', this.onHyperCellClick);
            }
        }
    };
    return Render;
}());
export { Render };