@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
100 lines • 16.4 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Pipe } from '@angular/core';
import { GridBaseAPIService } from '../api.service';
import { GridSummaryCalculationMode, GridSummaryPosition } from '../common/enums';
/** @hidden */
var IgxTreeGridSummaryPipe = /** @class */ (function () {
function IgxTreeGridSummaryPipe(gridAPI) {
this.gridAPI = gridAPI;
}
IgxTreeGridSummaryPipe.prototype.transform = function (flatData, hasSummary, summaryCalculationMode, summaryPosition, id, pipeTrigger, summaryPipeTrigger) {
var grid = this.gridAPI.grid;
if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {
return flatData;
}
return this.addSummaryRows(grid, flatData, summaryPosition);
};
IgxTreeGridSummaryPipe.prototype.addSummaryRows = function (grid, collection, summaryPosition) {
var recordsWithSummary = [];
var maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();
for (var i = 0; i < collection.length; i++) {
var record = collection[i];
recordsWithSummary.push(record);
var isExpanded = record.children && record.children.length > 0 && record.expanded;
if (summaryPosition === GridSummaryPosition.bottom && !isExpanded) {
var childRecord = record;
var parent_1 = record.parent;
while (parent_1) {
var children = parent_1.children;
if (children[children.length - 1] === childRecord) {
var childData = children.filter(function (r) { return !r.isFilteredOutParent; }).map(function (r) { return r.data; });
childData = this.removeDeletedRecord(grid, parent_1.rowID, childData);
var summaries = grid.summaryService.calculateSummaries(parent_1.rowID, childData);
var summaryRecord = {
summaries: summaries,
max: maxSummaryHeight,
cellIndentation: parent_1.level + 1
};
recordsWithSummary.push(summaryRecord);
childRecord = parent_1;
parent_1 = childRecord.parent;
}
else {
break;
}
}
}
else if (summaryPosition === GridSummaryPosition.top && isExpanded) {
var childData = record.children.filter(function (r) { return !r.isFilteredOutParent; }).map(function (r) { return r.data; });
childData = this.removeDeletedRecord(grid, record.rowID, childData);
var summaries = grid.summaryService.calculateSummaries(record.rowID, childData);
var summaryRecord = {
summaries: summaries,
max: maxSummaryHeight,
cellIndentation: record.level + 1
};
recordsWithSummary.push(summaryRecord);
}
}
return recordsWithSummary;
};
IgxTreeGridSummaryPipe.prototype.removeDeletedRecord = function (grid, rowId, data) {
if (!grid.transactions.enabled || !grid.cascadeOnDelete) {
return data;
}
var deletedRows = grid.transactions.getTransactionLog().filter(function (t) { return t.type === 'delete'; }).map(function (t) { return t.id; });
var row = grid.records.get(rowId);
if (!row && deletedRows.lenght === 0) {
return [];
}
row = row.children ? row : row.parent;
while (row) {
rowId = row.rowID;
if (deletedRows.indexOf(rowId) !== -1) {
return [];
}
row = row.parent;
}
deletedRows.forEach(function (rowID) {
var tempData = grid.primaryKey ? data.map(function (rec) { return rec[grid.primaryKey]; }) : data;
var index = tempData.indexOf(rowID);
if (index !== -1) {
data.splice(index, 1);
}
});
return data;
};
IgxTreeGridSummaryPipe.ctorParameters = function () { return [
{ type: GridBaseAPIService }
]; };
IgxTreeGridSummaryPipe = __decorate([
Pipe({
name: 'treeGridSummary',
pure: true
}),
__metadata("design:paramtypes", [GridBaseAPIService])
], IgxTreeGridSummaryPipe);
return IgxTreeGridSummaryPipe;
}());
export { IgxTreeGridSummaryPipe };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLnN1bW1hcnkucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5zdW1tYXJ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3BELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2xGLGNBQWM7QUFLZDtJQUdJLGdDQUFZLE9BQTREO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEdBQTBCLE9BQU8sQ0FBQztJQUNqRCxDQUFDO0lBRUssMENBQVMsR0FBaEIsVUFBaUIsUUFBMkIsRUFDeEMsVUFBbUIsRUFDbkIsc0JBQWtELEVBQ2xELGVBQW9DLEVBQ3BDLEVBQVUsRUFBRSxXQUFtQixFQUFFLGtCQUEwQjtRQUMzRCxJQUFNLElBQUksR0FBeUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFckQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFVBQVUsSUFBSSxzQkFBc0IsS0FBSywwQkFBMEIsQ0FBQyxhQUFhLEVBQUU7WUFDakcsT0FBTyxRQUFRLENBQUM7U0FDbkI7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sK0NBQWMsR0FBdEIsVUFBdUIsSUFBMEIsRUFBRSxVQUE2QixFQUFFLGVBQW9DO1FBQ2xILElBQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRXBFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxF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SUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN6QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Z0JBMUZvQixrQkFBa0I7O0lBSDlCLHNCQUFzQjtRQUpsQyxJQUFJLENBQUM7WUFDRixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQzt5Q0FJdUIsa0JBQWtCO09BSDlCLHNCQUFzQixDQThGbEM7SUFBRCw2QkFBQztDQUFBLEFBOUZELElBOEZDO1NBOUZZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFRyZWVHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vdHJlZS1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElTdW1tYXJ5UmVjb3JkIH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbi8qKiBAaGlkZGVuICovXG5AUGlwZSh7XG4gICAgbmFtZTogJ3RyZWVHcmlkU3VtbWFyeScsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFN1bW1hcnlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHJpdmF0ZSBncmlkQVBJOiBJZ3hUcmVlR3JpZEFQSVNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHtcbiAgICAgICAgdGhpcy5ncmlkQVBJID0gPElneFRyZWVHcmlkQVBJU2VydmljZT5ncmlkQVBJO1xuICAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGZsYXREYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSxcbiAgICAgICAgaGFzU3VtbWFyeTogYm9vbGVhbixcbiAgICAgICAgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZTogR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUsXG4gICAgICAgIHN1bW1hcnlQb3NpdGlvbjogR3JpZFN1bW1hcnlQb3NpdGlvbixcbiAgICAgICAgaWQ6IHN0cmluZywgcGlwZVRyaWdnZXI6IG51bWJlciwgc3VtbWFyeVBpcGVUcmlnZ2VyOiBudW1iZXIpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50ID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG5cbiAgICAgICAgaWYgKCFmbGF0RGF0YSB8fCAhaGFzU3VtbWFyeSB8fCBzdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlID09PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdERhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hZGRTdW1tYXJ5Um93cyhncmlkLCBmbGF0RGF0YSwgc3VtbWFyeVBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFN1bW1hcnlSb3dzKGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LCBjb2xsZWN0aW9uOiBJVHJlZUdyaWRSZWNvcmRbXSwgc3VtbWFyeVBvc2l0aW9uOiBHcmlkU3VtbWFyeVBvc2l0aW9uKTogYW55W10ge1xuICAgICAgICBjb25zdCByZWNvcmRzV2l0aFN1bW1hcnkgPSBbXTtcbiAgICAgICAgY29uc3QgbWF4U3VtbWFyeUhlaWdodCA9IGdyaWQuc3VtbWFyeVNlcnZpY2UuY2FsY01heFN1bW1hcnlIZWlnaHQoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGNvbGxlY3Rpb25baV07XG4gICAgICAgICAgICByZWNvcmRzV2l0aFN1bW1hcnkucHVzaChyZWNvcmQpO1xuXG4gICAgICAgICAgICBjb25zdCBpc0V4cGFuZGVkID0gcmVjb3JkLmNoaWxkcmVuICYmIHJlY29yZC5jaGlsZHJlbi5sZW5ndGggPiAwICYmIHJlY29yZC5leHBhbmRlZDtcblxuICAgICAgICAgICAgaWYgKHN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgIWlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRSZWNvcmQgPSByZWNvcmQ7XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IHJlY29yZC5wYXJlbnQ7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSA9PT0gY2hpbGRSZWNvcmQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGREYXRhID0gY2hpbGRyZW4uZmlsdGVyKHIgPT4gIXIuaXNGaWx0ZXJlZE91dFBhcmVudCkubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGF0YSA9IHRoaXMucmVtb3ZlRGVsZXRlZFJlY29yZChncmlkLCBwYXJlbnQucm93SUQsIGNoaWxkRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJpZXMgPSBncmlkLnN1bW1hcnlTZXJ2aWNlLmNhbGN1bGF0ZVN1bW1hcmllcyhwYXJlbnQucm93SUQsIGNoaWxkRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVjb3JkOiBJU3VtbWFyeVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJpZXM6IHN1bW1hcmllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heFN1bW1hcnlIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEluZGVudGF0aW9uOiBwYXJlbnQubGV2ZWwgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1dpdGhTdW1tYXJ5LnB1c2goc3VtbWFyeVJlY29yZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUmVjb3JkID0gcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gY2hpbGRSZWNvcmQucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi50b3AgJiYgaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZERhdGEgPSByZWNvcmQuY2hpbGRyZW4uZmlsdGVyKHIgPT4gIXIuaXNGaWx0ZXJlZE91dFBhcmVudCkubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLnJlbW92ZURlbGV0ZWRSZWNvcmQoZ3JpZCwgcmVjb3JkLnJvd0lELCBjaGlsZERhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IGdyaWQuc3VtbWFyeVNlcnZpY2UuY2FsY3VsYXRlU3VtbWFyaWVzKHJlY29yZC5yb3dJRCwgY2hpbGREYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVjb3JkOiBJU3VtbWFyeVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyaWVzOiBzdW1tYXJpZXMsXG4gICAgICAgICAgICAgICAgICAgIG1heDogbWF4U3VtbWFyeUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgY2VsbEluZGVudGF0aW9uOiByZWNvcmQubGV2ZWwgKyAxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWNvcmRzV2l0aFN1bW1hcnkucHVzaChzdW1tYXJ5UmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjb3Jkc1dpdGhTdW1tYXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRGVsZXRlZFJlY29yZChncmlkLCByb3dJZCwgZGF0YSkge1xuICAgICAgICBpZiAoIWdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgfHwgIWdyaWQuY2FzY2FkZU9uRGVsZXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxldGVkUm93cyA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFRyYW5zYWN0aW9uTG9nKCkuZmlsdGVyKHQgPT4gdC50eXBlID09PSAnZGVsZXRlJykubWFwKHQgPT4gdC5pZCk7XG4gICAgICAgIGxldCByb3cgPSBncmlkLnJlY29yZHMuZ2V0KHJvd0lkKTtcbiAgICAgICAgaWYgKCFyb3cgJiYgZGVsZXRlZFJvd3MubGVuZ2h0ID09PSAwKSB7IHJldHVybiBbXTsgfVxuICAgICAgICByb3cgPSByb3cuY2hpbGRyZW4gPyByb3cgOiByb3cucGFyZW50O1xuICAgICAgICB3aGlsZSAocm93KSB7XG4gICAgICAgICAgICByb3dJZCA9IHJvdy5yb3dJRDtcbiAgICAgICAgICAgIGlmIChkZWxldGVkUm93cy5pbmRleE9mKHJvd0lkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZWRSb3dzLmZvckVhY2gocm93SUQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVtcERhdGEgPSBncmlkLnByaW1hcnlLZXkgPyBkYXRhLm1hcChyZWMgPT4gcmVjW2dyaWQucHJpbWFyeUtleV0pIDogZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGVtcERhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuIl19