@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.
111 lines (110 loc) • 5.25 kB
JavaScript
import * as events from '../../common/base/constant';
import * as cls from '../../common/base/css-constant';
import { createElement, isNullOrUndefined, prepend } from '@syncfusion/ej2-base';
import { PivotUtil } from '../../base/util';
import { PivotButton } from '../actions/pivot-button';
import { DataManager } from '@syncfusion/ej2-data';
/**
* Module to render Axis Fields
*/
/** @hidden */
var AxisFields = /** @class */ (function () {
/** Constructor for render module
*
* @param {PivotView} parent - Instance.
*/
function AxisFields(parent) {
this.tempElements = [];
this.parent = parent;
}
/**
* Initialize the grouping bar pivot button rendering
*
* @returns {void}
* @private
*/
AxisFields.prototype.render = function () {
if ((!this.parent.pivotButtonModule || (this.parent.pivotButtonModule && this.parent.pivotButtonModule.isDestroyed))) {
new PivotButton(this.parent);
}
this.parent.pivotButtonModule.cleanupButtonElements();
this.createPivotButtons();
var pivotButtons = [];
pivotButtons = pivotButtons.concat([].slice.call(this.parent.groupingBarModule.rowPanel.querySelectorAll('.' + cls.PIVOT_BUTTON_WRAPPER_CLASS)));
var vlen = pivotButtons.length;
for (var j = 0; j < vlen; j++) {
var indentWidth = 24;
if (!this.parent.isTabular) {
var indentDiv = createElement('span', {
className: 'e-indent-div',
styles: this.parent.isTabular ? 'auto' : 'width:' + j * indentWidth + 'px'
});
this.tempElements.push(indentDiv);
prepend([indentDiv], pivotButtons[j]);
}
}
};
AxisFields.prototype.createPivotButtons = function () {
var fields = [this.parent.dataSourceSettings.rows, this.parent.dataSourceSettings.columns,
this.parent.dataSourceSettings.values, this.parent.dataSourceSettings.filters];
var elements = Array.prototype.slice.call(this.parent.element.querySelectorAll('.' + cls.GROUP_ALL_FIELDS_CLASS +
',.' + cls.GROUP_ROW_CLASS + ',.' + cls.GROUP_COLUMN_CLASS + ',.' + cls.GROUP_VALUE_CLASS + ',.' + cls.GROUP_FILTER_CLASS));
if (isNullOrUndefined(this.parent.element.querySelector('.' + cls.GROUP_PIVOT_ROW))) {
elements.push(this.parent.groupingBarModule.rowPanel);
}
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if ((this.parent.dataSourceSettings.values.length > 0 ? !element.classList.contains(cls.GROUP_CHART_VALUE) : true) ||
(this.parent.dataSourceSettings.columns.length > 0 ? !element.classList.contains(cls.GROUP_CHART_COLUMN) : true)) {
element.innerHTML = '';
}
}
if ((this.parent.dataType === 'pivot' && this.parent.dataSourceSettings.dataSource && ((!(this.parent.dataSourceSettings.dataSource instanceof DataManager) &&
(this.parent.dataSourceSettings.dataSource.length > 0)) ||
(this.parent.dataSourceSettings.dataSource instanceof DataManager && this.parent.engineModule.data &&
this.parent.engineModule.data.length > 0))) || (this.parent.dataType === 'olap' &&
this.parent.dataSourceSettings.url && this.parent.dataSourceSettings.url !== '') ||
(this.parent.dataSourceSettings.mode === 'Server' && this.parent.dataSourceSettings.url &&
this.parent.dataSourceSettings.url !== '')) {
var axis = ['rows', 'columns', 'values', 'filters'];
if (this.parent.dataType === 'pivot' && this.parent.groupingBarSettings.showFieldsPanel) {
axis.push('all-fields');
fields.push([]);
for (var _i = 0, _a = (this.parent.engineModule && this.parent.engineModule.fieldList ?
Object.keys(this.parent.engineModule.fieldList) : []); _i < _a.length; _i++) {
var key = _a[_i];
if (this.parent.engineModule.fieldList[key] &&
!this.parent.engineModule.fieldList[key].isSelected) {
fields[fields.length - 1].push(PivotUtil.getFieldInfo(key, this.parent, true).fieldItem);
}
}
}
for (var i = 0, lnt = fields.length; i < lnt; i++) {
if (fields[i]) {
var args = {
field: fields[i],
axis: axis[i].toString()
};
this.parent.notify(events.pivotButtonUpdate, args);
}
}
}
};
/**
* Destroy method to clean up resources
*
* @returns {void}
* @hidden
*/
AxisFields.prototype.destroy = function () {
for (var i = 0; i < this.tempElements.length; i++) {
var element = this.tempElements[i];
if (element && element.parentNode) {
element.parentNode.removeChild(element);
}
}
this.tempElements = [];
};
return AxisFields;
}());
export { AxisFields };