UNPKG

ngx-mat-dropdown

Version:
337 lines 26.6 kB
/** * @fileoverview added by tsickle * Generated from: lib/mat-dropdown.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, } from "@angular/core"; import { FormControl } from "@angular/forms"; import { MatSelect } from "@angular/material/select"; import { ReplaySubject, Subject } from "rxjs"; import { take, takeUntil } from "rxjs/operators"; import { DropdownSettingsModel } from "./dropdown-settings.model"; var MatDropdownComponent = /** @class */ (function () { function MatDropdownComponent() { this.dropdownCtrl = new FormControl(); this.appearance = "outline"; /** * control for the MatSelect filter keyword */ this.FilterCtrl = new FormControl(); this.dropdownList = []; this.onselectItems = new EventEmitter(); this.filteredBanks = new ReplaySubject(1); /** * Subject that emits when the component has been destroyed. */ this._onDestroy = new Subject(); } Object.defineProperty(MatDropdownComponent.prototype, "dropdownDisabled", { set: /** * @param {?} isTrue * @return {?} */ function (isTrue) { if (isTrue) { this.dropdownCtrl.disable(); } else { this.dropdownCtrl.enable(); } }, enumerable: true, configurable: true }); Object.defineProperty(MatDropdownComponent.prototype, "getdropdownList", { set: /** * @param {?} list * @return {?} */ function (list) { if (list) { this.dropdownList = list; this.filteredBanks.next(list.slice()); } else { } }, enumerable: true, configurable: true }); Object.defineProperty(MatDropdownComponent.prototype, "onselect", { set: /** * @param {?} evt * @return {?} */ function (evt) { if (evt) { this.selectedItems = evt; // console.log(evt, this.preBind); this.dropdownCtrl.setValue(evt); } else { if (this.dropdownSettings.multiple) { this.selectedItems = []; } else this.selectedItems = null; this.dropdownCtrl.setValue(evt); } }, enumerable: true, configurable: true }); /** * @return {?} */ MatDropdownComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; // set intial value // listen for search field value changes this.FilterCtrl.valueChanges .pipe(takeUntil(this._onDestroy)) .subscribe((/** * @return {?} */ function () { /** @type {?} */ var evt = _this.FilterCtrl.value; _this._filter(evt); })); }; /** * @private * @param {?} evt * @return {?} */ MatDropdownComponent.prototype._filter = /** * @private * @param {?} evt * @return {?} */ function (evt) { var _this = this; if (evt) this.filteredBanks.next(this.dropdownList.filter((/** * @param {?} x * @return {?} */ function (x) { return x[_this.dropdownSettings.labelKey] .toLowerCase() .includes(evt.val.toLowerCase()); }))); else this.filteredBanks.next(this.dropdownList.slice()); }; /** * @return {?} */ MatDropdownComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { //this.dropdownCtrl.setValue(this.selectedItems); if (!this.dropdownSettings.multiple) this.setInitialValue(); }; /** * @return {?} */ MatDropdownComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this._onDestroy.next(); this._onDestroy.complete(); }; /** * @private * @return {?} */ MatDropdownComponent.prototype.setInitialValue = /** * @private * @return {?} */ function () { var _this = this; this.filteredBanks .pipe(take(1), takeUntil(this._onDestroy)) .subscribe((/** * @return {?} */ function () { _this.singleSelect.compareWith = (/** * @param {?} a * @param {?} b * @return {?} */ function (a, b) { if (a && b) return (a[_this.dropdownSettings.keyValue] === b[_this.dropdownSettings.keyValue]); }); })); }; /** * @param {?} evt * @return {?} */ MatDropdownComponent.prototype.OnSelectedEvent = /** * @param {?} evt * @return {?} */ function (evt) { this.onselectItems.emit(evt.source); //if (evt.isUserInput) { // this.onselectItems.emit(evt.source); //} else { // this.onselectItems.emit({ value: null }); //} }; // multi // multi /** * @param {?} checked * @return {?} */ MatDropdownComponent.prototype.AllClicked = // multi /** * @param {?} checked * @return {?} */ function (checked) { //console.log(checked, this.multidropdownCtrl) if (checked.checked) { // this.multidropdownCtrl.patchValue([...this.dropdownList.map(item => item.key), 0]); /** @type {?} */ var items = this.dropdownList.map((/** * @param {?} item * @return {?} */ function (item) { return item; })); this.dropdownCtrl.setValue(items); } else { // this.multidropdownCtrl.patchValue([]); this.dropdownCtrl.setValue([]); } this.onselectItems.emit(this.dropdownCtrl); }; /** * @param {?} check * @return {?} */ MatDropdownComponent.prototype.ischecked = /** * @param {?} check * @return {?} */ function (check) { /** @type {?} */ var selected = this.dropdownCtrl.value; return (this.dropdownList && selected && selected.length > 0 && this.dropdownList.length == selected.length); }; /** * @return {?} */ MatDropdownComponent.prototype.isIndeterminate = /** * @return {?} */ function () { /** @type {?} */ var selected = this.dropdownCtrl.value; return (this.dropdownList && selected && selected.length > 0 && selected.length < this.dropdownList.length); }; /** * @return {?} */ MatDropdownComponent.prototype.openedChange = /** * @return {?} */ function () { if (!this.innerSelectAll || !this.innerSelectAll.nativeElement) { return; } /** @type {?} */ var SelectAllElement = this.innerSelectAll.nativeElement; /** @type {?} */ var SelectAllPanelElement; while ((SelectAllElement = SelectAllElement.parentElement)) { if (SelectAllElement.classList.contains("mat-select-panel")) { SelectAllPanelElement = SelectAllElement; break; } } if (SelectAllPanelElement) { this.innerSelectAll.nativeElement.style.width = SelectAllPanelElement.clientWidth + "px"; /** @type {?} */ var children = this.innerSelectAll.nativeElement.childNodes; //if (children) // children[0].childNodes[0].style.width = SelectallpanelElement.clientWidth + 'px'; } }; MatDropdownComponent.decorators = [ { type: Component, args: [{ selector: "ngx-mat-dropdown", template: "<mat-form-field appearance=\"{{appearance}}\">\r\n <mat-label>{{dropdownSettings?.placeholder}}</mat-label>\r\n <mat-select disableOptionCentering [formControl]=\"dropdownCtrl\" [attr.id]=\"dropdownSettings?.id\" \r\n (selectionChange)=\"OnSelectedEvent($event)\"\r\n [placeholder]=\"dropdownSettings.placeholder \" \r\n #singleSelect [multiple]=\"dropdownSettings?.multiple\" \r\n matTooltip=\"{{selectedItems ? selectedItems[dropdownSettings.labelKey] : ''}}\"\r\n [multiple]=\"dropdownSettings?.multiple\">\r\n <mat-select-search [formControl]=\"FilterCtrl\" [multiple]=\"dropdownSettings?.multiple\" *ngIf=\"dropdownList.length > 5\"></mat-select-search>\r\n <div #innerSelectall [style.top.px]=\"dropdownList?.length <= 5 ? 0 : 44\" class=\"mat-select-all-inner\" *ngIf=\"dropdownList?.length !== 0 && dropdownSettings.multiple\" >\r\n <mat-checkbox class=\"mat-option mat-select-checkbox\" [disableRipple]=\"true\" [indeterminate]=\"isIndeterminate()\" [checked]=\"ischecked(check)\" (change)=\"AllClicked($event)\" #check>\r\n {{ check.checked ? ('Unselect All' ) : ('Select All' ) }}\r\n </mat-checkbox>\r\n </div>\r\n <mat-option *ngIf=\"dropdownList.length && !dropdownSettings.multiple\">None</mat-option>\r\n <mat-option *ngFor=\"let item of filteredBanks | async\" [value]=\"item\" \r\n matTooltip=\"{{item[dropdownSettings.labelKey]}}\">\r\n {{ item[dropdownSettings.labelKey] }}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>", styles: ["\n .mat-select-all-inner {\n position: absolute;\n top: 52px;\n width: calc(100% + 3px);\n \n background: white;\n z-index: 100;\n font-size: inherit;\n box-shadow: none;\n border-radius: 0;\n -webkit-transform: translate3d(0,0,0);\n}\n\n "] }] } ]; /** @nocollapse */ MatDropdownComponent.ctorParameters = function () { return []; }; MatDropdownComponent.propDecorators = { dropdownCtrl: [{ type: Input, args: ["ctrl",] }], appearance: [{ type: Input }], dropdownSettings: [{ type: Input, args: ["dropdownSettings",] }], dropdownDisabled: [{ type: Input, args: ["disabled",] }], getdropdownList: [{ type: Input, args: ["dropdownList",] }], onselect: [{ type: Input, args: ["selectedItems",] }], onselectItems: [{ type: Output, args: ["onselectItems",] }], singleSelect: [{ type: ViewChild, args: ["singleSelect", { read: ElementRef },] }], innerSelectAll: [{ type: ViewChild, args: ["innerSelectall", { read: ElementRef, static: true },] }] }; return MatDropdownComponent; }()); export { MatDropdownComponent }; if (false) { /** @type {?} */ MatDropdownComponent.prototype.dropdownCtrl; /** @type {?} */ MatDropdownComponent.prototype.appearance; /** * control for the MatSelect filter keyword * @type {?} */ MatDropdownComponent.prototype.FilterCtrl; /** @type {?} */ MatDropdownComponent.prototype.dropdownSettings; /** @type {?} */ MatDropdownComponent.prototype.dropdownList; /** @type {?} */ MatDropdownComponent.prototype.selectedItems; /** @type {?} */ MatDropdownComponent.prototype.onselectItems; /** @type {?} */ MatDropdownComponent.prototype.filteredBanks; /** @type {?} */ MatDropdownComponent.prototype.singleSelect; /** @type {?} */ MatDropdownComponent.prototype.innerSelectAll; /** * Subject that emits when the component has been destroyed. * @type {?} * @private */ MatDropdownComponent.prototype._onDestroy; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXQtZHJvcGRvd24vIiwic291cmNlcyI6WyJsaWIvbWF0LWRyb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEU7SUF5RUU7UUFwRE8saUJBQVksR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxlQUFVLEdBQVcsU0FBUyxDQUFDOzs7O1FBRWpDLGVBQVUsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQWNuRCxpQkFBWSxHQUFlLEVBQUUsQ0FBQztRQXdCTCxrQkFBYSxHQUVsQyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXhCLGtCQUFhLEdBQXlCLElBQUksYUFBYSxDQUFRLENBQUMsQ0FBQyxDQUFDOzs7O1FBS2pFLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRTFCLENBQUM7SUE1Q2hCLHNCQUNJLGtEQUFnQjs7Ozs7UUFEcEIsVUFDcUIsTUFBZTtZQUNsQyxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENB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YXJCLE1BQU0sU0FBQyxlQUFlOytCQUt0QixTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtpQ0FDOUMsU0FBUyxTQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztJQW1IakUsMkJBQUM7Q0FBQSxBQXZMRCxJQXVMQztTQXBLWSxvQkFBb0I7OztJQUMvQiw0Q0FDcUQ7O0lBQ3JELDBDQUF3Qzs7Ozs7SUFFeEMsMENBQW1EOztJQUVuRCxnREFDd0M7O0lBV3hDLDRDQUE4Qjs7SUFVOUIsNkNBQW1COztJQWNuQiw2Q0FFK0I7O0lBRS9CLDZDQUF5RTs7SUFDekUsNENBQXlFOztJQUN6RSw4Q0FDMkI7Ozs7OztJQUUzQiwwQ0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IERyb3Bkb3duU2V0dGluZ3NNb2RlbCB9IGZyb20gXCIuL2Ryb3Bkb3duLXNldHRpbmdzLm1vZGVsXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJuZ3gtbWF0LWRyb3Bkb3duXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbWF0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlczogW2BcbiAgLm1hdC1zZWxlY3QtYWxsLWlubmVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MnB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzcHgpO1xuICAgIFxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLDAsMCk7XG59XG5cbiAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KFwiY3RybFwiKVxuICBwdWJsaWMgZHJvcGRvd25DdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBzdHJpbmcgPSBcIm91dGxpbmVcIjtcbiAgLyoqIGNvbnRyb2wgZm9yIHRoZSBNYXRTZWxlY3QgZmlsdGVyIGtleXdvcmQgKi9cbiAgcHVibGljIEZpbHRlckN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgQElucHV0KFwiZHJvcGRvd25TZXR0aW5nc1wiKVxuICBkcm9wZG93blNldHRpbmdzOiBEcm9wZG93blNldHRpbmdzTW9kZWw7XG5cbiAgQElucHV0KFwiZGlzYWJsZWRcIilcbiAgc2V0IGRyb3Bkb3duRGlzYWJsZWQoaXNUcnVlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzVHJ1ZSkge1xuICAgICAgdGhpcy5kcm9wZG93bkN0cmwuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3Bkb3duQ3RybC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBkcm9wZG93bkxpc3Q6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KFwiZHJvcGRvd25MaXN0XCIpXG4gIHNldCBnZXRkcm9wZG93bkxpc3QobGlzdDogYW55KSB7XG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25MaXN0ID0gbGlzdDtcbiAgICAgIHRoaXMuZmlsdGVyZWRCYW5rcy5uZXh0KGxpc3Quc2xpY2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RlZEl0ZW1zOiBhbnk7XG4gIEBJbnB1dChcInNlbGVjdGVkSXRlbXNcIilcbiAgc2V0IG9uc2VsZWN0KGV2dCkge1xuICAgIGlmIChldnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGV2dDtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGV2dCwgdGhpcy5wcmVCaW5kKTtcbiAgICAgIHRoaXMuZHJvcGRvd25DdHJsLnNldFZhbHVlKGV2dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmRyb3Bkb3duU2V0dGluZ3MubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICB9IGVsc2UgdGhpcy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcbiAgICAgIHRoaXMuZHJvcGRvd25DdHJsLnNldFZhbHVlKGV2dCk7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoXCJvbnNlbGVjdEl0ZW1zXCIpIG9uc2VsZWN0SXRlbXM6IEV2ZW50RW1pdHRlcjxcbiAgICBPYmplY3RcbiAgPiA9IG5ldyBFdmVudEVtaXR0ZXI8T2JqZWN0PigpO1xuXG4gIHB1YmxpYyBmaWx0ZXJlZEJhbmtzOiBSZXBsYXlTdWJqZWN0PGFueVtdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PGFueVtdPigxKTtcbiAgQFZpZXdDaGlsZChcInNpbmdsZVNlbGVjdFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2luZ2xlU2VsZWN0OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoXCJpbm5lclNlbGVjdGFsbFwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBpbm5lclNlbGVjdEFsbDogRWxlbWVudFJlZjtcbiAgLyoqIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkLiAqL1xuICBwcml2YXRlIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gc2V0IGludGlhbCB2YWx1ZVxuICAgIC8vIGxpc3RlbiBmb3Igc2VhcmNoIGZpZWxkIHZhbHVlIGNoYW5nZXNcbiAgICB0aGlzLkZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBsZXQgZXZ0ID0gdGhpcy5GaWx0ZXJDdHJsLnZhbHVlO1xuICAgICAgICB0aGlzLl9maWx0ZXIoZXZ0KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyKGV2dCkge1xuICAgIGlmIChldnQpXG4gICAgICB0aGlzLmZpbHRlcmVkQmFua3MubmV4dChcbiAgICAgICAgdGhpcy5kcm9wZG93bkxpc3QuZmlsdGVyKCh4KSA9PlxuICAgICAgICAgIHhbdGhpcy5kcm9wZG93blNldHRpbmdzLmxhYmVsS2V5XVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhldnQudmFsLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgZWxzZSB0aGlzLmZpbHRlcmVkQmFua3MubmV4dCh0aGlzLmRyb3Bkb3duTGlzdC5zbGljZSgpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvL3RoaXMuZHJvcGRvd25DdHJsLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICBpZiAoIXRoaXMuZHJvcGRvd25TZXR0aW5ncy5tdWx0aXBsZSkgdGhpcy5zZXRJbml0aWFsVmFsdWUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUoKSB7XG4gICAgdGhpcy5maWx0ZXJlZEJhbmtzXG4gICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNpbmdsZVNlbGVjdC5jb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChhICYmIGIpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBhW3RoaXMuZHJvcGRvd25TZXR0aW5ncy5rZXlWYWx1ZV0gPT09XG4gICAgICAgICAgICAgIGJbdGhpcy5kcm9wZG93blNldHRpbmdzLmtleVZhbHVlXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgT25TZWxlY3RlZEV2ZW50KGV2dCkge1xuICAgIHRoaXMub25zZWxlY3RJdGVtcy5lbWl0KGV2dC5zb3VyY2UpO1xuICAgIC8vaWYgKGV2dC5pc1VzZXJJbnB1dCkge1xuICAgIC8vICAgIHRoaXMub25zZWxlY3RJdGVtcy5lbWl0KGV2dC5zb3VyY2UpO1xuICAgIC8vfSBlbHNlIHtcbiAgICAvLyAgICB0aGlzLm9uc2VsZWN0SXRlbXMuZW1pdCh7IHZhbHVlOiBudWxsIH0pO1xuICAgIC8vfVxuICB9XG5cbiAgLy8gbXVsdGlcbiAgQWxsQ2xpY2tlZChjaGVja2VkKSB7XG4gICAgLy9jb25zb2xlLmxvZyhjaGVja2VkLCB0aGlzLm11bHRpZHJvcGRvd25DdHJsKVxuICAgIGlmIChjaGVja2VkLmNoZWNrZWQpIHtcbiAgICAgIC8vIHRoaXMubXVsdGlkcm9wZG93bkN0cmwucGF0Y2hWYWx1ZShbLi4udGhpcy5kcm9wZG93bkxpc3QubWFwKGl0ZW0gPT4gaXRlbS5rZXkpLCAwXSk7XG4gICAgICBsZXQgaXRlbXMgPSB0aGlzLmRyb3Bkb3duTGlzdC5tYXAoKGl0ZW0pID0+IGl0ZW0pO1xuICAgICAgdGhpcy5kcm9wZG93bkN0cmwuc2V0VmFsdWUoaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLm11bHRpZHJvcGRvd25DdHJsLnBhdGNoVmFsdWUoW10pO1xuICAgICAgdGhpcy5kcm9wZG93bkN0cmwuc2V0VmFsdWUoW10pO1xuICAgIH1cbiAgICB0aGlzLm9uc2VsZWN0SXRlbXMuZW1pdCh0aGlzLmRyb3Bkb3duQ3RybCk7XG4gIH1cbiAgaXNjaGVja2VkKGNoZWNrKTogYm9vbGVhbiB7XG4gICAgbGV0IHNlbGVjdGVkOiBhbnkgPSB0aGlzLmRyb3Bkb3duQ3RybC52YWx1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kcm9wZG93bkxpc3QgJiZcbiAgICAgIHNlbGVjdGVkICYmXG4gICAgICBzZWxlY3RlZC5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmRyb3Bkb3duTGlzdC5sZW5ndGggPT0gc2VsZWN0ZWQubGVuZ3RoXG4gICAgKTtcbiAgfVxuICBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgbGV0IHNlbGVjdGVkOiBhbnkgPSB0aGlzLmRyb3Bkb3duQ3RybC52YWx1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kcm9wZG93bkxpc3QgJiZcbiAgICAgIHNlbGVjdGVkICYmXG4gICAgICBzZWxlY3RlZC5sZW5ndGggPiAwICYmXG4gICAgICBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLmRyb3Bkb3duTGlzdC5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgb3BlbmVkQ2hhbmdlKCkge1xuICAgIFxuICAgIGlmICghdGhpcy5pbm5lclNlbGVjdEFsbCB8fCAhdGhpcy5pbm5lclNlbGVjdEFsbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBTZWxlY3RBbGxFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuaW5uZXJTZWxlY3RBbGwubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgU2VsZWN0QWxsUGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICB3aGlsZSAoKFNlbGVjdEFsbEVsZW1lbnQgPSBTZWxlY3RBbGxFbGVtZW50LnBhcmVudEVsZW1lbnQpKSB7XG4gICAgICBpZiAoU2VsZWN0QWxsRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtYXQtc2VsZWN0LXBhbmVsXCIpKSB7XG4gICAgICAgIFNlbGVjdEFsbFBhbmVsRWxlbWVudCA9IFNlbGVjdEFsbEVsZW1lbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoU2VsZWN0QWxsUGFuZWxFbGVtZW50KSB7XG4gICAgICB0aGlzLmlubmVyU2VsZWN0QWxsLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPVxuICAgICAgICBTZWxlY3RBbGxQYW5lbEVsZW1lbnQuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgICBsZXQgY2hpbGRyZW4gPSB0aGlzLmlubmVyU2VsZWN0QWxsLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcztcbiAgICAgIC8vaWYgKGNoaWxkcmVuKVxuICAgICAgLy8gICAgY2hpbGRyZW5bMF0uY2hpbGROb2Rlc1swXS5zdHlsZS53aWR0aCA9IFNlbGVjdGFsbHBhbmVsRWxlbWVudC5jbGllbnRXaWR0aCArICdweCc7XG4gICAgfVxuICB9XG59XG4iXX0=