UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

125 lines 20.8 kB
import { __decorate, __metadata, __read, __spread } from "tslib"; import { Pipe } from '@angular/core'; import { GridBaseAPIService } from '../api.service'; import { GridSummaryCalculationMode, GridSummaryPosition } from '../common/enums'; /** @hidden */ var IgxGridSummaryPipe = /** @class */ (function () { function IgxGridSummaryPipe(gridAPI) { this.gridAPI = gridAPI; } IgxGridSummaryPipe.prototype.transform = function (collection, hasSummary, summaryCalculationMode, summaryPosition, id, pipeTrigger, summaryPipeTrigger) { if (!collection.data || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) { return collection.data; } return this.addSummaryRows(id, collection, summaryPosition); }; IgxGridSummaryPipe.prototype.addSummaryRows = function (gridId, collection, summaryPosition) { var _a; var recordsWithSummary = []; var lastChildMap = new Map(); var grid = this.gridAPI.grid; var maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight(); if (collection.metadata.length && !grid.isGroupByRecord(collection.data[0]) && grid.isGroupByRecord(collection.metadata[0]) && summaryPosition === GridSummaryPosition.bottom) { var groups = []; groups.push(collection.metadata[0]); while (groups[groups.length - 1].groupParent) { groups.push(groups[groups.length - 1].groupParent); } groups.reverse(); groups.forEach(function (g) { return g.skip = true; }); (_a = collection.data).splice.apply(_a, __spread([0, 0], groups)); } for (var i = 0; i < collection.data.length; i++) { var record = collection.data[i]; var skipAdd = false; var recordId = void 0; var groupByRecord = null; if (grid.isGroupByRecord(record)) { skipAdd = !!record.skip; record.skip = null; groupByRecord = record; recordId = this.gridAPI.get_groupBy_record_id(groupByRecord); } else { recordId = this.gridAPI.get_row_id(record); } if (!skipAdd) { recordsWithSummary.push(record); } if (summaryPosition === GridSummaryPosition.bottom && lastChildMap.has(recordId)) { var groupRecords = lastChildMap.get(recordId); for (var j = 0; j < groupRecords.length; j++) { var groupRecord = groupRecords[j]; var groupRecordId = this.gridAPI.get_groupBy_record_id(groupRecord); var records = this.removeDeletedRecord(grid, groupRecord.records.slice()); var summaries = grid.summaryService.calculateSummaries(groupRecordId, records); var summaryRecord = { summaries: summaries, max: maxSummaryHeight }; recordsWithSummary.push(summaryRecord); } } if (groupByRecord === null || !grid.isExpandedGroup(groupByRecord)) { continue; } if (summaryPosition === GridSummaryPosition.top) { var records = this.removeDeletedRecord(grid, groupByRecord.records.slice()); var summaries = grid.summaryService.calculateSummaries(recordId, records); var summaryRecord = { summaries: summaries, max: maxSummaryHeight }; recordsWithSummary.push(summaryRecord); } else if (summaryPosition === GridSummaryPosition.bottom) { var lastChild = groupByRecord; while (lastChild.groups && lastChild.groups.length > 0 && grid.isExpandedGroup(lastChild)) { lastChild = lastChild.groups[lastChild.groups.length - 1]; } var lastChildId = void 0; if (grid.isExpandedGroup(lastChild)) { lastChildId = this.gridAPI.get_row_id(lastChild.records[lastChild.records.length - 1]); } else { lastChildId = this.gridAPI.get_groupBy_record_id(lastChild); } var groupRecords = lastChildMap.get(lastChildId); if (!groupRecords) { groupRecords = []; lastChildMap.set(lastChildId, groupRecords); } groupRecords.unshift(groupByRecord); } } return recordsWithSummary; }; IgxGridSummaryPipe.prototype.removeDeletedRecord = function (grid, data) { if (!grid.transactions.enabled) { return data; } var deletedRows = grid.transactions.getTransactionLog().filter(function (t) { return t.type === 'delete'; }).map(function (t) { return t.id; }); 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; }; IgxGridSummaryPipe.ctorParameters = function () { return [ { type: GridBaseAPIService } ]; }; IgxGridSummaryPipe = __decorate([ Pipe({ name: 'gridSummary', pure: true }), __metadata("design:paramtypes", [GridBaseAPIService]) ], IgxGridSummaryPipe); return IgxGridSummaryPipe; }()); export { IgxGridSummaryPipe }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zdW1tYXJ5LnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2dyaWQvZ3JpZC5zdW1tYXJ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXBELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUWxGLGNBQWM7QUFLZDtJQUdJLDRCQUFZLE9BQTREO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEdBQXNCLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRU0sc0NBQVMsR0FBaEIsVUFBaUIsVUFBMEIsRUFDdkMsVUFBbUIsRUFDbkIsc0JBQWtELEVBQ2xELGVBQW9DLEVBQ3BDLEVBQVUsRUFBRSxXQUFtQixFQUFFLGtCQUEwQjtRQUUzRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxzQkFBc0IsS0FBSywwQkFBMEIsQ0FBQyxhQUFhLEVBQUU7WUFDeEcsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQzFCO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLDJDQUFjLEdBQXRCLFVBQXVCLE1BQWMsRUFBRSxVQUEwQixFQUFFLGVBQW9DOztRQUNuRyxJQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUN0RCxJQUFNLElBQUksR0FBcUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDakQsSUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFcEUsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFO1lBQ2hHLElBQU0sTUFBTSxHQUF3QyxFQUFFLENBQUM7WUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFiLENBQWEsQ0FBQyxDQUFDO1lBQ25DLENBQUEsS0FBQSxVQUFVLENBQUMsSUFBSSxDQUFBLENBQUMsTUFBTSxxQkFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFLLE1BQU0sR0FBRTtTQUMzQztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLFFBQVEsU0FBQSxDQUFDO1lBQ2IsSUFBSSxhQUFhLEdBQW1CLElBQUksQ0FBQztZQUN6QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLGFBQWEsR0FBRyxNQUF3QixDQUFDO2dCQUN6QyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRTtpQkFBTTtnQkFDSCxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDOUM7WUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNuQztZQUVELElBQUksZUFBZSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM5RSxJQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN0RSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDNUUsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2pGLElBQU0sYUFBYSxHQUFtQjt3QkFDbEMsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLEdBQUcsRUFBRSxnQkFBZ0I7cUJBQ3hCLENBQUM7b0JBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUMxQzthQUNKO1lBRUQsSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDaEUsU0FBUzthQUNaO1lBRUQsSUFBSSxlQUFlLEtBQUssbUJBQW1CLENBQUMsR0FBRyxFQUFFO2dCQUM3QyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDOUUsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzVFLElBQU0sYUFBYSxHQUFtQjtvQkFDbEMsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLEdBQUcsRUFBRSxnQkFBZ0I7aUJBQ3hCLENBQUM7Z0JBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzFDO2lCQUFNLElBQUksZUFBZSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDdkQsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUU5QixPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3ZGLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUM3RDtnQkFFRCxJQUFJLFdBQVcsU0FBQSxDQUFDO2dCQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2pDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFGO3FCQUFNO29CQUNILFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMvRDtnQkFFRCxJQUFJLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNmLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBQ2xCLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUMvQztnQkFDRCxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0o7UUFFRCxPQUFPLGtCQUFrQixDQUFDO0lBQzlCLENBQUM7SUFFTyxnREFBbUIsR0FBM0IsVUFBNEIsSUFBSSxFQUFFLElBQUk7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQW5CLENBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxFQUFKLENBQUksQ0FBQyxDQUFDO1FBQzFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO1lBQ3JCLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFwQixDQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoRixJQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztnQkF0SG9CLGtCQUFrQjs7SUFIOUIsa0JBQWtCO1FBSjlCLElBQUksQ0FBQztZQUNGLElBQUksRUFBRSxhQUFhO1lBQ25CLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQzt5Q0FJdUIsa0JBQWtCO09BSDlCLGtCQUFrQixDQTBIOUI7SUFBRCx5QkFBQztDQUFBLEFBMUhELElBMEhDO1NBMUhZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJU3VtbWFyeVJlY29yZCB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cEJ5UmVzdWx0IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLXJlc3VsdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUsIEdyaWRTdW1tYXJ5UG9zaXRpb24gfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuaW50ZXJmYWNlIElTa2lwUmVjb3JkIHtcbiAgICBza2lwPzogYm9vbGVhbjtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAnZ3JpZFN1bW1hcnknLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN1bW1hcnlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHJpdmF0ZSBncmlkQVBJOiBJZ3hHcmlkQVBJU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPikge1xuICAgICAgICB0aGlzLmdyaWRBUEkgPSA8SWd4R3JpZEFQSVNlcnZpY2U+Z3JpZEFQSTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IElHcm91cEJ5UmVzdWx0LFxuICAgICAgICBoYXNTdW1tYXJ5OiBib29sZWFuLFxuICAgICAgICBzdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlOiBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSxcbiAgICAgICAgc3VtbWFyeVBvc2l0aW9uOiBHcmlkU3VtbWFyeVBvc2l0aW9uLFxuICAgICAgICBpZDogc3RyaW5nLCBwaXBlVHJpZ2dlcjogbnVtYmVyLCBzdW1tYXJ5UGlwZVRyaWdnZXI6IG51bWJlcik6IGFueVtdIHtcblxuICAgICAgICBpZiAoIWNvbGxlY3Rpb24uZGF0YSB8fCAhaGFzU3VtbWFyeSB8fCBzdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlID09PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU3VtbWFyeVJvd3MoaWQsIGNvbGxlY3Rpb24sIHN1bW1hcnlQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTdW1tYXJ5Um93cyhncmlkSWQ6IHN0cmluZywgY29sbGVjdGlvbjogSUdyb3VwQnlSZXN1bHQsIHN1bW1hcnlQb3NpdGlvbjogR3JpZFN1bW1hcnlQb3NpdGlvbik6IGFueVtdIHtcbiAgICAgICAgY29uc3QgcmVjb3Jkc1dpdGhTdW1tYXJ5ID0gW107XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE1hcCA9IG5ldyBNYXA8YW55LCBJR3JvdXBCeVJlY29yZFtdPigpO1xuICAgICAgICBjb25zdCBncmlkOiBJZ3hHcmlkQ29tcG9uZW50ID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgICAgIGNvbnN0IG1heFN1bW1hcnlIZWlnaHQgPSBncmlkLnN1bW1hcnlTZXJ2aWNlLmNhbGNNYXhTdW1tYXJ5SGVpZ2h0KCk7XG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb24ubWV0YWRhdGEubGVuZ3RoICYmICFncmlkLmlzR3JvdXBCeVJlY29yZChjb2xsZWN0aW9uLmRhdGFbMF0pICYmXG4gICAgICAgICAgICBncmlkLmlzR3JvdXBCeVJlY29yZChjb2xsZWN0aW9uLm1ldGFkYXRhWzBdKSAmJiBzdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cHM6IEFycmF5PElHcm91cEJ5UmVjb3JkICYgSVNraXBSZWNvcmQ+ID0gW107XG4gICAgICAgICAgICBncm91cHMucHVzaChjb2xsZWN0aW9uLm1ldGFkYXRhWzBdKTtcbiAgICAgICAgICAgIHdoaWxlIChncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLmdyb3VwUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5ncm91cFBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cHMucmV2ZXJzZSgpO1xuICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goZyA9PiBnLnNraXAgPSB0cnVlKTtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24uZGF0YS5zcGxpY2UoMCwgMCwgLi4uZ3JvdXBzKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24uZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gY29sbGVjdGlvbi5kYXRhW2ldO1xuICAgICAgICAgICAgbGV0IHNraXBBZGQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCByZWNvcmRJZDtcbiAgICAgICAgICAgIGxldCBncm91cEJ5UmVjb3JkOiBJR3JvdXBCeVJlY29yZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjb3JkKSkge1xuICAgICAgICAgICAgICAgIHNraXBBZGQgPSAhIXJlY29yZC5za2lwO1xuICAgICAgICAgICAgICAgIHJlY29yZC5za2lwID0gbnVsbDtcbiAgICAgICAgICAgICAgICBncm91cEJ5UmVjb3JkID0gcmVjb3JkIGFzIElHcm91cEJ5UmVjb3JkO1xuICAgICAgICAgICAgICAgIHJlY29yZElkID0gdGhpcy5ncmlkQVBJLmdldF9ncm91cEJ5X3JlY29yZF9pZChncm91cEJ5UmVjb3JkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X3Jvd19pZChyZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwQWRkKSB7XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1dpdGhTdW1tYXJ5LnB1c2gocmVjb3JkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgbGFzdENoaWxkTWFwLmhhcyhyZWNvcmRJZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY29yZHMgPSBsYXN0Q2hpbGRNYXAuZ2V0KHJlY29yZElkKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JvdXBSZWNvcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVjb3JkID0gZ3JvdXBSZWNvcmRzW2pdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY29yZElkID0gdGhpcy5ncmlkQVBJLmdldF9ncm91cEJ5X3JlY29yZF9pZChncm91cFJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnJlbW92ZURlbGV0ZWRSZWNvcmQoZ3JpZCwgZ3JvdXBSZWNvcmQucmVjb3Jkcy5zbGljZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gZ3JpZC5zdW1tYXJ5U2VydmljZS5jYWxjdWxhdGVTdW1tYXJpZXMoZ3JvdXBSZWNvcmRJZCwgcmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlSZWNvcmQ6IElTdW1tYXJ5UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyaWVzOiBzdW1tYXJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heFN1bW1hcnlIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1dpdGhTdW1tYXJ5LnB1c2goc3VtbWFyeVJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JvdXBCeVJlY29yZCA9PT0gbnVsbCB8fCAhZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3JvdXBCeVJlY29yZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy5yZW1vdmVEZWxldGVkUmVjb3JkKGdyaWQsIGdyb3VwQnlSZWNvcmQucmVjb3Jkcy5zbGljZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJpZXMgPSBncmlkLnN1bW1hcnlTZXJ2aWNlLmNhbGN1bGF0ZVN1bW1hcmllcyhyZWNvcmRJZCwgcmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlY29yZDogSVN1bW1hcnlSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcmllczogc3VtbWFyaWVzLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IG1heFN1bW1hcnlIZWlnaHRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlY29yZHNXaXRoU3VtbWFyeS5wdXNoKHN1bW1hcnlSZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RDaGlsZCA9IGdyb3VwQnlSZWNvcmQ7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAobGFzdENoaWxkLmdyb3VwcyAmJiBsYXN0Q2hpbGQuZ3JvdXBzLmxlbmd0aCA+IDAgJiYgZ3JpZC5pc0V4cGFuZGVkR3JvdXAobGFzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGQuZ3JvdXBzW2xhc3RDaGlsZC5ncm91cHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGxhc3RDaGlsZElkO1xuICAgICAgICAgICAgICAgIGlmIChncmlkLmlzRXhwYW5kZWRHcm91cChsYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZElkID0gdGhpcy5ncmlkQVBJLmdldF9yb3dfaWQobGFzdENoaWxkLnJlY29yZHNbbGFzdENoaWxkLnJlY29yZHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZElkID0gdGhpcy5ncmlkQVBJLmdldF9ncm91cEJ5X3JlY29yZF9pZChsYXN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBncm91cFJlY29yZHMgPSBsYXN0Q2hpbGRNYXAuZ2V0KGxhc3RDaGlsZElkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwUmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICBncm91cFJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkTWFwLnNldChsYXN0Q2hpbGRJZCwgZ3JvdXBSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBSZWNvcmRzLnVuc2hpZnQoZ3JvdXBCeVJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVjb3Jkc1dpdGhTdW1tYXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRGVsZXRlZFJlY29yZChncmlkLCBkYXRhKSB7XG4gICAgICAgIGlmICghZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVsZXRlZFJvd3MgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRUcmFuc2FjdGlvbkxvZygpLmZpbHRlcih0ID0+IHQudHlwZSA9PT0gJ2RlbGV0ZScpLm1hcCh0ID0+IHQuaWQpO1xuICAgICAgICBkZWxldGVkUm93cy5mb3JFYWNoKHJvd0lEID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0gZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YS5tYXAocmVjID0+IHJlY1tncmlkLnByaW1hcnlLZXldKSA6IGRhdGE7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRlbXBEYXRhLmluZGV4T2Yocm93SUQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbn1cbiJdfQ==