UNPKG

@catull/igniteui-angular

Version:

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

146 lines 22.9 kB
import { __decorate } from "tslib"; import { GridBaseAPIService } from '../api.service'; import { DataUtil } from '../../data-operations/data-util'; import { cloneArray } from '../../core/utils'; import { Injectable } from '@angular/core'; let IgxGridAPIService = class IgxGridAPIService extends GridBaseAPIService { groupBy(expression) { const groupingState = cloneArray(this.grid.groupingExpressions); const sortingState = cloneArray(this.grid.sortingExpressions); this.prepare_sorting_expression([sortingState, groupingState], expression); this.grid.groupingExpressions = groupingState; this.arrange_sorting_expressions(); } groupBy_multiple(expressions) { const groupingState = cloneArray(this.grid.groupingExpressions); const sortingState = cloneArray(this.grid.sortingExpressions); for (const each of expressions) { this.prepare_sorting_expression([sortingState, groupingState], each); } this.grid.groupingExpressions = groupingState; this.arrange_sorting_expressions(); } clear_groupby(name) { const groupingState = cloneArray(this.grid.groupingExpressions); const sortingState = cloneArray(this.grid.sortingExpressions); if (name) { const names = typeof name === 'string' ? [name] : name; const groupedCols = groupingState.filter((state) => names.indexOf(state.fieldName) < 0); const newSortingExpr = sortingState.filter((state) => names.indexOf(state.fieldName) < 0); this.grid.groupingExpressions = groupedCols; this.grid.sortingExpressions = newSortingExpr; names.forEach((colName) => { const grExprIndex = groupingState.findIndex((exp) => exp.fieldName === colName); const 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((val) => { return val.hierarchy && val.hierarchy.length <= grExprIndex; }); }); } else { // clear all this.grid.groupingExpressions = []; this.grid.groupingExpansionState = []; for (const grExpr of groupingState) { const sortExprIndex = sortingState.findIndex((exp) => exp.fieldName === grExpr.fieldName); if (sortExprIndex > -1) { sortingState.splice(sortExprIndex, 1); } } this.grid.sortingExpressions = sortingState; } } groupBy_get_expanded_for_group(groupRow) { const grState = this.grid.groupingExpansionState; const hierarchy = DataUtil.getHierarchy(groupRow); return grState.find((state) => DataUtil.isHierarchyMatch(state.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }], hierarchy)); } groupBy_is_row_in_group(groupRow, rowID) { const grid = this.grid; let rowInGroup = false; groupRow.records.forEach(row => { if (grid.primaryKey ? row[grid.primaryKey] === rowID : row === rowID) { rowInGroup = true; } }); return rowInGroup; } groupBy_toggle_group(groupRow) { const grid = this.grid; if (grid.crudService.isInEditMode) { grid.endEdit(true); } const expansionState = grid.groupingExpansionState; const 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 = [...expansionState]; if (grid.rowEditable) { grid.repositionRowEditingOverlay(grid.rowInEditMode); } } groupBy_fully_expand_group(groupRow) { const state = this.groupBy_get_expanded_for_group(groupRow); const expanded = state ? state.expanded : this.grid.groupsExpanded; if (!expanded) { this.groupBy_toggle_group(groupRow); } if (groupRow.groupParent) { this.groupBy_fully_expand_group(groupRow.groupParent); } } remove_grouping_expression(fieldName) { const groupingExpressions = this.grid.groupingExpressions; const index = groupingExpressions.findIndex((expr) => expr.fieldName === fieldName); if (index !== -1) { groupingExpressions.splice(index, 1); } } arrange_sorting_expressions() { const groupingState = this.grid.groupingExpressions; this.grid.sortingExpressions.sort((a, b) => { const groupExprA = groupingState.find((expr) => expr.fieldName === a.fieldName); const groupExprB = groupingState.find((expr) => 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; } }); } get_groupBy_record_id(gRow) { let recordId = '{ '; const hierrarchy = DataUtil.getHierarchy(gRow); for (let i = 0; i < hierrarchy.length; i++) { const groupByKey = hierrarchy[i]; recordId += `'${groupByKey.fieldName}': '${groupByKey.value}'`; if (i < hierrarchy.length - 1) { recordId += ', '; } } recordId += ' }'; return recordId; } }; IgxGridAPIService = __decorate([ Injectable() ], IgxGridAPIService); export { IgxGridAPIService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvZ3JpZC9ncmlkLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBa0IsU0FBUSxrQkFBb0M7SUFFaEUsT0FBTyxDQUFDLFVBQStCO1FBQzFDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUM7UUFDOUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFdBQWtDO1FBQ3RELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU5RCxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRTtZQUM1QixJQUFJ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VSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLFFBQVEsSUFBSSxJQUFJLFVBQVUsQ0FBQyxTQUFTLE9BQU8sVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO1lBRS9ELElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixRQUFRLElBQUksSUFBSSxDQUFDO2FBQ3BCO1NBQ0o7UUFDRCxRQUFRLElBQUksSUFBSSxDQUFDO1FBRWpCLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FFSixDQUFBO0FBckpZLGlCQUFpQjtJQUQ3QixVQUFVLEVBQUU7R0FDQSxpQkFBaUIsQ0FxSjdCO1NBckpZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQVBJU2VydmljZSBleHRlbmRzIEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQ29tcG9uZW50PiB7XG5cbiAgICBwdWJsaWMgZ3JvdXBCeShleHByZXNzaW9uOiBJR3JvdXBpbmdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlX3NvcnRpbmdfZXhwcmVzc2lvbihbc29ydGluZ1N0YXRlLCBncm91cGluZ1N0YXRlXSwgZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdTdGF0ZTtcbiAgICAgICAgdGhpcy5hcnJhbmdlX3NvcnRpbmdfZXhwcmVzc2lvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV9tdWx0aXBsZShleHByZXNzaW9uczogSUdyb3VwaW5nRXhwcmVzc2lvbltdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVhY2ggb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZSwgZ3JvdXBpbmdTdGF0ZV0sIGVhY2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncm91cGluZ1N0YXRlO1xuICAgICAgICB0aGlzLmFycmFuZ2Vfc29ydGluZ19leHByZXNzaW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcl9ncm91cGJ5KG5hbWU/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcblxuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBbIG5hbWUgXSA6IG5hbWU7XG4gICAgICAgICAgICBjb25zdCBncm91cGVkQ29scyA9IGdyb3VwaW5nU3RhdGUuZmlsdGVyKChzdGF0ZSkgPT4gbmFtZXMuaW5kZXhPZihzdGF0ZS5maWVsZE5hbWUpIDwgMCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTb3J0aW5nRXhwciA9IHNvcnRpbmdTdGF0ZS5maWx0ZXIoKHN0YXRlKSA9PiBuYW1lcy5pbmRleE9mKHN0YXRlLmZpZWxkTmFtZSkgPCAwKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBlZENvbHM7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gbmV3U29ydGluZ0V4cHI7XG4gICAgICAgICAgICBuYW1lcy5mb3JFYWNoKChjb2xOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JFeHBySW5kZXggPSBncm91cGluZ1N0YXRlLmZpbmRJbmRleCgoZXhwKSA9PiBleHAuZmllbGROYW1lID09PSBjb2xOYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncnBFeHBhbmRTdGF0ZSA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlO1xuICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBleHBhbnNpb24gc3RhdGVzIHJlbGF0ZWQgdG8gdGhlIGNsZWFyZWQgZ3JvdXBcbiAgICAgICAgICAgICAgICBhbmQgYWxsIHdpdGggZGVlcGVyIGhpZXJhcmNoeSB0aGFuIHRoZSBjbGVhcmVkIGdyb3VwICovXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBncnBFeHBhbmRTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwuaGllcmFyY2h5ICYmIHZhbC5oaWVyYXJjaHkubGVuZ3RoIDw9IGdyRXhwckluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2xlYXIgYWxsXG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JFeHByIG9mIGdyb3VwaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0RXhwckluZGV4ID0gc29ydGluZ1N0YXRlLmZpbmRJbmRleCgoZXhwKSA9PiBleHAuZmllbGROYW1lID09PSBnckV4cHIuZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoc29ydEV4cHJJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5zcGxpY2Uoc29ydEV4cHJJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEJ5X2dldF9leHBhbmRlZF9mb3JfZ3JvdXAoZ3JvdXBSb3c6IElHcm91cEJ5UmVjb3JkKTogSUdyb3VwQnlFeHBhbmRTdGF0ZSB7XG4gICAgICAgIGNvbnN0IGdyU3RhdGUgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gRGF0YVV0aWwuZ2V0SGllcmFyY2h5KGdyb3VwUm93KTtcbiAgICAgICAgcmV0dXJuIGdyU3RhdGUuZmluZCgoc3RhdGUpID0+XG4gICAgICAgICAgICBEYXRhVXRpbC5pc0hpZXJhcmNoeU1hdGNoKHN0YXRlLmhpZXJhcmNoeSB8fCBbeyBmaWVsZE5hbWU6IGdyb3VwUm93LmV4cHJlc3Npb24uZmllbGROYW1lLCB2YWx1ZTogZ3JvdXBSb3cudmFsdWUgfV0sIGhpZXJhcmNoeSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEJ5X2lzX3Jvd19pbl9ncm91cChncm91cFJvdzogSUdyb3VwQnlSZWNvcmQsIHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCByb3dJbkdyb3VwID0gZmFsc2U7XG4gICAgICAgIGdyb3VwUm93LnJlY29yZHMuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgaWYgKGdyaWQucHJpbWFyeUtleSA/IHJvd1tncmlkLnByaW1hcnlLZXldID09PSByb3dJRCA6IHJvdyA9PT0gcm93SUQpIHtcbiAgICAgICAgICAgICAgICByb3dJbkdyb3VwID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb3dJbkdyb3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEJ5X3RvZ2dsZV9ncm91cChncm91cFJvdzogSUdyb3VwQnlSZWNvcmQpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKGdyaWQuY3J1ZFNlcnZpY2UuaXNJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICBncmlkLmVuZEVkaXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZSA9IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgY29uc3Qgc3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGUgPSB0aGlzLmdyb3VwQnlfZ2V0X2V4cGFuZGVkX2Zvcl9ncm91cChncm91cFJvdyk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgc3RhdGUuZXhwYW5kZWQgPSAhc3RhdGUuZXhwYW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBhbnNpb25TdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogIWdyaWQuZ3JvdXBzRXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgaGllcmFyY2h5OiBEYXRhVXRpbC5nZXRIaWVyYXJjaHkoZ3JvdXBSb3cpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZSA9IFsuLi5leHBhbnNpb25TdGF0ZV07XG4gICAgICAgIGlmIChncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICBncmlkLnJlcG9zaXRpb25Sb3dFZGl0aW5nT3ZlcmxheShncmlkLnJvd0luRWRpdE1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwQnlfZnVsbHlfZXhwYW5kX2dyb3VwKGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCkge1xuICAgICAgICBjb25zdCBzdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZSA9IHRoaXMuZ3JvdXBCeV9nZXRfZXhwYW5kZWRfZm9yX2dyb3VwKGdyb3VwUm93KTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBzdGF0ZSA/IHN0YXRlLmV4cGFuZGVkIDogdGhpcy5ncmlkLmdyb3Vwc0V4cGFuZGVkO1xuICAgICAgICBpZiAoIWV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwQnlfdG9nZ2xlX2dyb3VwKGdyb3VwUm93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3JvdXBSb3cuZ3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBCeV9mdWxseV9leHBhbmRfZ3JvdXAoZ3JvdXBSb3cuZ3JvdXBQYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGZpZWxkTmFtZSkge1xuICAgICAgICBjb25zdCBncm91cGluZ0V4cHJlc3Npb25zID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnM7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZ3JvdXBpbmdFeHByZXNzaW9ucy5maW5kSW5kZXgoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBmaWVsZE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXJyYW5nZV9zb3J0aW5nX2V4cHJlc3Npb25zKCkge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnM7XG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByQSA9IGdyb3VwaW5nU3RhdGUuZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGEuZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwckIgPSBncm91cGluZ1N0YXRlLmZpbmQoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lID09PSBiLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICBpZiAoZ3JvdXBFeHByQSAmJiBncm91cEV4cHJCKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwaW5nU3RhdGUuaW5kZXhPZihncm91cEV4cHJBKSA+IGdyb3VwaW5nU3RhdGUuaW5kZXhPZihncm91cEV4cHJCKSA/IDEgOiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBFeHByQSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBFeHByQikge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9ncm91cEJ5X3JlY29yZF9pZChnUm93OiBJR3JvdXBCeVJlY29yZCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZWNvcmRJZCA9ICd7ICc7XG4gICAgICAgIGNvbnN0IGhpZXJyYXJjaHkgPSBEYXRhVXRpbC5nZXRIaWVyYXJjaHkoZ1Jvdyk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoaWVycmFyY2h5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cEJ5S2V5ID0gaGllcnJhcmNoeVtpXTtcbiAgICAgICAgICAgIHJlY29yZElkICs9IGAnJHtncm91cEJ5S2V5LmZpZWxkTmFtZX0nOiAnJHtncm91cEJ5S2V5LnZhbHVlfSdgO1xuXG4gICAgICAgICAgICBpZiAoaSA8IGhpZXJyYXJjaHkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHJlY29yZElkICs9ICcsICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3JkSWQgKz0gJyB9JztcblxuICAgICAgICByZXR1cm4gcmVjb3JkSWQ7XG4gICAgfVxuXG59XG4iXX0=