ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
178 lines • 22.5 kB
JavaScript
import { Directive, EventEmitter, Output } from '@angular/core';
import { MatSort } from '@angular/material/sort';
import { Codes } from '../../../../util/codes';
import { Util } from '../../../../util/util';
import * as i0 from "@angular/core";
export class OMatSort extends MatSort {
constructor() {
super(...arguments);
this.activeArray = [];
this.directionById = {};
this.oSortChange = new EventEmitter();
}
set oMatSortColumns(value) {
this.restart();
this.setTableInfo(value);
}
setMultipleSort(val) {
this.multipleSort = val;
}
getSortColumns() {
const activeData = [];
this.activeArray.forEach((s) => {
activeData.push({
id: s.id,
direction: this.directionById[s.id]
});
});
return activeData;
}
setSortColumns(sortColArray) {
this.restart();
this.setTableInfo(sortColArray);
}
restart() {
this.activeArray = [];
this.directionById = {};
}
setTableInfo(sortColArray) {
sortColArray.forEach((colData) => {
const sortDirection = colData.ascendent ? Codes.ASC_SORT : Codes.DESC_SORT;
this.activeArray.push({
id: colData.columnName,
start: sortDirection,
disableClear: false
});
this.directionById[colData.columnName] = sortDirection;
});
}
addSortColumn(sortable) {
if (this.isActive(sortable)) {
this.direction = this.directionById[sortable.id];
this.directionById[sortable.id] = this.getNextSortDirection(sortable);
this.direction = '';
if (this.directionById[sortable.id] === '') {
this.deleteSortColumn(sortable.id);
}
}
else {
if (!this.multipleSort) {
this.activeArray = [];
this.directionById = {};
}
this.activeArray.push(sortable);
this.directionById[sortable.id] = sortable.start ? sortable.start : this.start;
}
const activeData = this.getSortColumns();
this._stateChanges.next(void 0);
this.oSortChange.emit(activeData);
}
deleteSortColumn(id) {
delete this.directionById[id];
const index = this.activeArray.findIndex(element => element.id === id);
if (index > -1) {
this.activeArray.splice(index, 1);
}
}
isActive(sortable) {
return Util.isDefined(this.activeArray.find((s) => sortable.id === s.id));
}
hasDirection(id) {
let direction;
if (Util.isDefined(this.directionById[id])) {
direction = this.directionById[id];
}
return (direction === 'asc' || direction === 'desc');
}
getSortedDataBySQLOrder(data, sqlOrderArray) {
this.setSortColumns(sqlOrderArray);
return this.getSortedData(data);
}
getSortedData(data) {
const sortColumns = this.getSortColumns();
if (sortColumns.length === 0 || data.length === 0) {
return data;
}
this.sortables.forEach((value, key) => {
this.deregister(value);
});
return this.sortByColumns(data, sortColumns);
}
sortByColumns(data, sortColumns) {
const sortFunctionBind = this.sortFunction.bind(this);
for (let i = 0, len = sortColumns.length; i < len; i++) {
const sortC = sortColumns[i];
this.activeSortColumn = sortC.id;
this.activeSortDirection = sortC.direction;
if (i === 0) {
data = data.sort(sortFunctionBind);
}
else {
const groupedData = this.getDataGrouped(data, sortColumns, i);
if (groupedData.length >= data.length) {
break;
}
data = this.sortGroupedData(groupedData);
}
}
return data;
}
getDataGrouped(data, sortColumns, index) {
const propArr = [];
sortColumns.forEach((item, i) => {
if (i < index) {
propArr.push(item.id);
}
});
if (propArr.length === 0) {
return data;
}
const result = [];
data.forEach(item => {
let value = '';
propArr.forEach(prop => {
value += item[prop];
});
const filtered = result.filter(resItem => resItem.key === value);
if (filtered.length === 0) {
result.push({
key: value,
values: [item]
});
}
else if (filtered.length === 1) {
filtered[0].values.push(item);
}
});
return result;
}
sortGroupedData(groupedData) {
const self = this;
return groupedData.reduce((obj, item) => {
const arr = item.values;
const sorted = arr.length <= 1 ? arr : arr.sort(self.sortFunction.bind(self));
obj.push(...sorted);
return obj;
}, []);
}
sortFunction(a, b) {
let propertyA = '';
let propertyB = '';
[propertyA, propertyB] = [a[this.activeSortColumn], b[this.activeSortColumn]];
return Util.sortFunction(propertyA, propertyB, this.activeSortDirection);
}
}
OMatSort.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OMatSort, deps: null, target: i0.ɵɵFactoryTarget.Directive });
OMatSort.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OMatSort, selector: "[oMatSort]", inputs: { disabled: ["oMatSortDisabled", "disabled"], oMatSortColumns: "oMatSortColumns" }, outputs: { oSortChange: "matSortChange" }, exportAs: ["oMatSort"], usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OMatSort, decorators: [{
type: Directive,
args: [{
selector: '[oMatSort]',
exportAs: 'oMatSort',
inputs: ['disabled: oMatSortDisabled', 'oMatSortColumns']
}]
}], propDecorators: { oSortChange: [{
type: Output,
args: ['matSortChange']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1tYXQtc29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvc29ydC9vLW1hdC1zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFlLE1BQU0sd0JBQXdCLENBQUM7QUFHOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFZN0MsTUFBTSxPQUFPLFFBQVMsU0FBUSxPQUFPO0lBTHJDOztRQU9FLGdCQUFXLEdBQXVCLEVBQUUsQ0FBQztRQUNyQyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQU9mLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7S0F5S25FO0lBdktDLElBQUksZUFBZSxDQUFDLEtBQWlCO1FBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFZO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBYyxFQUFFLEVBQUU7WUFDMUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDcEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQU0sRUFBRSxDQUFNO1FBQ3pCLElBQUksU0FBUyxHQUFvQixFQUFFLENBQUM7UUFDcEMsSUFBSSxTQUFTLEdBQW9CLEVBQUUsQ0FBQztRQUNwQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzRSxDQUFDOztzR0FqTFUsUUFBUTswRkFBUixRQUFROzRGQUFSLFFBQVE7a0JBTHBCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixNQUFNLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxpQkFBaUIsQ0FBQztpQkFDMUQ7OEJBV1UsV0FBVztzQkFEbkIsTUFBTTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5cbmV4cG9ydCB0eXBlIE9NYXRTb3J0R3JvdXBlZERhdGEgPSB7XG4gIGtleTogYW55O1xuICB2YWx1ZXM6IGFueVtdO1xufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW29NYXRTb3J0XScsXG4gIGV4cG9ydEFzOiAnb01hdFNvcnQnLFxuICBpbnB1dHM6IFsnZGlzYWJsZWQ6IG9NYXRTb3J0RGlzYWJsZWQnLCAnb01hdFNvcnRDb2x1bW5zJ11cbn0pXG5leHBvcnQgY2xhc3MgT01hdFNvcnQgZXh0ZW5kcyBNYXRTb3J0IHtcblxuICBhY3RpdmVBcnJheTogQXJyYXk8TWF0U29ydGFibGU+ID0gW107XG4gIGRpcmVjdGlvbkJ5SWQ6IGFueSA9IHt9O1xuXG4gIHByb3RlY3RlZCBtdWx0aXBsZVNvcnQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBhY3RpdmVTb3J0Q29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhY3RpdmVTb3J0RGlyZWN0aW9uOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgnbWF0U29ydENoYW5nZScpXG4gIHJlYWRvbmx5IG9Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHNldCBvTWF0U29ydENvbHVtbnModmFsdWU6IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICB0aGlzLnNldFRhYmxlSW5mbyh2YWx1ZSk7XG4gIH1cblxuICBzZXRNdWx0aXBsZVNvcnQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5tdWx0aXBsZVNvcnQgPSB2YWw7XG4gIH1cblxuICBnZXRTb3J0Q29sdW1ucygpOiBhbnlbXSB7XG4gICAgY29uc3QgYWN0aXZlRGF0YSA9IFtdO1xuICAgIHRoaXMuYWN0aXZlQXJyYXkuZm9yRWFjaCgoczogTWF0U29ydGFibGUpID0+IHtcbiAgICAgIGFjdGl2ZURhdGEucHVzaCh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uQnlJZFtzLmlkXVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZURhdGE7XG4gIH1cblxuICBzZXRTb3J0Q29sdW1ucyhzb3J0Q29sQXJyYXk6IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICB0aGlzLnNldFRhYmxlSW5mbyhzb3J0Q29sQXJyYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0YXJ0KCkge1xuICAgIHRoaXMuYWN0aXZlQXJyYXkgPSBbXTtcbiAgICB0aGlzLmRpcmVjdGlvbkJ5SWQgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRUYWJsZUluZm8oc29ydENvbEFycmF5OiBBcnJheTxTUUxPcmRlcj4pIHtcblxuICAgIHNvcnRDb2xBcnJheS5mb3JFYWNoKChjb2xEYXRhOiBTUUxPcmRlcikgPT4ge1xuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbjogYW55ID0gY29sRGF0YS5hc2NlbmRlbnQgPyBDb2Rlcy5BU0NfU09SVCA6IENvZGVzLkRFU0NfU09SVDtcbiAgICAgIHRoaXMuYWN0aXZlQXJyYXkucHVzaCh7XG4gICAgICAgIGlkOiBjb2xEYXRhLmNvbHVtbk5hbWUsXG4gICAgICAgIHN0YXJ0OiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICBkaXNhYmxlQ2xlYXI6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uQnlJZFtjb2xEYXRhLmNvbHVtbk5hbWVdID0gc29ydERpcmVjdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNvcnRDb2x1bW4oc29ydGFibGU6IE1hdFNvcnRhYmxlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUoc29ydGFibGUpKSB7XG4gICAgICAvLyB3b3JrYXJvdW5kIGZvciBoYXZpbmcgYSBwcm9wcGVyIHdvcmsgaW4gZ2V0TmV4dFNvcnREaXJlY3Rpb247XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uQnlJZFtzb3J0YWJsZS5pZF07XG4gICAgICB0aGlzLmRpcmVjdGlvbkJ5SWRbc29ydGFibGUuaWRdID0gdGhpcy5nZXROZXh0U29ydERpcmVjdGlvbihzb3J0YWJsZSk7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9ICcnO1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uQnlJZFtzb3J0YWJsZS5pZF0gPT09ICcnKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlU29ydENvbHVtbihzb3J0YWJsZS5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZVNvcnQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVBcnJheSA9IFtdO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkJ5SWQgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlQXJyYXkucHVzaChzb3J0YWJsZSk7XG4gICAgICB0aGlzLmRpcmVjdGlvbkJ5SWRbc29ydGFibGUuaWRdID0gc29ydGFibGUuc3RhcnQgPyBzb3J0YWJsZS5zdGFydCA6IHRoaXMuc3RhcnQ7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZURhdGEgPSB0aGlzLmdldFNvcnRDb2x1bW5zKCk7XG4gICAgdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodm9pZCAwKTtcbiAgICB0aGlzLm9Tb3J0Q2hhbmdlLmVtaXQoYWN0aXZlRGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlU29ydENvbHVtbihpZDogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuZGlyZWN0aW9uQnlJZFtpZF07XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmFjdGl2ZUFycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGlkKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5hY3RpdmVBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGlzQWN0aXZlKHNvcnRhYmxlOiBNYXRTb3J0YWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLmFjdGl2ZUFycmF5LmZpbmQoKHM6IE1hdFNvcnRhYmxlKSA9PiBzb3J0YWJsZS5pZCA9PT0gcy5pZCkpO1xuICB9XG5cbiAgaGFzRGlyZWN0aW9uKGlkOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgZGlyZWN0aW9uO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRpcmVjdGlvbkJ5SWRbaWRdKSkge1xuICAgICAgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb25CeUlkW2lkXTtcbiAgICB9XG4gICAgcmV0dXJuIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKTtcbiAgfVxuXG4gIGdldFNvcnRlZERhdGFCeVNRTE9yZGVyKGRhdGE6IGFueVtdLCBzcWxPcmRlckFycmF5OiBTUUxPcmRlcltdKTogYW55W10ge1xuICAgIHRoaXMuc2V0U29ydENvbHVtbnMoc3FsT3JkZXJBcnJheSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U29ydGVkRGF0YShkYXRhKTtcbiAgfVxuXG4gIGdldFNvcnRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qgc29ydENvbHVtbnMgPSB0aGlzLmdldFNvcnRDb2x1bW5zKCk7XG4gICAgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA9PT0gMCB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMuc29ydGFibGVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHRoaXMuZGVyZWdpc3Rlcih2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29ydEJ5Q29sdW1ucyhkYXRhLCBzb3J0Q29sdW1ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydEJ5Q29sdW1ucyhkYXRhOiBhbnlbXSwgc29ydENvbHVtbnM6IGFueVtdKSB7XG4gICAgY29uc3Qgc29ydEZ1bmN0aW9uQmluZCA9IHRoaXMuc29ydEZ1bmN0aW9uLmJpbmQodGhpcyk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNvcnRDb2x1bW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBzb3J0QyA9IHNvcnRDb2x1bW5zW2ldO1xuICAgICAgdGhpcy5hY3RpdmVTb3J0Q29sdW1uID0gc29ydEMuaWQ7XG4gICAgICB0aGlzLmFjdGl2ZVNvcnREaXJlY3Rpb24gPSBzb3J0Qy5kaXJlY3Rpb247XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBkYXRhID0gZGF0YS5zb3J0KHNvcnRGdW5jdGlvbkJpbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZERhdGE6IE9NYXRTb3J0R3JvdXBlZERhdGFbXSA9IHRoaXMuZ2V0RGF0YUdyb3VwZWQoZGF0YSwgc29ydENvbHVtbnMsIGkpO1xuICAgICAgICBpZiAoZ3JvdXBlZERhdGEubGVuZ3RoID49IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YSA9IHRoaXMuc29ydEdyb3VwZWREYXRhKGdyb3VwZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0YUdyb3VwZWQoZGF0YTogYW55LCBzb3J0Q29sdW1uczogYW55W10sIGluZGV4OiBudW1iZXIpOiBPTWF0U29ydEdyb3VwZWREYXRhW10ge1xuICAgIGNvbnN0IHByb3BBcnIgPSBbXTtcbiAgICBzb3J0Q29sdW1ucy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGluZGV4KSB7XG4gICAgICAgIHByb3BBcnIucHVzaChpdGVtLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocHJvcEFyci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IE9NYXRTb3J0R3JvdXBlZERhdGFbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgcHJvcEFyci5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICB2YWx1ZSArPSBpdGVtW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gcmVzdWx0LmZpbHRlcihyZXNJdGVtID0+IHJlc0l0ZW0ua2V5ID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBrZXk6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlczogW2l0ZW1dXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmlsdGVyZWRbMF0udmFsdWVzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0R3JvdXBlZERhdGEoZ3JvdXBlZERhdGE6IE9NYXRTb3J0R3JvdXBlZERhdGFbXSk6IGFueVtdIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gZ3JvdXBlZERhdGEucmVkdWNlKChvYmo6IGFueSwgaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBpdGVtLnZhbHVlcztcbiAgICAgIGNvbnN0IHNvcnRlZCA9IGFyci5sZW5ndGggPD0gMSA/IGFyciA6IGFyci5zb3J0KHNlbGYuc29ydEZ1bmN0aW9uLmJpbmQoc2VsZikpO1xuICAgICAgb2JqLnB1c2goLi4uc29ydGVkKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgc29ydEZ1bmN0aW9uKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcbiAgICBsZXQgcHJvcGVydHlBOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcbiAgICBsZXQgcHJvcGVydHlCOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcbiAgICBbcHJvcGVydHlBLCBwcm9wZXJ0eUJdID0gW2FbdGhpcy5hY3RpdmVTb3J0Q29sdW1uXSwgYlt0aGlzLmFjdGl2ZVNvcnRDb2x1bW5dXTtcbiAgICByZXR1cm4gVXRpbC5zb3J0RnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIsIHRoaXMuYWN0aXZlU29ydERpcmVjdGlvbik7XG4gIH1cblxufVxuIl19