UNPKG

@catull/igniteui-angular

Version:

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

239 lines 22.6 kB
import { __decorate, __extends, __metadata, __values } 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'; var IgxColumnHidingComponent = /** @class */ (function (_super) { __extends(IgxColumnHidingComponent, _super); function IgxColumnHidingComponent(cdr) { var _this = _super.call(this, cdr) || this; _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(); return _this; } Object.defineProperty(IgxColumnHidingComponent.prototype, "disableHideAll", { /** * 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: function () { 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(function (col) { return col.value; }).length) { return true; } else { return false; } }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnHidingComponent.prototype, "disableShowAll", { /** * Returns a boolean indicating whether the `SHOW ALL` button is disabled. * ```typescript * let isShowAlldisabled = this.columnHiding.disableShowAll; * ``` * @memberof IgxColumnHidingComponent */ get: function () { if (!this.columnItems || this.columnItems.length < 1 || this.hiddenColumnsCount < 1 || this.hidableColumns.length < 1) { return true; } else if (this.hidableColumns.length === this.hidableColumns.filter(function (col) { return !col.value; }).length) { return true; } else { return false; } }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnHidingComponent.prototype, "hiddenColumnsCount", { /** * Gets the count of the hidden columns. * ```typescript * let hiddenColumnsCount = this.columnHiding.hiddenColumnsCount; * ``` * @memberof IgxColumnHidingComponent */ get: function () { return (this.columns) ? this.columns.filter(function (col) { return col.hidden; }).length : 0; }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnHidingComponent.prototype, "hidableColumns", { /** *@hidden */ get: function () { return this.columnItems.filter(function (col) { return !col.disabled; }); }, enumerable: true, configurable: true }); /** *@hidden */ IgxColumnHidingComponent.prototype.createColumnItem = function (container, column) { var _this = this; if (column.grid.hasColumnLayouts && !column.columnLayout) { return null; } var item = new IgxColumnHidingItemDirective(); item.container = container; item.column = column; item.valueChanged.pipe(takeUntil(this.destroy$)).subscribe(function (args) { _this.onVisibilityChanged({ column: item.column, newValue: args.newValue }); }); return item; }; /** * Shows all columns in the grid. * ```typescript * this.columnHiding.showAllColumns(); * ``` * @memberof IgxColumnHidingComponent */ IgxColumnHidingComponent.prototype.showAllColumns = function () { var e_1, _a; var collection = this.hidableColumns; try { for (var collection_1 = __values(collection), collection_1_1 = collection_1.next(); !collection_1_1.done; collection_1_1 = collection_1.next()) { var col = collection_1_1.value; col.value = false; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (collection_1_1 && !collection_1_1.done && (_a = collection_1.return)) _a.call(collection_1); } finally { if (e_1) throw e_1.error; } } }; /** * Hides all columns in the grid. * ```typescript * this.columnHiding.hideAllColumns(); * ``` * @memberof IgxColumnHidingComponent */ IgxColumnHidingComponent.prototype.hideAllColumns = function () { var e_2, _a; var collection = this.hidableColumns; try { for (var collection_2 = __values(collection), collection_2_1 = collection_2.next(); !collection_2_1.done; collection_2_1 = collection_2.next()) { var col = collection_2_1.value; col.value = true; } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (collection_2_1 && !collection_2_1.done && (_a = collection_2.return)) _a.call(collection_2); } finally { if (e_2) throw e_2.error; } } }; /** * @hidden */ IgxColumnHidingComponent.prototype.onVisibilityChanged = function (args) { this.onColumnVisibilityChanged.emit(args); }; /** *@hidden */ IgxColumnHidingComponent.prototype.ngOnDestroy = function () { this.destroy$.next(true); this.destroy$.complete(); }; IgxColumnHidingComponent.ctorParameters = function () { return [ { 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); return IgxColumnHidingComponent; }(ColumnChooserBaseDirective)); export { IgxColumnHidingComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhpZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZGluZy9jb2x1bW4taGlkaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8vQjtJQUE4Qyw0Q0FBMEI7SUE0RnBFLGtDQUFtQixHQUFzQjtRQUF6QyxZQUNJLGtCQUFNLEdBQUcsQ0FBQyxTQUNiO1FBRmtCLFNBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0N6Qzs7Ozs7Ozs7OztXQVVHO1FBRUksaUJBQVcsR0FBRyxVQUFVLENBQUM7UUFDaEM7Ozs7Ozs7Ozs7V0FVRztRQUVJLGlCQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ2hDOzs7Ozs7O1dBT0c7UUFFSSwrQkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQXVCakYsY0FBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7O0lBVDFDLENBQUM7SUE5RUQsc0JBQUksb0RBQWM7UUFmbEI7Ozs7Ozs7Ozs7Ozs7V0FhRzthQUVIO1lBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFB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Q3JCOzs7Ozs7Ozs7SUFDTCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0ksaURBQWMsR0FBckI7O1FBQ0ksSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7WUFDdkMsS0FBa0IsSUFBQSxlQUFBLFNBQUEsVUFBVSxDQUFBLHNDQUFBLDhEQUFFO2dCQUF6QixJQUFNLEdBQUcsdUJBQUE7Z0JBQ1YsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDcEI7Ozs7Ozs7OztJQUNMLENBQUM7SUFDRDs7T0FFRztJQUNJLHNEQUFtQixHQUExQixVQUEyQixJQUF1QztRQUM5RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLDhDQUFXLEdBQWxCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOztnQkFwRXVCLGlCQUFpQjs7SUE1RXpDO1FBREMsS0FBSyxFQUFFOzs7a0VBV1A7SUFTRDtRQURDLEtBQUssRUFBRTs7O2tFQVVQO0lBYUQ7UUFEQyxLQUFLLEVBQUU7O2lFQUN3QjtJQWFoQztRQURDLEtBQUssRUFBRTs7aUVBQ3dCO0lBVWhDO1FBREMsTUFBTSxFQUFFOzsrRUFDZ0Y7SUFoRmhGLHdCQUF3QjtRQUxwQyxTQUFTLENBQUM7WUFDUCxtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0Isd3dDQUE2QztTQUNoRCxDQUFDO3lDQTZGMEIsaUJBQWlCO09BNUZoQyx3QkFBd0IsQ0FpS3BDO0lBQUQsK0JBQUM7Q0FBQSxBQWpLRCxDQUE4QywwQkFBMEIsR0FpS3ZFO1NBaktZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzLCBJZ3hDb2x1bW5IaWRpbmdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4taGlkaW5nLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbHVtbkNob29zZXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vY29sdW1uLWNob29zZXItYmFzZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbHVtbi1oaWRpbmcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4taGlkaW5nLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnQgZXh0ZW5kcyBDb2x1bW5DaG9vc2VyQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBgSElERSBBTExgIGJ1dHRvbiBpcyBkaXNhYmxlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4taGlkaW5nICNjb2x1bW5IaWRpbmdVSVxuICAgICAqICAgICBbY29sdW1uc109XCJncmlkLmNvbHVtbnNcIiBbdGl0bGVdPVwiJ0NvbHVtbiBIaWRpbmcnXCI+XG4gICAgICogPC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIidjb2x1bW5IaWRpbmdVSSdcIilcbiAgICAgKiBwdWJsaWMgY29sdW1uSGlkaW5nOiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnQ7XG4gICAgICogbGV0IGlzSGlkZUFsbGRpc2FibGVkID0gIHRoaXMuY29sdW1uSGlkaW5nLmRpc2FibGVIaWRlQWxsO1xuICAgICAqIGBgYFxuICAgICAqQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpc2FibGVIaWRlQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uSXRlbXMgfHwgdGhpcy5jb2x1bW5JdGVtcy5sZW5ndGggPCAxIHx8XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkNvbHVtbnNDb3VudCA9PT0gdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oaWRhYmxlQ29sdW1ucy5sZW5ndGggPCAxIHx8XG4gICAgICAgICAgICB0aGlzLmhpZGFibGVDb2x1bW5zLmxlbmd0aCA9PT0gdGhpcy5oaWRhYmxlQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnZhbHVlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFNIT1cgQUxMYCBidXR0b24gaXMgZGlzYWJsZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1Nob3dBbGxkaXNhYmxlZCA9ICB0aGlzLmNvbHVtbkhpZGluZy5kaXNhYmxlU2hvd0FsbDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZVNob3dBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5JdGVtcyB8fCB0aGlzLmNvbHVtbkl0ZW1zLmxlbmd0aCA8IDEgfHxcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuQ29sdW1uc0NvdW50IDwgMSB8fCB0aGlzLmhpZGFibGVDb2x1bW5zLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGlkYWJsZUNvbHVtbnMubGVuZ3RoID09PSB0aGlzLmhpZGFibGVDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhY29sLnZhbHVlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHRoYXQgc2hvd3MgYWxsIGNvbHVtbnMgaWYgdGhleSBhcmUgaGlkZGVuLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc2hvd0FsbEJ1dHRvblRleHQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuc2hvd0FsbFRleHQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4taGlkaW5nIFtzaG93QWxsVGV4dF0gPSBcIidTaG93IENvbHVtbnMnXCI+PC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0FsbFRleHQgPSAnU2hvdyBBbGwnO1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHRoYXQgaGlkZXMgYWxsIGNvbHVtbnMgaWYgdGhleSBhcmUgc2hvd24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRlQWxsQnV0dG9uVGV4dCA9ICB0aGlzLmNvbHVtbkhpZGluZy5oaWRlQWxsVGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1oaWRpbmcgW2hpZGVBbGxUZXh0XSA9IFwiJ0hpZGUgQ29sdW1ucydcIj48L2lneC1jb2x1bW4taGlkaW5nPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoaWRlQWxsVGV4dCA9ICdIaWRlIEFsbCc7XG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSBjb2x1bW5zIHZpc2liaWxpdHkgaXMgY2hhbmdlZC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgY29sdW1uYCBhbmQgdGhlIGBuZXdWYWx1ZWAgcHJvcGVydGllcyBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1oaWRpbmcgKG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQpID0gXCJvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkKCRldmVudClcIj48L2lneC1jb2x1bW4taGlkaW5nPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzPigpO1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIHRoZSBoaWRkZW4gY29sdW1ucy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhpZGRlbkNvbHVtbnNDb3VudCA9ICB0aGlzLmNvbHVtbkhpZGluZy5oaWRkZW5Db2x1bW5zQ291bnQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGlkZGVuQ29sdW1uc0NvdW50KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuY29sdW1ucykgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5oaWRkZW4pLmxlbmd0aCA6IDA7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoY2RyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhpZGFibGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JdGVtcy5maWx0ZXIoKGNvbCkgPT4gIWNvbC5kaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbHVtbkl0ZW0oY29udGFpbmVyOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgICAgIGlmIChjb2x1bW4uZ3JpZC5oYXNDb2x1bW5MYXlvdXRzICYmICFjb2x1bW4uY29sdW1uTGF5b3V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtID0gbmV3IElneENvbHVtbkhpZGluZ0l0ZW1EaXJlY3RpdmUoKTtcbiAgICAgICAgaXRlbS5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIGl0ZW0uY29sdW1uID0gY29sdW1uO1xuXG4gICAgICAgIGl0ZW0udmFsdWVDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCh7IGNvbHVtbjogaXRlbS5jb2x1bW4sIG5ld1ZhbHVlOiBhcmdzLm5ld1ZhbHVlIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2hvd3MgYWxsIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uSGlkaW5nLnNob3dBbGxDb2x1bW5zKCk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93QWxsQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuaGlkYWJsZUNvbHVtbnM7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhpZGVzIGFsbCBjb2x1bW5zIGluIHRoZSBncmlkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkhpZGluZy5oaWRlQWxsQ29sdW1ucygpO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZUFsbENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmhpZGFibGVDb2x1bW5zO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb2wudmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25WaXNpYmlsaXR5Q2hhbmdlZChhcmdzOiBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWRFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG5cbiJdfQ==