@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
101 lines • 13.9 kB
JavaScript
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
import { debounceTime, map } from 'rxjs/operators';
import { UserValue } from '../../../data-fields/user-field/models/user-value';
import { AbstractHeaderModeComponent } from '../abstract-header-mode.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
export class AbstractSearchModeComponent extends AbstractHeaderModeComponent {
_dialog;
/**
* The time that must elapse since last keypress in search input before a search request is sent
*/
SEARCH_DEBOUNCE_TIME = 600;
subHeaderColumn;
subClearHeader;
formControls = [];
constructor(_dialog) {
super();
this._dialog = _dialog;
}
ngOnInit() {
this.subHeaderColumn = this.headerService.headerColumnCount$.subscribe(newCount => this.updateHeaderCount(newCount));
this.subClearHeader = this.headerService.clearHeaderSearch$.subscribe(columnNumber => this.clearInput(columnNumber));
}
ngOnDestroy() {
this.subClearHeader.unsubscribe();
this.subHeaderColumn.unsubscribe();
}
/**
* Updates the underlying objects to match the new desired number of columns.
*
* If the new number of columns is greater than the current one, the columns will be filled with default/blank values.
*
* If the new number of columns is smaller than the current one, the superfluous columns will be removed.
*
* @param newCount the new number of columns
*/
updateHeaderCount(newCount) {
if (newCount < this.formControls.length) {
this.formControls = this.formControls.slice(0, newCount);
return;
}
while (this.formControls.length < newCount) {
this.addNewColumn();
}
}
/**
* Adds a new column to the headers search and binds it's FormControl to the service
*/
addNewColumn() {
const formControl = new FormControl();
const i = this.formControls.length;
formControl.valueChanges.pipe(debounceTime(this.SEARCH_DEBOUNCE_TIME), map(value => value instanceof UserValue ? value.id : value)).subscribe(value => {
this.headerService.headerSearchInputChanged(i, value);
});
this.formControls.push(formControl);
}
/**
* Opens a user assign side menu component and sets the selected user as value of the form control object
* that corresponds to the given column.
*
* If no user is selected the value of the corresponding form control si cleared.
* @param column the index of the columns that should have it's form control value set to the selected user
* @param component is the component that we want to open
*/
selectAbstractUser(column, component) {
let valueReturned = false;
const dialogRef = this._dialog.open(component, {
panelClass: "dialog-responsive"
});
dialogRef.afterClosed().subscribe($event => {
if ($event.data) {
this.formControls[column].setValue($event.data.fullName);
this.formControls[column].setValue($event.data, { emitModelToViewChange: false });
valueReturned = true;
}
else if (!valueReturned) {
this.formControls[column].setValue(undefined);
}
});
}
/**
* Clears the value of the form control object in the given column
* @param column the index of the column that should have it's value cleared
*/
clearInput(column) {
if (column >= 0 && column < this.formControls.length) {
this.formControls[column].setValue(undefined);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchModeComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractSearchModeComponent, selector: "ncc-abstract-seatch-mode", usesInheritance: true, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchModeComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-seatch-mode',
template: ''
}]
}], ctorParameters: () => [{ type: i1.MatDialog }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VhcmNoLW1vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLW1vZGVzL3NlYXJjaC1tb2RlL2Fic3RyYWN0LXNlYXJjaC1tb2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFNUUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7OztBQU85RSxNQUFNLE9BQWdCLDJCQUE0QixTQUFRLDJCQUEyQjtJQVczRDtJQVR0Qjs7T0FFRztJQUNPLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztJQUMzQixlQUFlLENBQWU7SUFDOUIsY0FBYyxDQUFlO0lBRWhDLFlBQVksR0FBdUIsRUFBRSxDQUFDO0lBRTdDLFlBQXNCLE9BQWtCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBRFUsWUFBTyxHQUFQLE9BQU8sQ0FBVztJQUV4QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELE9BQU87U0FDVjtRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLFlBQVk7UUFDbEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUN2QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDOUQsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGtCQUFrQixDQUFDLE1BQWMsRUFBRSxTQUFvQjtRQUMxRCxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNDLFVBQVUsRUFBRSxtQkFBbUI7U0FDbEMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUUsTUFBTSxDQUFDLElBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFpQixFQUFFLEVBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDN0YsYUFBYSxHQUFHLElBQUksQ0FBQzthQUN4QjtpQkFBTSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNqRDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFVBQVUsQ0FBQyxNQUFjO1FBQy9CLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDO3dHQTVGaUIsMkJBQTJCOzRGQUEzQiwyQkFBMkIsdUZBRm5DLEVBQUU7OzRGQUVNLDJCQUEyQjtrQkFKaEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxRQUFRLEVBQUUsRUFBRTtpQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1VzZXJWYWx1ZX0gZnJvbSAnLi4vLi4vLi4vZGF0YS1maWVsZHMvdXNlci1maWVsZC9tb2RlbHMvdXNlci12YWx1ZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Fic3RyYWN0SGVhZGVyTW9kZUNvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3QtaGVhZGVyLW1vZGUuY29tcG9uZW50JztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1zZWF0Y2gtbW9kZScsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VhcmNoTW9kZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SGVhZGVyTW9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIHRoYXQgbXVzdCBlbGFwc2Ugc2luY2UgbGFzdCBrZXlwcmVzcyBpbiBzZWFyY2ggaW5wdXQgYmVmb3JlIGEgc2VhcmNoIHJlcXVlc3QgaXMgc2VudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBTRUFSQ0hfREVCT1VOQ0VfVElNRSA9IDYwMDtcbiAgICBwcm90ZWN0ZWQgc3ViSGVhZGVyQ29sdW1uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIHN1YkNsZWFySGVhZGVyOiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xzOiBBcnJheTxGb3JtQ29udHJvbD4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZGlhbG9nOiBNYXREaWFsb2cpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJIZWFkZXJDb2x1bW4gPSB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyQ29sdW1uQ291bnQkLnN1YnNjcmliZShuZXdDb3VudCA9PiB0aGlzLnVwZGF0ZUhlYWRlckNvdW50KG5ld0NvdW50KSk7XG4gICAgICAgIHRoaXMuc3ViQ2xlYXJIZWFkZXIgPSB0aGlzLmhlYWRlclNlcnZpY2UuY2xlYXJIZWFkZXJTZWFyY2gkLnN1YnNjcmliZShjb2x1bW5OdW1iZXIgPT4gdGhpcy5jbGVhcklucHV0KGNvbHVtbk51bWJlcikpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YkNsZWFySGVhZGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3ViSGVhZGVyQ29sdW1uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgdW5kZXJseWluZyBvYmplY3RzIHRvIG1hdGNoIHRoZSBuZXcgZGVzaXJlZCBudW1iZXIgb2YgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBuZXcgbnVtYmVyIG9mIGNvbHVtbnMgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgdGhlIGNvbHVtbnMgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZWZhdWx0L2JsYW5rIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBuZXcgbnVtYmVyIG9mIGNvbHVtbnMgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgdGhlIHN1cGVyZmx1b3VzIGNvbHVtbnMgd2lsbCBiZSByZW1vdmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld0NvdW50IHRoZSBuZXcgbnVtYmVyIG9mIGNvbHVtbnNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlSGVhZGVyQ291bnQobmV3Q291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAobmV3Q291bnQgPCB0aGlzLmZvcm1Db250cm9scy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gdGhpcy5mb3JtQ29udHJvbHMuc2xpY2UoMCwgbmV3Q291bnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aCA8IG5ld0NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5ld0NvbHVtbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIG5ldyBjb2x1bW4gdG8gdGhlIGhlYWRlcnMgc2VhcmNoIGFuZCBiaW5kcyBpdCdzIEZvcm1Db250cm9sIHRvIHRoZSBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZE5ld0NvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aDtcbiAgICAgICAgZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5TRUFSQ0hfREVCT1VOQ0VfVElNRSksXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBVc2VyVmFsdWUgPyB2YWx1ZS5pZCA6IHZhbHVlKVxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlclNlcnZpY2UuaGVhZGVyU2VhcmNoSW5wdXRDaGFuZ2VkKGksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzLnB1c2goZm9ybUNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgdXNlciBhc3NpZ24gc2lkZSBtZW51IGNvbXBvbmVudCBhbmQgc2V0cyB0aGUgc2VsZWN0ZWQgdXNlciBhcyB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIG9iamVjdFxuICAgICAqIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIElmIG5vIHVzZXIgaXMgc2VsZWN0ZWQgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZvcm0gY29udHJvbCBzaSBjbGVhcmVkLlxuICAgICAqIEBwYXJhbSBjb2x1bW4gdGhlIGluZGV4IG9mIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGhhdmUgaXQncyBmb3JtIGNvbnRyb2wgdmFsdWUgc2V0IHRvIHRoZSBzZWxlY3RlZCB1c2VyXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBpcyB0aGUgY29tcG9uZW50IHRoYXQgd2Ugd2FudCB0byBvcGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdEFic3RyYWN0VXNlcihjb2x1bW46IG51bWJlciwgY29tcG9uZW50OiBUeXBlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbHVlUmV0dXJuZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW4oY29tcG9uZW50LCB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiBcImRpYWxvZy1yZXNwb25zaXZlXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgkZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCRldmVudC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSgoJGV2ZW50LmRhdGEgYXMgVXNlclZhbHVlKS5mdWxsTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSgkZXZlbnQuZGF0YSBhcyBVc2VyVmFsdWUsIHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgdmFsdWVSZXR1cm5lZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVJldHVybmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2wgb2JqZWN0IGluIHRoZSBnaXZlbiBjb2x1bW5cbiAgICAgKiBAcGFyYW0gY29sdW1uIHRoZSBpbmRleCBvZiB0aGUgY29sdW1uIHRoYXQgc2hvdWxkIGhhdmUgaXQncyB2YWx1ZSBjbGVhcmVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNsZWFySW5wdXQoY29sdW1uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbHVtbiA+PSAwICYmIGNvbHVtbiA8IHRoaXMuZm9ybUNvbnRyb2xzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19