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