@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
197 lines • 19.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, OnDestroy } from '@angular/core';
import { IgxColumnHidingItemDirective } from './column-hiding-item.directive';
import { ColumnChooserBaseDirective } from '../column-chooser-base';
import { takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
let IgxColumnHidingComponent = class IgxColumnHidingComponent extends ColumnChooserBaseDirective {
constructor(cdr) {
super(cdr);
this.cdr = cdr;
/**
* Sets/gets the text of the button that shows all columns if they are hidden.
* ```typescript
* let showAllButtonText = this.columnHiding.showAllText;
* ```
*
* ```html
* <igx-column-hiding [showAllText] = "'Show Columns'"></igx-column-hiding>
* ```
* @memberof IgxColumnHidingComponent
*/
this.showAllText = 'Show All';
/**
* Sets/gets the text of the button that hides all columns if they are shown.
* ```typescript
* let hideAllButtonText = this.columnHiding.hideAllText;
* ```
*
* ```html
* <igx-column-hiding [hideAllText] = "'Hide Columns'"></igx-column-hiding>
* ```
* @memberof IgxColumnHidingComponent
*/
this.hideAllText = 'Hide All';
/**
* An event that is emitted after the columns visibility is changed.
* Provides references to the `column` and the `newValue` properties as event arguments.
* ```html
* <igx-column-hiding (onColumnVisibilityChanged) = "onColumnVisibilityChanged($event)"></igx-column-hiding>
* ```
* @memberof IgxColumnHidingComponent
*/
this.onColumnVisibilityChanged = new EventEmitter();
this.destroy$ = new Subject();
}
/**
* Returns a boolean indicating whether the `HIDE ALL` button is disabled.
* ```html
* <igx-column-hiding #columnHidingUI
* [columns]="grid.columns" [title]="'Column Hiding'">
* </igx-column-hiding>
* ```
* ```typescript
* @ViewChild("'columnHidingUI'")
* public columnHiding: IgxColumnHidingComponent;
* let isHideAlldisabled = this.columnHiding.disableHideAll;
* ```
*@memberof IgxColumnHidingComponent
*/
get disableHideAll() {
if (!this.columnItems || this.columnItems.length < 1 ||
this.hiddenColumnsCount === this.columns.length) {
return true;
}
else if (this.hidableColumns.length < 1 ||
this.hidableColumns.length === this.hidableColumns.filter((col) => col.value).length) {
return true;
}
else {
return false;
}
}
/**
* Returns a boolean indicating whether the `SHOW ALL` button is disabled.
* ```typescript
* let isShowAlldisabled = this.columnHiding.disableShowAll;
* ```
* @memberof IgxColumnHidingComponent
*/
get disableShowAll() {
if (!this.columnItems || this.columnItems.length < 1 ||
this.hiddenColumnsCount < 1 || this.hidableColumns.length < 1) {
return true;
}
else if (this.hidableColumns.length === this.hidableColumns.filter((col) => !col.value).length) {
return true;
}
else {
return false;
}
}
/**
* Gets the count of the hidden columns.
* ```typescript
* let hiddenColumnsCount = this.columnHiding.hiddenColumnsCount;
* ```
* @memberof IgxColumnHidingComponent
*/
get hiddenColumnsCount() {
return (this.columns) ? this.columns.filter((col) => col.hidden).length : 0;
}
/**
*@hidden
*/
get hidableColumns() {
return this.columnItems.filter((col) => !col.disabled);
}
/**
*@hidden
*/
createColumnItem(container, column) {
if (column.grid.hasColumnLayouts && !column.columnLayout) {
return null;
}
const item = new IgxColumnHidingItemDirective();
item.container = container;
item.column = column;
item.valueChanged.pipe(takeUntil(this.destroy$)).subscribe((args) => {
this.onVisibilityChanged({ column: item.column, newValue: args.newValue });
});
return item;
}
/**
* Shows all columns in the grid.
* ```typescript
* this.columnHiding.showAllColumns();
* ```
* @memberof IgxColumnHidingComponent
*/
showAllColumns() {
const collection = this.hidableColumns;
for (const col of collection) {
col.value = false;
}
}
/**
* Hides all columns in the grid.
* ```typescript
* this.columnHiding.hideAllColumns();
* ```
* @memberof IgxColumnHidingComponent
*/
hideAllColumns() {
const collection = this.hidableColumns;
for (const col of collection) {
col.value = true;
}
}
/**
* @hidden
*/
onVisibilityChanged(args) {
this.onColumnVisibilityChanged.emit(args);
}
/**
*@hidden
*/
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
};
IgxColumnHidingComponent.ctorParameters = () => [
{ type: ChangeDetectorRef }
];
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxColumnHidingComponent.prototype, "disableHideAll", null);
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxColumnHidingComponent.prototype, "disableShowAll", null);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxColumnHidingComponent.prototype, "showAllText", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxColumnHidingComponent.prototype, "hideAllText", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxColumnHidingComponent.prototype, "onColumnVisibilityChanged", void 0);
IgxColumnHidingComponent = __decorate([
Component({
preserveWhitespaces: false,
selector: 'igx-column-hiding',
template: "<div class=\"igx-column-hiding__header\">\n <h4 class=\"igx-column-hiding__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-hiding__header-input\" *ngIf=\"!disableFilter\">\n <input igxInput\n type=\"text\"\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-hiding__columns\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let columnItem of hidableColumns\"\n class=\"igx-column-hiding__columns-item\"\n (onColumnVisibilityChanged)=\"onVisibilityChanged($event)\"\n (change)=\"columnItem.value = !columnItem.value\"\n [checked]=\"columnItem.value\"\n [disabled]=\"columnItem.disabled\"\n [style.margin-left.px]=\"columnItem.calcIndent\">\n {{ columnItem.name }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-hiding__buttons\">\n <button igxButton igxRipple (click)=\"showAllColumns()\" [disabled]=\"disableShowAll\">{{ showAllText }}</button>\n <button igxButton igxRipple (click)=\"hideAllColumns()\" [disabled]=\"disableHideAll\">{{ hideAllText }}</button>\n</div>\n"
}),
__metadata("design:paramtypes", [ChangeDetectorRef])
], IgxColumnHidingComponent);
export { IgxColumnHidingComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhpZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZGluZy9jb2x1bW4taGlkaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8vQixJQUFhLHdCQUF3QixHQUFyQyxNQUFhLHdCQUF5QixTQUFRLDBCQUEwQjtJQTRGcEUsWUFBbUIsR0FBc0I7UUFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBREksUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQ3pDOzs7Ozs7Ozs7O1dBVUc7UUFFSSxnQkFBVyxHQUFHLFVBQVUsQ0FBQztRQUNoQzs7Ozs7Ozs7OztXQVVHO1FBRUksZ0JBQVcsR0FBRyxVQUFVLENBQUM7UUFDaEM7Ozs7Ozs7V0FPRztRQUVJLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO1FBdUJqRixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQVQxQyxDQUFDO0lBN0ZEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFFSCxJQUFJLGNBQWM7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2hELElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLENB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QUMxQixHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFDRDs7T0FFRztJQUNJLG1CQUFtQixDQUFDLElBQXVDO1FBQzlELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNKLENBQUE7O1lBckUyQixpQkFBaUI7O0FBNUV6QztJQURDLEtBQUssRUFBRTs7OzhEQVdQO0FBU0Q7SUFEQyxLQUFLLEVBQUU7Ozs4REFVUDtBQWFEO0lBREMsS0FBSyxFQUFFOzs2REFDd0I7QUFhaEM7SUFEQyxLQUFLLEVBQUU7OzZEQUN3QjtBQVVoQztJQURDLE1BQU0sRUFBRTs7MkVBQ2dGO0FBaEZoRix3QkFBd0I7SUFMcEMsU0FBUyxDQUFDO1FBQ1AsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLHd3Q0FBNkM7S0FDaEQsQ0FBQztxQ0E2RjBCLGlCQUFpQjtHQTVGaEMsd0JBQXdCLENBaUtwQztTQWpLWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncywgSWd4Q29sdW1uSGlkaW5nSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vY29sdW1uLWhpZGluZy1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb2x1bW5DaG9vc2VyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2NvbHVtbi1jaG9vc2VyLWJhc2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1jb2x1bW4taGlkaW5nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLWhpZGluZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uQ2hvb3NlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhJREUgQUxMYCBidXR0b24gaXMgZGlzYWJsZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uLWhpZGluZyAjY29sdW1uSGlkaW5nVUlcbiAgICAgKiAgICAgW2NvbHVtbnNdPVwiZ3JpZC5jb2x1bW5zXCIgW3RpdGxlXT1cIidDb2x1bW4gSGlkaW5nJ1wiPlxuICAgICAqIDwvaWd4LWNvbHVtbi1oaWRpbmc+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCInY29sdW1uSGlkaW5nVUknXCIpXG4gICAgICogcHVibGljIGNvbHVtbkhpZGluZzogSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50O1xuICAgICAqIGxldCBpc0hpZGVBbGxkaXNhYmxlZCA9ICB0aGlzLmNvbHVtbkhpZGluZy5kaXNhYmxlSGlkZUFsbDtcbiAgICAgKiBgYGBcbiAgICAgKkBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlSGlkZUFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbkl0ZW1zIHx8IHRoaXMuY29sdW1uSXRlbXMubGVuZ3RoIDwgMSB8fFxuICAgICAgICAgICAgdGhpcy5oaWRkZW5Db2x1bW5zQ291bnQgPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGlkYWJsZUNvbHVtbnMubGVuZ3RoIDwgMSB8fFxuICAgICAgICAgICAgdGhpcy5oaWRhYmxlQ29sdW1ucy5sZW5ndGggPT09IHRoaXMuaGlkYWJsZUNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC52YWx1ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBTSE9XIEFMTGAgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNTaG93QWxsZGlzYWJsZWQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuZGlzYWJsZVNob3dBbGw7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpc2FibGVTaG93QWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uSXRlbXMgfHwgdGhpcy5jb2x1bW5JdGVtcy5sZW5ndGggPCAxIHx8XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkNvbHVtbnNDb3VudCA8IDEgfHwgdGhpcy5oaWRhYmxlQ29sdW1ucy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhpZGFibGVDb2x1bW5zLmxlbmd0aCA9PT0gdGhpcy5oaWRhYmxlQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gIWNvbC52YWx1ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IHNob3dzIGFsbCBjb2x1bW5zIGlmIHRoZXkgYXJlIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNob3dBbGxCdXR0b25UZXh0ID0gIHRoaXMuY29sdW1uSGlkaW5nLnNob3dBbGxUZXh0O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uLWhpZGluZyBbc2hvd0FsbFRleHRdID0gXCInU2hvdyBDb2x1bW5zJ1wiPjwvaWd4LWNvbHVtbi1oaWRpbmc+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dBbGxUZXh0ID0gJ1Nob3cgQWxsJztcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IGhpZGVzIGFsbCBjb2x1bW5zIGlmIHRoZXkgYXJlIHNob3duLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaGlkZUFsbEJ1dHRvblRleHQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuaGlkZUFsbFRleHQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4taGlkaW5nIFtoaWRlQWxsVGV4dF0gPSBcIidIaWRlIENvbHVtbnMnXCI+PC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZUFsbFRleHQgPSAnSGlkZSBBbGwnO1xuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgY29sdW1ucyB2aXNpYmlsaXR5IGlzIGNoYW5nZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYGNvbHVtbmAgYW5kIHRoZSBgbmV3VmFsdWVgIHByb3BlcnRpZXMgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1jb2x1bW4taGlkaW5nIChvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkKSA9IFwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncz4oKTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb3VudCBvZiB0aGUgaGlkZGVuIGNvbHVtbnMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRkZW5Db2x1bW5zQ291bnQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuaGlkZGVuQ29sdW1uc0NvdW50O1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhpZGRlbkNvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNvbHVtbnMpID8gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuaGlkZGVuKS5sZW5ndGggOiAwO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKGNkcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBoaWRhYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uSXRlbXMuZmlsdGVyKChjb2wpID0+ICFjb2wuZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5JdGVtKGNvbnRhaW5lcjogYW55LCBjb2x1bW46IGFueSkge1xuICAgICAgICBpZiAoY29sdW1uLmdyaWQuaGFzQ29sdW1uTGF5b3V0cyAmJiAhY29sdW1uLmNvbHVtbkxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBJZ3hDb2x1bW5IaWRpbmdJdGVtRGlyZWN0aXZlKCk7XG4gICAgICAgIGl0ZW0uY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICBpdGVtLmNvbHVtbiA9IGNvbHVtbjtcblxuICAgICAgICBpdGVtLnZhbHVlQ2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQoeyBjb2x1bW46IGl0ZW0uY29sdW1uLCBuZXdWYWx1ZTogYXJncy5uZXdWYWx1ZSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNob3dzIGFsbCBjb2x1bW5zIGluIHRoZSBncmlkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkhpZGluZy5zaG93QWxsQ29sdW1ucygpO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0FsbENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmhpZGFibGVDb2x1bW5zO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb2wudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIaWRlcyBhbGwgY29sdW1ucyBpbiB0aGUgZ3JpZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb2x1bW5IaWRpbmcuaGlkZUFsbENvbHVtbnMoKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGhpZGVBbGxDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5oaWRhYmxlQ29sdW1ucztcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgY29sLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uVmlzaWJpbGl0eUNoYW5nZWQoYXJnczogSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMub25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5lbWl0KGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuXG4iXX0=