@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.
901 lines • 148 kB
JavaScript
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, formatUnit } 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 = {};
/** @hidden */
this.selectedCells = [];
this.parent = parent;
this.resColWidth = !this.parent.isTabular ? (this.parent.showGroupingBar && this.parent.groupingBarModule
? (this.parent.isAdaptive ? 180 : 250) : (this.parent.isAdaptive ? 140 : 200))
: (this.parent.showGroupingBar && this.parent.groupingBarModule
? (this.parent.isAdaptive ? 110 : 150) : this.parent.gridSettings.columnWidth);
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.parent.showGroupingBar && this.parent.groupingBarModule
? (this.parent.isAdaptive ? 180 : 250) : (this.parent.isAdaptive ? 140 : 200))
: (this.parent.showGroupingBar && this.parent.groupingBarModule
? (this.parent.isAdaptive ? 110 : 150) : this.parent.gridSettings.columnWidth);
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();
}
if (this.parent && this.parent.isWindowResized && this.selectedCells && this.selectedCells.length > 0) {
this.parent.grid.clearSelection();
var parentElement_1 = this.parent.element;
var selectedElements_1 = [];
this.selectedCells.forEach(function (cell) {
if (cell.colIndex != null) {
var ariaColIndex = cell.colIndex + 1;
var selector = "[aria-colindex=\"" + ariaColIndex + "\"]";
if (cell.rowIndex != null) {
selector += "[index=\"" + cell.rowIndex + "\"]";
}
var element = parentElement_1.querySelector(selector);
if (element) {
selectedElements_1.push(element);
}
}
});
selectedElements_1.forEach(function (element) {
addClass([element], [cls.CELL_ACTIVE_BGCOLOR, cls.SELECTED_BGCOLOR]);
});
}
this.parent.isWindowResized = false;
};
/**
* 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();
}
}
if (this.parent.isTabular) {
var rowHeader_1 = this.parent.element.querySelectorAll('.' + cls.HEADERCELL + '.' + cls.FREEZED_CELL);
var isRtl_1 = this.parent.enableRtl;
rowHeader_1.forEach(function (el, index) {
var isLast = index === rowHeader_1.length - 1;
if (!isNullOrUndefined(el) && (!isRtl_1 || (isRtl_1 && !isLast))) {
el.style.setProperty('border-left-width', '0px');
}
});
}
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 elem;
var cellTarget = this.parent.lastCellClicked ? this.parent.lastCellClicked :
(this.parent.isAdaptive ? args.event.target : this.parent.lastCellClicked);
if (cellTarget) {
elem = this.getCellElement(cellTarget);
}
var _loop_1 = function (item) {
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;
if (target) {
ele = this.getCellElement(target);
}
else {
return;
}
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 < valu