UNPKG

ngx-table-powerfull

Version:

Table with catalog of functionalities for free use based on the ngx-datatable component and other components

108 lines 22.2 kB
import * as tslib_1 from "tslib"; import { Component, Inject, ViewEncapsulation } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { ActionColumnType } from '../../common/actionsColumn.type'; import { FunctionTypes } from '../../models/sumaryColumn.model'; import { ColumnTableModel } from '../../models/columnTable.model'; let EditColumnDialogComponent = class EditColumnDialogComponent { constructor(dialogRef, data) { this.dialogRef = dialogRef; this.data = data; this.nameColumn = ''; this.predefinedText = '-'; this.numberColumns = []; this.column = 1; this.functions = FunctionTypes; this.applyFunctions = new Array(FunctionTypes.length); this.unitsFunctions = new Array(FunctionTypes.length); this.editable = false; switch (this.data.action) { case ActionColumnType.ADD: this.numberColumns = new Array(this.data.nColumns); this.positionColumn = this.data.nColumns; this.title = this.data.config.language.newColumn; this.editable = true; break; case ActionColumnType.EDIT: this.columns = this.data.columns; this.nameColumn = this.columns[0]['name']; this.numberColumns = new Array(this.columns.length); this.positionColumn = 1; this.title = this.data.config.language.editColumn; this.checkFunctionColumn(); this.editable = this.isEditable(); break; case ActionColumnType.DELETE: this.columns = this.data.columns; this.title = this.data.config.language.deleteColumn; break; default: this.close(); } } changeColumn() { if (this.data.action === ActionColumnType.EDIT) { this.nameColumn = this.columns[this.column - 1]['name']; this.positionColumn = this.column; } this.applyFunctions = new Array(FunctionTypes.length); this.unitsFunctions = new Array(FunctionTypes.length); this.checkFunctionColumn(); this.editable = this.isEditable(); } onSubmit() { switch (this.data.action) { case ActionColumnType.ADD: this.dialogRef.close({ name: this.nameColumn.trim(), predefined: this.predefinedText, position: this.positionColumn, functions: this.applyFunctions, unitsFuntions: this.unitsFunctions, editable: this.editable }); break; case ActionColumnType.EDIT: this.dialogRef.close({ name: this.nameColumn.trim(), column: this.column, newPosition: this.positionColumn, functions: this.applyFunctions, unitsFuntions: this.unitsFunctions, editable: this.editable }); break; case ActionColumnType.DELETE: this.dialogRef.close({ column: this.column }); break; default: this.close(); } } isEditable() { return new ColumnTableModel(this.columns[this.column - 1]).editable; } checkFunctionColumn() { const sumary = new ColumnTableModel(this.columns[this.column - 1]).sumary; if (!!sumary.length) { sumary.forEach(s => { if (s.type != null) { this.functions.forEach((f) => { if (f.type === s.type) { this.applyFunctions[s.type] = true; this.unitsFunctions[s.type] = s.unit; } }); } }); } else { this.applyFunctions = new Array(FunctionTypes.length); this.unitsFunctions = new Array(FunctionTypes.length); } } close() { this.dialogRef.close(); } }; EditColumnDialogComponent.ctorParameters = () => [ { type: MatDialogRef }, { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] } ]; EditColumnDialogComponent = tslib_1.__decorate([ Component({ selector: 'edit-column-dialog-component', template: "<header class=\"header-title\">{{ title }}</header>\r\n<!-- <title class=\"title\" mat-dialog-title>{{ title }}</title> -->\r\n\r\n<mat-dialog-content *ngIf=\"data.config.classTable === 'boostrap'\"> \r\n\r\n <div *ngIf=\"data.action === 1 || data.action === 2\" class=\"form-group\">\r\n\r\n <label for=\"name\">{{ data.config.language.name }}</label>\r\n <input id=\"name\" name=\"name\" class=\"form-control\" required\r\n [(ngModel)]=\"nameColumn\" #name=\"ngModel\" />\r\n\r\n <label *ngIf=\"data.action === 1\" for=\"textN\" style=\"margin-top: 20px;\">{{ data.config.language.predefinedContent }}</label>\r\n <input *ngIf=\"data.action === 1\" id=\"textN\" name=\"textN\" class=\"form-control\" required\r\n [(ngModel)]=\"predefinedText\" #name=\"ngModel\" />\r\n\r\n <label for=\"position\" style=\"margin-top: 20px;\">{{ (data.action === 1) ? data.config.language.position : data.config.language.newPosition }}</label>\r\n <select id=\"position\" name=\"position\" class=\"form-control\" required\r\n [(ngModel)]=\"positionColumn\" #name=\"ngModel\">\r\n <option *ngFor=\"let c of numberColumns; let i = index\" [value]=\"i + 1\">{{ i + 1}}</option>\r\n </select>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"data.action === 3|| data.action === 2\" class=\"form-group\">\r\n\r\n <label for=\"col\">{{ data.config.language.column }}</label>\r\n <select id=\"col\" name=\"col\" class=\"form-control\" required\r\n [(ngModel)]=\"column\" #name=\"ngModel\" (change)=\"changeColumn()\">\r\n <option *ngFor=\"let c of columns; let i = index\" [value]=\"i + 1\">{{ c.name }}</option>\r\n </select>\r\n\r\n </div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-content *ngIf=\"data.config.classTable === 'material'\"> \r\n\r\n <div *ngIf=\"data.action === 1 || data.action === 2\">\r\n\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ data.config.language.name }}</mat-label>\r\n <input matInput id=\"name\" name=\"name\" [(ngModel)]=\"nameColumn\" #name=\"ngModel\">\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"data.action === 1\" class=\"col-12\" style=\"margin-top: 20px;\">\r\n <mat-label>{{ data.config.language.predefinedContent }}</mat-label>\r\n <input matInput id=\"textN\" name=\"textN\" [(ngModel)]=\"predefinedText\" #name=\"ngModel\">\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-12\" style=\"margin-top: 20px;\">\r\n <mat-label>{{ (data.action === 1) ? data.config.language.position : data.config.language.newPosition }}</mat-label>\r\n <mat-select id=\"position\" name=\"position\" [(ngModel)]=\"positionColumn\" #name=\"ngModel\">\r\n <mat-option *ngFor=\"let c of numberColumns; let i = index\" [value]=\"i + 1\">\r\n {{ i + 1 }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"data.action === 3|| data.action === 2\" class=\"form-group\">\r\n\r\n <mat-form-field class=\"col-12\" style=\"margin-top: 20px;\">\r\n <mat-label>{{ data.config.language.column }}</mat-label>\r\n <mat-select id=\"col\" name=\"col\" [(ngModel)]=\"column\" #name=\"ngModel\" (selectionChange)=\"changeColumn()\">\r\n <mat-option *ngFor=\"let c of columns; let i = index\" [value]=\"i + 1\">\r\n {{ c.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-content [style.marginLeft]=\"(data.config.classTable === 'material') ? '-10px' : '-20px'\">\r\n\r\n <div *ngIf=\"data.action === 1 || data.action === 2\">\r\n <mat-checkbox [color]=\"'primary'\" [(ngModel)]=\"editable\">{{ data.config.language.editable }}</mat-checkbox>\r\n </div>\r\n\r\n <div *ngIf=\"data.action === 1 || data.action === 2\">\r\n <label for=\"position\" style=\"margin-top: 20px;\">{{ data.config.language.applyFunction }}:</label>\r\n <table>\r\n <tr *ngFor=\"let f of functions; let i = index\">\r\n <td><mat-checkbox [color]=\"'primary'\" [(ngModel)]=\"applyFunctions[i]\">{{ data.config.language[f.name] }}</mat-checkbox></td>\r\n <td class=\"unit\">\r\n <div *ngIf=\"data.config.classTable === 'boostrap'\" class=\"row\">\r\n <div class=\"unit-text\">{{ data.config.language.units }} </div>\r\n <input id=\"unit\" name=\"unit\" class=\"form-control\" [(ngModel)]=\"unitsFunctions[i]\" style=\"width: 70px;\" [disabled]=\"!applyFunctions[i]\"/>\r\n </div>\r\n\r\n <mat-form-field *ngIf=\"data.config.classTable === 'material'\" style=\"width: 70px;\">\r\n <mat-label>{{ data.config.language.units }}</mat-label>\r\n <input matInput id=\"unit\" name=\"unit\" [(ngModel)]=\"unitsFunctions[i]\" #name=\"ngModel\" [disabled]=\"!applyFunctions[i]\">\r\n </mat-form-field>\r\n\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions class=\"footer-actions\" style=\"float: right;\">\r\n\r\n <button mat-button (click)=\"close()\">{{ data.config.language.close }}</button>\r\n <button mat-button class=\"btn btnPrimary\" (click)=\"onSubmit()\">{{ data.config.language.accept }}</button>\r\n\r\n</mat-dialog-actions>", encapsulation: ViewEncapsulation.None, styles: [".unit{font-size:16px;padding-left:40px}.unit-text{margin-right:10px;margin-top:8px}.header-title{padding:15px .5rem .5rem 25px;font-size:1.5rem;background:#efefef;margin:-25px 0 20px -25px!important;width:40vw}.footer-actions{background:#efefef;width:40vw;padding:1rem 20px 1rem 1rem!important;margin-left:-25px!important;margin-right:-24px;margin-top:20px;display:flex;justify-content:flex-end}"] }), tslib_1.__param(1, Inject(MAT_DIALOG_DATA)) ], EditColumnDialogComponent); export { EditColumnDialogComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdENvbHVtbkRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGFibGUtcG93ZXJmdWxsLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZWRpdENvbHVtbkRpYWxvZy9lZGl0Q29sdW1uRGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFRbEUsSUFBYSx5QkFBeUIsR0FBdEMsTUFBYSx5QkFBeUI7SUFhcEMsWUFDUyxTQUFrRCxFQUN6QixJQUFTO1FBRGxDLGNBQVMsR0FBVCxTQUFTLENBQXlDO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQUs7UUFibEMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixtQkFBYyxHQUFXLEdBQUcsQ0FBQztRQUM3QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUczQixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLGNBQVMsR0FBVSxhQUFhLENBQUM7UUFDakMsbUJBQWMsR0FBYyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsbUJBQWMsR0FBYSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8vQixRQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBRXRCLEtBQUssZ0JBQWdCLENBQUMsR0FBRztn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SUFBSSxDQUFDOzRCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO3lCQUN4QztvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FFSixDQUFBOztZQW5HcUIsWUFBWTs0Q0FDN0IsTUFBTSxTQUFDLGVBQWU7O0FBZmQseUJBQXlCO0lBTnJDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSw4QkFBOEI7UUFDeEMsMGhMQUFnRDtRQUVoRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7S0FDdEMsQ0FBQztJQWdCRyxtQkFBQSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7R0FmZix5QkFBeUIsQ0FpSHJDO1NBakhZLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcclxuaW1wb3J0IHsgQWN0aW9uQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9hY3Rpb25zQ29sdW1uLnR5cGUnO1xyXG5pbXBvcnQgeyBGdW5jdGlvblR5cGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N1bWFyeUNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IENvbHVtblRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sdW1uVGFibGUubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlZGl0LWNvbHVtbi1kaWFsb2ctY29tcG9uZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdENvbHVtbkRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdENvbHVtbkRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRDb2x1bW5EaWFsb2dDb21wb25lbnQge1xyXG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbmFtZUNvbHVtbjogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgcHJlZGVmaW5lZFRleHQ6IHN0cmluZyA9ICctJztcclxuICAgIHB1YmxpYyBudW1iZXJDb2x1bW5zOiAgYW55W10gPSBbXTtcclxuICAgIHB1YmxpYyBwb3NpdGlvbkNvbHVtbjogbnVtYmVyO1xyXG4gICAgcHVibGljIGNvbHVtbnM6IE9iamVjdFtdO1xyXG4gICAgcHVibGljIGNvbHVtbjogbnVtYmVyID0gMTtcclxuICAgIHB1YmxpYyBmdW5jdGlvbnM6IGFueVtdID0gRnVuY3Rpb25UeXBlcztcclxuICAgIHB1YmxpYyBhcHBseUZ1bmN0aW9uczogYm9vbGVhbltdID0gbmV3IEFycmF5KEZ1bmN0aW9uVHlwZXMubGVuZ3RoKTtcclxuICAgIHB1YmxpYyB1bml0c0Z1bmN0aW9uczogc3RyaW5nW10gPSBuZXcgQXJyYXkoRnVuY3Rpb25UeXBlcy5sZW5ndGgpO1xyXG4gICAgcHVibGljIGVkaXRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEVkaXRDb2x1bW5EaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXHJcbiAgICApe1xyXG5cclxuICAgICAgc3dpdGNoKHRoaXMuZGF0YS5hY3Rpb24pe1xyXG5cclxuICAgICAgICBjYXNlIEFjdGlvbkNvbHVtblR5cGUuQUREOlxyXG4gICAgICAgICAgdGhpcy5udW1iZXJDb2x1bW5zID0gbmV3IEFycmF5KHRoaXMuZGF0YS5uQ29sdW1ucyk7XHJcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uQ29sdW1uID0gdGhpcy5kYXRhLm5Db2x1bW5zO1xyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuZGF0YS5jb25maWcubGFuZ3VhZ2UubmV3Q29sdW1uO1xyXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBBY3Rpb25Db2x1bW5UeXBlLkVESVQ6XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmRhdGEuY29sdW1ucztcclxuICAgICAgICAgIHRoaXMubmFtZUNvbHVtbiA9IHRoaXMuY29sdW1uc1swXVsnbmFtZSddO1xyXG4gICAgICAgICAgdGhpcy5udW1iZXJDb2x1bW5zID0gbmV3IEFycmF5KHRoaXMuY29sdW1ucy5sZW5ndGgpO1xyXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbkNvbHVtbiA9IDE7XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5kYXRhLmNvbmZpZy5sYW5ndWFnZS5lZGl0Q29sdW1uO1xyXG4gICAgICAgICAgdGhpcy5jaGVja0Z1bmN0aW9uQ29sdW1uKCk7XHJcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlID0gdGhpcy5pc0VkaXRhYmxlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgXHJcbiAgICAgICAgY2FzZSBBY3Rpb25Db2x1bW5UeXBlLkRFTEVURTpcclxuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZGF0YS5jb2x1bW5zO1xyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuZGF0YS5jb25maWcubGFuZ3VhZ2UuZGVsZXRlQ29sdW1uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlQ29sdW1uKCl7XHJcblxyXG4gICAgICBpZih0aGlzLmRhdGEuYWN0aW9uID09PSBBY3Rpb25Db2x1bW5UeXBlLkVESVQpIHsgXHJcbiAgICAgICAgdGhpcy5uYW1lQ29sdW1uID0gdGhpcy5jb2x1bW5zW3RoaXMuY29sdW1uIC0gMV1bJ25hbWUnXTtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uQ29sdW1uID0gdGhpcy5jb2x1bW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYXBwbHlGdW5jdGlvbnMgPSBuZXcgQXJyYXkoRnVuY3Rpb25UeXBlcy5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnVuaXRzRnVuY3Rpb25zID0gbmV3IEFycmF5KEZ1bmN0aW9uVHlwZXMubGVuZ3RoKTtcclxuICAgICAgdGhpcy5jaGVja0Z1bmN0aW9uQ29sdW1uKCk7XHJcbiAgICAgIHRoaXMuZWRpdGFibGUgPSB0aGlzLmlzRWRpdGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TdWJtaXQoKXtcclxuXHJcbiAgICAgIHN3aXRjaCh0aGlzLmRhdGEuYWN0aW9uKXtcclxuXHJcbiAgICAgICAgY2FzZSBBY3Rpb25Db2x1bW5UeXBlLkFERDpcclxuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbmFtZTp0aGlzLm5hbWVDb2x1bW4udHJpbSgpLCBwcmVkZWZpbmVkOiB0aGlzLnByZWRlZmluZWRUZXh0LCBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbkNvbHVtbiwgZnVuY3Rpb25zOiB0aGlzLmFwcGx5RnVuY3Rpb25zLCB1bml0c0Z1bnRpb25zOiB0aGlzLnVuaXRzRnVuY3Rpb25zLCBlZGl0YWJsZTogdGhpcy5lZGl0YWJsZSB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEFjdGlvbkNvbHVtblR5cGUuRURJVDpcclxuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbmFtZTp0aGlzLm5hbWVDb2x1bW4udHJpbSgpLCBjb2x1bW46IHRoaXMuY29sdW1uLCBuZXdQb3NpdGlvbjogdGhpcy5wb3NpdGlvbkNvbHVtbiwgZnVuY3Rpb25zOiB0aGlzLmFwcGx5RnVuY3Rpb25zLCB1bml0c0Z1bnRpb25zOiB0aGlzLnVuaXRzRnVuY3Rpb25zLCBlZGl0YWJsZTogdGhpcy5lZGl0YWJsZX0pOyBcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgY2FzZSBBY3Rpb25Db2x1bW5UeXBlLkRFTEVURTpcclxuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgY29sdW1uOiB0aGlzLmNvbHVtbn0pOyBcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNFZGl0YWJsZSgpOiBib29sZWFue1xyXG4gICAgICByZXR1cm4gbmV3IENvbHVtblRhYmxlTW9kZWwodGhpcy5jb2x1bW5zW3RoaXMuY29sdW1uIC0gMV0pLmVkaXRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja0Z1bmN0aW9uQ29sdW1uKCl7XHJcblxyXG4gICAgICBjb25zdCBzdW1hcnkgPSBuZXcgQ29sdW1uVGFibGVNb2RlbCh0aGlzLmNvbHVtbnNbdGhpcy5jb2x1bW4gLSAxXSkuc3VtYXJ5O1xyXG4gICAgICBpZighIXN1bWFyeS5sZW5ndGgpe1xyXG4gICAgICAgIHN1bWFyeS5mb3JFYWNoKCBzID0+IHtcclxuICAgICAgICAgIGlmKHMudHlwZSAhPSBudWxsKXtcclxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMuZm9yRWFjaCgoZikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKGYudHlwZSA9PT0gcy50eXBlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZ1bmN0aW9uc1tzLnR5cGVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51bml0c0Z1bmN0aW9uc1tzLnR5cGVdID0gcy51bml0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZ1bmN0aW9ucyA9IG5ldyBBcnJheShGdW5jdGlvblR5cGVzLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51bml0c0Z1bmN0aW9ucyA9IG5ldyBBcnJheShGdW5jdGlvblR5cGVzLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2UoKXtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbn0iXX0=