UNPKG

@syncfusion/ej2-treegrid

Version:
238 lines (237 loc) 11.5 kB
import { Query, DataManager } from '@syncfusion/ej2-data'; import { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids'; import { findParentRecords } from '../utils'; import { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base'; /** * TreeGrid Aggregate module * * @hidden */ var Aggregate = /** @class */ (function () { /** * Constructor for Aggregate module * * @param {TreeGrid} parent - Tree Grid instance */ function Aggregate(parent) { Grid.Inject(GridAggregate); this.parent = parent; this.flatChildRecords = []; this.summaryQuery = []; } /** * For internal use only - Get the module name. * * @private * @returns {string} Returns Summary module name */ Aggregate.prototype.getModuleName = function () { return 'summary'; }; Aggregate.prototype.removeEventListener = function () { if (this.parent.isDestroyed) { return; } }; /** * Function to calculate summary values * * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations * @param {Object[]} filteredData - Filtered data collection * @param {boolean} isSort - Specified whether sorting operation performed * @hidden * @returns {Object[]} - return flat records with summary values */ Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) { this.summaryQuery = summaryQuery; var parentRecord; var parentData = filteredData.filter(function (data) { return !getObject('isSummaryRow', data); }); var parentRecords = findParentRecords(parentData); var flatRecords = parentData.slice(); var summaryLength = Object.keys(this.parent.aggregates).length; var dataLength = Object.keys(parentRecords).length; var childRecordsLength; var columns = this.parent.getColumns(); if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) { for (var i = 0, len = dataLength; i < len; i++) { parentRecord = parentRecords[parseInt(i.toString(), 10)]; childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords); if (childRecordsLength) { var _loop_1 = function (summaryRowIndex, len_1) { var item = void 0; item = {}; for (var i_1 = 0; i_1 < columns.length; i_1++) { var field = (isNullOrUndefined(getObject('field', columns[parseInt(i_1.toString(), 10)]))) ? columns[parseInt(i_1.toString(), 10)] : getObject('field', (columns[parseInt(i_1.toString(), 10)])); item["" + field] = null; } item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]); if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) { var idx_1; flatRecords.map(function (e, i) { if (e.uniqueID === parentRecord.uniqueID) { idx_1 = i; return; } }); var currentIndex = idx_1 + childRecordsLength + summaryRowIndex; var summaryParent = extend({}, parentRecord); delete summaryParent.childRecords; delete summaryParent[this_1.parent.childMapping]; setValue('parentItem', summaryParent, item); var level = getObject('level', summaryParent); setValue('level', level + 1, item); setValue('isSummaryRow', true, item); setValue('parentUniqueID', summaryParent.uniqueID, item); if (isSort) { var childRecords = getObject('childRecords', parentRecord); if (childRecords.length) { childRecords.push(item); } } flatRecords.splice(currentIndex, 0, item); } else { return "continue"; } }; var this_1 = this; for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) { _loop_1(summaryRowIndex, len_1); } this.flatChildRecords = []; } } } else { var items = {}; for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) { var fields = isNullOrUndefined(getObject('field', columns[parseInt(columnIndex.toString(), 10)])) ? columns[parseInt(columnIndex.toString(), 10)] : getObject('field', columns[parseInt(columnIndex.toString(), 10)]); items["" + fields] = null; } for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) { this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]); } } return flatRecords; }; Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) { var recordLength = Object.keys(flatData).length; var record; for (var i = 0, len = recordLength; i < len; i++) { record = flatData[parseInt(i.toString(), 10)]; var parent_1 = isNullOrUndefined(record.parentItem) ? null : flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0]; if (parentData === parent_1) { this.flatChildRecords.push(record); var hasChild = getObject('hasChildRecords', record); if (hasChild) { this.getChildRecordsLength(record, flatData); } else { continue; } } } return this.flatChildRecords.length; }; Aggregate.prototype.createSummaryItem = function (itemData, summary) { var summaryColumnLength = Object.keys(summary.columns).length; for (var i = 0, len = summaryColumnLength; i < len; i++) { var displayColumn = isNullOrUndefined(summary.columns[parseInt(i.toString(), 10)].columnName) ? summary.columns[parseInt(i.toString(), 10)].field : summary.columns[parseInt(i.toString(), 10)].columnName; var keys = Object.keys(itemData); for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; if (key === displayColumn) { if (this.flatChildRecords.length) { itemData["" + key] = this.getSummaryValues(summary.columns[parseInt(i.toString(), 10)], this.flatChildRecords); } else if (this.parent.isLocalData) { var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json : this.parent.flatData; itemData["" + key] = this.getSummaryValues(summary.columns[parseInt(i.toString(), 10)], data); } } else { continue; } } } return itemData; }; Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) { var qry = new Query(); var single = {}; var helper = {}; var type = !isNullOrUndefined(summaryColumn.field) ? this.parent.getColumnByField(summaryColumn.field).type : undefined; summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) }); summaryColumn.setFormatter(this.parent.grid.locale); var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })(); summaryColumn.setTemplate(helper); var tempObj = summaryColumn.getTemplate(2); qry.queries = this.summaryQuery; qry.requiresCount(); var sumData = new DataManager(summaryData).executeLocal(qry); var types = summaryColumn.type; var summaryKey; types = [summaryColumn.type]; for (var i = 0; i < types.length; i++) { summaryKey = types[parseInt(i.toString(), 10)]; var key = summaryColumn.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase(); var val = types[parseInt(i.toString(), 10)] !== 'Custom' ? getObject('aggregates', sumData) : /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ calculateAggregate(types[parseInt(i.toString(), 10)], sumData, summaryColumn, this.parent); var disp = summaryColumn.columnName; var value_1 = types[parseInt(i.toString(), 10)] !== 'Custom' ? val["" + key] : val; single["" + disp] = single["" + disp] || {}; single["" + disp]["" + key] = value_1; single["" + disp][types[parseInt(i.toString(), 10)]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' '; } helper.format = summaryColumn.getFormatter(); var cellElement = createElement('td', { className: 'e-summary' }); if (this.parent.isReact && typeof (summaryColumn.footerTemplate) !== 'string') { var renderReactTemplates = 'renderReactTemplates'; tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement); this.parent["" + renderReactTemplates](); } else { appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property)); } var value = single["" + summaryColumn.columnName]["" + summaryKey]; return cellElement.innerHTML.indexOf(value) === -1 ? cellElement.innerHTML + value : cellElement.innerHTML; }; Aggregate.prototype.getFormatFromType = function (summaryformat, type) { if (isNullOrUndefined(type) || typeof summaryformat !== 'string') { return summaryformat; } var obj; switch (type) { case 'number': obj = { format: summaryformat }; break; case 'datetime': obj = { type: 'dateTime', skeleton: summaryformat }; break; case 'date': obj = { type: type, skeleton: summaryformat }; break; } return obj; }; /** * To destroy the Aggregate module * * @returns {void} * @hidden */ Aggregate.prototype.destroy = function () { this.removeEventListener(); }; return Aggregate; }()); export { Aggregate };