UNPKG

@catull/igniteui-angular

Version:

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

179 lines 25.2 kB
import { __decorate, __extends, __read, __spread, __values } from "tslib"; import { GridBaseAPIService } from '../api.service'; import { DataUtil } from '../../data-operations/data-util'; import { cloneArray } from '../../core/utils'; import { Injectable } from '@angular/core'; var IgxGridAPIService = /** @class */ (function (_super) { __extends(IgxGridAPIService, _super); function IgxGridAPIService() { return _super !== null && _super.apply(this, arguments) || this; } IgxGridAPIService.prototype.groupBy = function (expression) { var groupingState = cloneArray(this.grid.groupingExpressions); var sortingState = cloneArray(this.grid.sortingExpressions); this.prepare_sorting_expression([sortingState, groupingState], expression); this.grid.groupingExpressions = groupingState; this.arrange_sorting_expressions(); }; IgxGridAPIService.prototype.groupBy_multiple = function (expressions) { var e_1, _a; var groupingState = cloneArray(this.grid.groupingExpressions); var sortingState = cloneArray(this.grid.sortingExpressions); try { for (var expressions_1 = __values(expressions), expressions_1_1 = expressions_1.next(); !expressions_1_1.done; expressions_1_1 = expressions_1.next()) { var each = expressions_1_1.value; this.prepare_sorting_expression([sortingState, groupingState], each); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (expressions_1_1 && !expressions_1_1.done && (_a = expressions_1.return)) _a.call(expressions_1); } finally { if (e_1) throw e_1.error; } } this.grid.groupingExpressions = groupingState; this.arrange_sorting_expressions(); }; IgxGridAPIService.prototype.clear_groupby = function (name) { var e_2, _a; var _this = this; var groupingState = cloneArray(this.grid.groupingExpressions); var sortingState = cloneArray(this.grid.sortingExpressions); if (name) { var names_1 = typeof name === 'string' ? [name] : name; var groupedCols = groupingState.filter(function (state) { return names_1.indexOf(state.fieldName) < 0; }); var newSortingExpr = sortingState.filter(function (state) { return names_1.indexOf(state.fieldName) < 0; }); this.grid.groupingExpressions = groupedCols; this.grid.sortingExpressions = newSortingExpr; names_1.forEach(function (colName) { var grExprIndex = groupingState.findIndex(function (exp) { return exp.fieldName === colName; }); var grpExpandState = _this.grid.groupingExpansionState; /* remove expansion states related to the cleared group and all with deeper hierarchy than the cleared group */ _this.grid.groupingExpansionState = grpExpandState .filter(function (val) { return val.hierarchy && val.hierarchy.length <= grExprIndex; }); }); } else { // clear all this.grid.groupingExpressions = []; this.grid.groupingExpansionState = []; var _loop_1 = function (grExpr) { var sortExprIndex = sortingState.findIndex(function (exp) { return exp.fieldName === grExpr.fieldName; }); if (sortExprIndex > -1) { sortingState.splice(sortExprIndex, 1); } }; try { for (var groupingState_1 = __values(groupingState), groupingState_1_1 = groupingState_1.next(); !groupingState_1_1.done; groupingState_1_1 = groupingState_1.next()) { var grExpr = groupingState_1_1.value; _loop_1(grExpr); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (groupingState_1_1 && !groupingState_1_1.done && (_a = groupingState_1.return)) _a.call(groupingState_1); } finally { if (e_2) throw e_2.error; } } this.grid.sortingExpressions = sortingState; } }; IgxGridAPIService.prototype.groupBy_get_expanded_for_group = function (groupRow) { var grState = this.grid.groupingExpansionState; var hierarchy = DataUtil.getHierarchy(groupRow); return grState.find(function (state) { return DataUtil.isHierarchyMatch(state.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }], hierarchy); }); }; IgxGridAPIService.prototype.groupBy_is_row_in_group = function (groupRow, rowID) { var grid = this.grid; var rowInGroup = false; groupRow.records.forEach(function (row) { if (grid.primaryKey ? row[grid.primaryKey] === rowID : row === rowID) { rowInGroup = true; } }); return rowInGroup; }; IgxGridAPIService.prototype.groupBy_toggle_group = function (groupRow) { var grid = this.grid; if (grid.crudService.isInEditMode) { grid.endEdit(true); } var expansionState = grid.groupingExpansionState; var state = this.groupBy_get_expanded_for_group(groupRow); if (state) { state.expanded = !state.expanded; } else { expansionState.push({ expanded: !grid.groupsExpanded, hierarchy: DataUtil.getHierarchy(groupRow) }); } this.grid.groupingExpansionState = __spread(expansionState); if (grid.rowEditable) { grid.repositionRowEditingOverlay(grid.rowInEditMode); } }; IgxGridAPIService.prototype.groupBy_fully_expand_group = function (groupRow) { var state = this.groupBy_get_expanded_for_group(groupRow); var expanded = state ? state.expanded : this.grid.groupsExpanded; if (!expanded) { this.groupBy_toggle_group(groupRow); } if (groupRow.groupParent) { this.groupBy_fully_expand_group(groupRow.groupParent); } }; IgxGridAPIService.prototype.remove_grouping_expression = function (fieldName) { var groupingExpressions = this.grid.groupingExpressions; var index = groupingExpressions.findIndex(function (expr) { return expr.fieldName === fieldName; }); if (index !== -1) { groupingExpressions.splice(index, 1); } }; IgxGridAPIService.prototype.arrange_sorting_expressions = function () { var groupingState = this.grid.groupingExpressions; this.grid.sortingExpressions.sort(function (a, b) { var groupExprA = groupingState.find(function (expr) { return expr.fieldName === a.fieldName; }); var groupExprB = groupingState.find(function (expr) { return expr.fieldName === b.fieldName; }); if (groupExprA && groupExprB) { return groupingState.indexOf(groupExprA) > groupingState.indexOf(groupExprB) ? 1 : -1; } else if (groupExprA) { return -1; } else if (groupExprB) { return 1; } else { return 0; } }); }; IgxGridAPIService.prototype.get_groupBy_record_id = function (gRow) { var recordId = '{ '; var hierrarchy = DataUtil.getHierarchy(gRow); for (var i = 0; i < hierrarchy.length; i++) { var groupByKey = hierrarchy[i]; recordId += "'" + groupByKey.fieldName + "': '" + groupByKey.value + "'"; if (i < hierrarchy.length - 1) { recordId += ', '; } } recordId += ' }'; return recordId; }; IgxGridAPIService = __decorate([ Injectable() ], IgxGridAPIService); return IgxGridAPIService; }(GridBaseAPIService)); export { IgxGridAPIService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvZ3JpZC9ncmlkLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0M7SUFBdUMscUNBQW9DO0lBQTNFOztJQXFKQSxDQUFDO0lBbkpVLG1DQUFPLEdBQWQsVUFBZSxVQUErQjtRQUMxQyxJQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hFLElBQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1FBQzlDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSw0Q0FBZ0IsR0FBdkIsVUFBd0IsV0FBa0M7O1FBQ3RELElBQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDaEUsSUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7WUFFOUQsS0FBbUIsSUFBQSxnQkFBQSxTQUFBLFdBQVcsQ0FBQSx3Q0FB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QjtRQUM3QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsUUFBUSxJQUFJLE1BQUksVUFBVSxDQUFDLFNBQVMsWUFBTyxVQUFVLENBQUMsS0FBSyxNQUFHLENBQUM7WUFFL0QsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUM7YUFDcEI7U0FDSjtRQUNELFFBQVEsSUFBSSxJQUFJLENBQUM7UUFFakIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQW5KUSxpQkFBaUI7UUFEN0IsVUFBVSxFQUFFO09BQ0EsaUJBQWlCLENBcUo3QjtJQUFELHdCQUFDO0NBQUEsQUFySkQsQ0FBdUMsa0JBQWtCLEdBcUp4RDtTQXJKWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXkgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZEFQSVNlcnZpY2UgZXh0ZW5kcyBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZENvbXBvbmVudD4ge1xuXG4gICAgcHVibGljIGdyb3VwQnkoZXhwcmVzc2lvbjogSUdyb3VwaW5nRXhwcmVzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZSwgZ3JvdXBpbmdTdGF0ZV0sIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nU3RhdGU7XG4gICAgICAgIHRoaXMuYXJyYW5nZV9zb3J0aW5nX2V4cHJlc3Npb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwQnlfbXVsdGlwbGUoZXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlYWNoIG9mIGV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGUsIGdyb3VwaW5nU3RhdGVdLCBlYWNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdTdGF0ZTtcbiAgICAgICAgdGhpcy5hcnJhbmdlX3NvcnRpbmdfZXhwcmVzc2lvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJfZ3JvdXBieShuYW1lPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG5cbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gWyBuYW1lIF0gOiBuYW1lO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHMgPSBncm91cGluZ1N0YXRlLmZpbHRlcigoc3RhdGUpID0+IG5hbWVzLmluZGV4T2Yoc3RhdGUuZmllbGROYW1lKSA8IDApO1xuICAgICAgICAgICAgY29uc3QgbmV3U29ydGluZ0V4cHIgPSBzb3J0aW5nU3RhdGUuZmlsdGVyKChzdGF0ZSkgPT4gbmFtZXMuaW5kZXhPZihzdGF0ZS5maWVsZE5hbWUpIDwgMCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwZWRDb2xzO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IG5ld1NvcnRpbmdFeHByO1xuICAgICAgICAgICAgbmFtZXMuZm9yRWFjaCgoY29sTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyRXhwckluZGV4ID0gZ3JvdXBpbmdTdGF0ZS5maW5kSW5kZXgoKGV4cCkgPT4gZXhwLmZpZWxkTmFtZSA9PT0gY29sTmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JwRXhwYW5kU3RhdGUgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICAvKiByZW1vdmUgZXhwYW5zaW9uIHN0YXRlcyByZWxhdGVkIHRvIHRoZSBjbGVhcmVkIGdyb3VwXG4gICAgICAgICAgICAgICAgYW5kIGFsbCB3aXRoIGRlZXBlciBoaWVyYXJjaHkgdGhhbiB0aGUgY2xlYXJlZCBncm91cCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gZ3JwRXhwYW5kU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLmhpZXJhcmNoeSAmJiB2YWwuaGllcmFyY2h5Lmxlbmd0aCA8PSBnckV4cHJJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGFsbFxuICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyRXhwciBvZiBncm91cGluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydEV4cHJJbmRleCA9IHNvcnRpbmdTdGF0ZS5maW5kSW5kZXgoKGV4cCkgPT4gZXhwLmZpZWxkTmFtZSA9PT0gZ3JFeHByLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNvcnRFeHBySW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nU3RhdGUuc3BsaWNlKHNvcnRFeHBySW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzb3J0aW5nU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV9nZXRfZXhwYW5kZWRfZm9yX2dyb3VwKGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCk6IElHcm91cEJ5RXhwYW5kU3RhdGUge1xuICAgICAgICBjb25zdCBnclN0YXRlID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IERhdGFVdGlsLmdldEhpZXJhcmNoeShncm91cFJvdyk7XG4gICAgICAgIHJldHVybiBnclN0YXRlLmZpbmQoKHN0YXRlKSA9PlxuICAgICAgICAgICAgRGF0YVV0aWwuaXNIaWVyYXJjaHlNYXRjaChzdGF0ZS5oaWVyYXJjaHkgfHwgW3sgZmllbGROYW1lOiBncm91cFJvdy5leHByZXNzaW9uLmZpZWxkTmFtZSwgdmFsdWU6IGdyb3VwUm93LnZhbHVlIH1dLCBoaWVyYXJjaHkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV9pc19yb3dfaW5fZ3JvdXAoZ3JvdXBSb3c6IElHcm91cEJ5UmVjb3JkLCByb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgcm93SW5Hcm91cCA9IGZhbHNlO1xuICAgICAgICBncm91cFJvdy5yZWNvcmRzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkLnByaW1hcnlLZXkgPyByb3dbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQgOiByb3cgPT09IHJvd0lEKSB7XG4gICAgICAgICAgICAgICAgcm93SW5Hcm91cCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93SW5Hcm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV90b2dnbGVfZ3JvdXAoZ3JvdXBSb3c6IElHcm91cEJ5UmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGlmIChncmlkLmNydWRTZXJ2aWNlLmlzSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgZ3JpZC5lbmRFZGl0KHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGUgPSBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHN0YXRlOiBJR3JvdXBCeUV4cGFuZFN0YXRlID0gdGhpcy5ncm91cEJ5X2dldF9leHBhbmRlZF9mb3JfZ3JvdXAoZ3JvdXBSb3cpO1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmV4cGFuZGVkID0gIXN0YXRlLmV4cGFuZGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwYW5zaW9uU3RhdGUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6ICFncmlkLmdyb3Vwc0V4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeTogRGF0YVV0aWwuZ2V0SGllcmFyY2h5KGdyb3VwUm93KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBbLi4uZXhwYW5zaW9uU3RhdGVdO1xuICAgICAgICBpZiAoZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgZ3JpZC5yZXBvc2l0aW9uUm93RWRpdGluZ092ZXJsYXkoZ3JpZC5yb3dJbkVkaXRNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEJ5X2Z1bGx5X2V4cGFuZF9ncm91cChncm91cFJvdzogSUdyb3VwQnlSZWNvcmQpIHtcbiAgICAgICAgY29uc3Qgc3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGUgPSB0aGlzLmdyb3VwQnlfZ2V0X2V4cGFuZGVkX2Zvcl9ncm91cChncm91cFJvdyk7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gc3RhdGUgPyBzdGF0ZS5leHBhbmRlZCA6IHRoaXMuZ3JpZC5ncm91cHNFeHBhbmRlZDtcbiAgICAgICAgaWYgKCFleHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEJ5X3RvZ2dsZV9ncm91cChncm91cFJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwUm93Lmdyb3VwUGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwQnlfZnVsbHlfZXhwYW5kX2dyb3VwKGdyb3VwUm93Lmdyb3VwUGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW1vdmVfZ3JvdXBpbmdfZXhwcmVzc2lvbihmaWVsZE5hbWUpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdFeHByZXNzaW9ucyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBpbmRleCA9IGdyb3VwaW5nRXhwcmVzc2lvbnMuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFycmFuZ2Vfc29ydGluZ19leHByZXNzaW9ucygpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdTdGF0ZSA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zO1xuICAgICAgICB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwckEgPSBncm91cGluZ1N0YXRlLmZpbmQoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBhLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJCID0gZ3JvdXBpbmdTdGF0ZS5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gYi5maWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRXhwckEgJiYgZ3JvdXBFeHByQikge1xuICAgICAgICAgICAgICAgIHJldHVybiBncm91cGluZ1N0YXRlLmluZGV4T2YoZ3JvdXBFeHByQSkgPiBncm91cGluZ1N0YXRlLmluZGV4T2YoZ3JvdXBFeHByQikgPyAxIDogLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwRXhwckEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwRXhwckIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZ3JvdXBCeV9yZWNvcmRfaWQoZ1JvdzogSUdyb3VwQnlSZWNvcmQpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVjb3JkSWQgPSAneyAnO1xuICAgICAgICBjb25zdCBoaWVycmFyY2h5ID0gRGF0YVV0aWwuZ2V0SGllcmFyY2h5KGdSb3cpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGllcnJhcmNoeS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBCeUtleSA9IGhpZXJyYXJjaHlbaV07XG4gICAgICAgICAgICByZWNvcmRJZCArPSBgJyR7Z3JvdXBCeUtleS5maWVsZE5hbWV9JzogJyR7Z3JvdXBCeUtleS52YWx1ZX0nYDtcblxuICAgICAgICAgICAgaWYgKGkgPCBoaWVycmFyY2h5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRJZCArPSAnLCAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlY29yZElkICs9ICcgfSc7XG5cbiAgICAgICAgcmV0dXJuIHJlY29yZElkO1xuICAgIH1cblxufVxuIl19