systelab-components
Version:
systelab-components is a set of components that use wide accepted and adopted standard technologies like Angular and Bootstrap, as well as other popular libraries. Please read the ATTRIBUTION.md file for a complete list of dependencies.
177 lines • 23.4 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { AbstractApiComboBox } from '../abstract-api-combobox.component';
import { AbstractComboBox } from '../abstract-combobox.component';
import * as i0 from "@angular/core";
import * as i1 from "systelab-preferences";
export class KeyName {
static { this.backspace = 'Backspace'; }
static { this.enter = 'Enter'; }
static { this.escape = 'Escape'; }
static { this.tab = 'Tab'; }
static { this.arrowUp = 'ArrowUp'; }
static { this.arrowDown = 'ArrowDown'; }
static { this.shift = 'Shift'; }
}
export class AutocompleteApiComboBox extends AbstractApiComboBox {
constructor(myRenderer, chref, preferencesService) {
super(myRenderer, chref, preferencesService);
this.myRenderer = myRenderer;
this.chref = chref;
this.preferencesService = preferencesService;
this.startsWith = '';
this.debounceTime = 350;
this.withClearOption = false;
}
doSearch(event) {
if (event.shiftKey || event.ctrlKey || event.key === KeyName.arrowUp || event.key === KeyName.arrowDown || event.key === KeyName.shift) {
return;
}
if (event.key === KeyName.escape || event.key === KeyName.enter || event.key === KeyName.tab) {
if (this.isDropdownOpened) {
this.closeDropDown();
}
}
else {
this.doSearchText(event.target?.value);
}
}
// Overrides
setDropdownHeight() {
let calculatedHeight = 0;
calculatedHeight += AbstractComboBox.ROW_HEIGHT * 10;
this.myRenderer.setStyle(this.dropdownElement.nativeElement, 'height', calculatedHeight + 'px');
}
onInputClicked(event) {
event.stopPropagation();
if (!this.isDisabled) {
if (!this.isDropdownOpened) {
this.openDropDown();
this.doSearchText(this.description);
}
this.inputElement.nativeElement.focus();
}
}
onInputNavigate(event) {
if (!this.isDisabled) {
if (!this.isDropdownOpened) {
this.openDropDown();
this.doSearchText(this.description);
}
this.chref.detectChanges();
// sets focus into the first grid cell
setTimeout(() => {
const firstCol = this.gridOptions.columnApi.getAllDisplayedColumns()[0];
this.gridOptions.api.setFocusedCell(0, firstCol);
}, 0);
}
}
// Overrides
onCellKeyDown(e) {
if (e.event.key === KeyName.enter) {
e.node.setSelected(true);
this.selectedItemChange.emit(e.node.data);
this.closeDropDown();
this.inputElement.nativeElement.focus();
}
else if (e.event.key === KeyName.backspace) {
this.inputElement.nativeElement.value = this.inputElement.nativeElement.value.slice(0, -1);
this.inputElement.nativeElement.focus();
}
else if (e.event.key.length === 1 && e.event.key.match(/^[a-zA-Z]+|[0-9]/g)) {
this.inputElement.nativeElement.value += e.event.key;
this.inputElement.nativeElement.focus();
}
else if (e.event.key === KeyName.tab) {
this.closeDropDown();
e.event.stopPropagation();
}
e.event.preventDefault();
}
// Overrides
onComboClicked(event) {
super.onComboClicked(event);
this.doSearchText(this.description);
}
// Overrides
closeDropDown() {
this.startsWith = '';
const selectedRow = this.getSelectedRow();
if (selectedRow) {
this.id = selectedRow[this.getIdField()];
this.description = selectedRow[this.getDescriptionField()];
}
else if (!this.id) {
this.resetComboSelection();
}
super.closeDropDown();
}
// Overrides
getRows(params) {
if (this.gridOptions && this.gridOptions.api) {
this.gridOptions.api.showLoadingOverlay();
const page = params.endRow / this.gridOptions.paginationPageSize;
this.totalItemsLoaded = false;
this.getData(page, this.gridOptions.paginationPageSize, this.startsWith)
.subscribe({
next: (v) => {
this.gridOptions.api.hideOverlay();
this.totalItemsLoaded = true;
params.successCallback(v, this.getTotalItems());
},
error: () => {
this.gridOptions.api.hideOverlay();
params.failCallback();
}
});
}
}
doSearchText(text) {
if (!this.isDropdownOpened) {
this.openDropDown();
}
this.startsWith = text;
if (!this.startsWith || this.startsWith.length < 1) {
this.resetComboSelection();
}
this.refresh(null);
}
resetComboSelection() {
this.id = undefined;
this.code = undefined;
this.description = undefined;
this.currentSelected = undefined;
if (this.gridOptions && this.gridOptions.api) {
this.gridOptions.api.deselectAll();
}
this.selectedItemChange.emit(undefined);
}
openDropDown() {
this.showDropDown();
jQuery('#' + this.comboId)
.dropdown('toggle');
this.isDropdownOpened = true;
}
inputIsEmpty() {
return !this.input || this.input.nativeElement?.value.length === 0;
}
clearText(event) {
this.input.nativeElement.value = '';
this.doSearchText('');
}
onEnterDoSelect(event) {
if (this.isDropdownOpened && this.gridOptions.api.getRenderedNodes().length > 0) {
this.gridOptions.api.getDisplayedRowAtIndex(0).selectThisNode(true);
this.selectedItemChange.emit(this.gridOptions.api.getDisplayedRowAtIndex(0).data);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AutocompleteApiComboBox, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.PreferencesService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: AutocompleteApiComboBox, inputs: { debounceTime: "debounceTime", withClearOption: "withClearOption" }, usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AutocompleteApiComboBox, decorators: [{
type: Directive
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.PreferencesService }], propDecorators: { debounceTime: [{
type: Input
}], withClearOption: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWFwaS1jb21ib2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi1jb21wb25lbnRzL3NyYy9saWIvY29tYm9ib3gvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1hcGktY29tYm9ib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBS2xFLE1BQU0sT0FBTyxPQUFPO2FBQ0gsY0FBUyxHQUFHLFdBQVcsQ0FBQzthQUN4QixVQUFLLEdBQUcsT0FBTyxDQUFDO2FBQ2hCLFdBQU0sR0FBRyxRQUFRLENBQUM7YUFDbEIsUUFBRyxHQUFHLEtBQUssQ0FBQzthQUNaLFlBQU8sR0FBRyxTQUFTLENBQUM7YUFDcEIsY0FBUyxHQUFHLFdBQVcsQ0FBQzthQUN4QixVQUFLLEdBQUcsT0FBTyxDQUFDOztBQUlqQyxNQUFNLE9BQWdCLHVCQUEyQixTQUFRLG1CQUFzQjtJQU05RSxZQUNpQixVQUFxQixFQUNyQixLQUF3QixFQUN4QixrQkFBdUM7UUFFdkQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUo3QixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFQeEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixpQkFBWSxHQUFXLEdBQUcsQ0FBQztRQUMzQixvQkFBZSxHQUFZLEtBQUssQ0FBQztJQVFqRCxDQUFDO0lBRWUsUUFBUSxDQUFDLEtB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QUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFpQjtRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFvQjtRQUMxQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEY7SUFDRixDQUFDOzhHQXJLb0IsdUJBQXVCO2tHQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRDVDLFNBQVM7K0lBSU8sWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5wdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWdSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XG5pbXBvcnQge0lHZXRSb3dzUGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQWJzdHJhY3RBcGlDb21ib0JveCB9IGZyb20gJy4uL2Fic3RyYWN0LWFwaS1jb21ib2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21ib0JveCB9IGZyb20gJy4uL2Fic3RyYWN0LWNvbWJvYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICdzeXN0ZWxhYi1wcmVmZXJlbmNlcyc7XG5cbmRlY2xhcmUgY29uc3QgalF1ZXJ5OiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBLZXlOYW1lIHtcblx0c3RhdGljIHJlYWRvbmx5IGJhY2tzcGFjZSA9ICdCYWNrc3BhY2UnO1xuXHRzdGF0aWMgcmVhZG9ubHkgZW50ZXIgPSAnRW50ZXInO1xuXHRzdGF0aWMgcmVhZG9ubHkgZXNjYXBlID0gJ0VzY2FwZSc7XG5cdHN0YXRpYyByZWFkb25seSB0YWIgPSAnVGFiJztcblx0c3RhdGljIHJlYWRvbmx5IGFycm93VXAgPSAnQXJyb3dVcCc7XG5cdHN0YXRpYyByZWFkb25seSBhcnJvd0Rvd24gPSAnQXJyb3dEb3duJztcblx0c3RhdGljIHJlYWRvbmx5IHNoaWZ0ID0gJ1NoaWZ0Jztcbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXV0b2NvbXBsZXRlQXBpQ29tYm9Cb3g8VD4gZXh0ZW5kcyBBYnN0cmFjdEFwaUNvbWJvQm94PFQ+IGltcGxlbWVudHMgQWdSZW5kZXJlckNvbXBvbmVudCB7XG5cblx0cHVibGljIG92ZXJyaWRlIHN0YXJ0c1dpdGggPSAnJztcblx0QElucHV0KCkgcHVibGljIGRlYm91bmNlVGltZTogbnVtYmVyID0gMzUwO1xuXHRASW5wdXQoKSBwdWJsaWMgd2l0aENsZWFyT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIG92ZXJyaWRlIG15UmVuZGVyZXI6IFJlbmRlcmVyMixcblx0XHRwdWJsaWMgb3ZlcnJpZGUgY2hyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdHB1YmxpYyBvdmVycmlkZSBwcmVmZXJlbmNlc1NlcnZpY2U/OiBQcmVmZXJlbmNlc1NlcnZpY2Vcblx0KSB7XG5cdFx0c3VwZXIobXlSZW5kZXJlciwgY2hyZWYsIHByZWZlcmVuY2VzU2VydmljZSk7XG5cdH1cblxuXHRwdWJsaWMgb3ZlcnJpZGUgZG9TZWFyY2goZXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdGlmIChldmVudC5zaGlmdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LmtleSA9PT0gS2V5TmFtZS5hcnJvd1VwIHx8IGV2ZW50LmtleSA9PT0gS2V5TmFtZS5hcnJvd0Rvd24gfHwgZXZlbnQua2V5ID09PSBLZXlOYW1lLnNoaWZ0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IEtleU5hbWUuZXNjYXBlIHx8IGV2ZW50LmtleSA9PT0gS2V5TmFtZS5lbnRlciB8fCBldmVudC5rZXkgPT09IEtleU5hbWUudGFiKSB7XG5cdFx0XHRpZiAodGhpcy5pc0Ryb3Bkb3duT3BlbmVkKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2VEcm9wRG93bigpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmRvU2VhcmNoVGV4dChldmVudC50YXJnZXQ/LnZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvLyBPdmVycmlkZXNcblx0cHVibGljIG92ZXJyaWRlIHNldERyb3Bkb3duSGVpZ2h0KCk6IHZvaWQge1xuXHRcdGxldCBjYWxjdWxhdGVkSGVpZ2h0ID0gMDtcblxuXHRcdGNhbGN1bGF0ZWRIZWlnaHQgKz0gQWJzdHJhY3RDb21ib0JveC5ST1dfSEVJR0hUICogMTA7XG5cdFx0dGhpcy5teVJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZHJvcGRvd25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCBjYWxjdWxhdGVkSGVpZ2h0ICsgJ3B4Jyk7XG5cdH1cblxuXHRwdWJsaWMgb25JbnB1dENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuXHRcdFx0aWYgKCF0aGlzLmlzRHJvcGRvd25PcGVuZWQpIHtcblx0XHRcdFx0dGhpcy5vcGVuRHJvcERvd24oKTtcblx0XHRcdFx0dGhpcy5kb1NlYXJjaFRleHQodGhpcy5kZXNjcmlwdGlvbik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIG9uSW5wdXROYXZpZ2F0ZShldmVudCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuaXNEcm9wZG93bk9wZW5lZCkge1xuXHRcdFx0XHR0aGlzLm9wZW5Ecm9wRG93bigpO1xuXHRcdFx0XHR0aGlzLmRvU2VhcmNoVGV4dCh0aGlzLmRlc2NyaXB0aW9uKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuY2hyZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0Ly8gc2V0cyBmb2N1cyBpbnRvIHRoZSBmaXJzdCBncmlkIGNlbGxcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBmaXJzdENvbCA9IHRoaXMuZ3JpZE9wdGlvbnMuY29sdW1uQXBpLmdldEFsbERpc3BsYXllZENvbHVtbnMoKVswXTtcblx0XHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Rm9jdXNlZENlbGwoMCwgZmlyc3RDb2wpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gT3ZlcnJpZGVzXG5cdHB1YmxpYyBvdmVycmlkZSBvbkNlbGxLZXlEb3duKGU6IGFueSk6IHZvaWQge1xuXHRcdGlmIChlLmV2ZW50LmtleSA9PT0gS2V5TmFtZS5lbnRlcikge1xuXHRcdFx0ZS5ub2RlLnNldFNlbGVjdGVkKHRydWUpO1xuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuZW1pdChlLm5vZGUuZGF0YSk7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcERvd24oKTtcblx0XHRcdHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKGUuZXZlbnQua2V5ID09PSBLZXlOYW1lLmJhY2tzcGFjZSkge1xuXHRcdFx0dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUuc2xpY2UoMCwgLTEpO1xuXHRcdFx0dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoZS5ldmVudC5rZXkubGVuZ3RoID09PSAxICYmIGUuZXZlbnQua2V5Lm1hdGNoKC9eW2EtekEtWl0rfFswLTldL2cpKSB7XG5cdFx0XHR0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICs9IGUuZXZlbnQua2V5O1xuXHRcdFx0dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoZS5ldmVudC5rZXkgPT09IEtleU5hbWUudGFiKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcERvd24oKTtcblx0XHRcdGUuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHRcdGUuZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fVxuXG5cdC8vIE92ZXJyaWRlc1xuXHRwdWJsaWMgb3ZlcnJpZGUgb25Db21ib0NsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcblx0XHRzdXBlci5vbkNvbWJvQ2xpY2tlZChldmVudCk7XG5cdFx0dGhpcy5kb1NlYXJjaFRleHQodGhpcy5kZXNjcmlwdGlvbik7XG5cdH1cblxuXHQvLyBPdmVycmlkZXNcblx0cHVibGljIG92ZXJyaWRlIGNsb3NlRHJvcERvd24oKTogdm9pZCB7XG5cdFx0dGhpcy5zdGFydHNXaXRoID0gJyc7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRSb3c6IFQgPSB0aGlzLmdldFNlbGVjdGVkUm93KCk7XG5cdFx0aWYgKHNlbGVjdGVkUm93KSB7XG5cdFx0XHR0aGlzLmlkID0gc2VsZWN0ZWRSb3dbdGhpcy5nZXRJZEZpZWxkKCldO1xuXHRcdFx0dGhpcy5kZXNjcmlwdGlvbiA9IHNlbGVjdGVkUm93W3RoaXMuZ2V0RGVzY3JpcHRpb25GaWVsZCgpXTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmlkKSB7XG5cdFx0XHR0aGlzLnJlc2V0Q29tYm9TZWxlY3Rpb24oKTtcblx0XHR9XG5cdFx0c3VwZXIuY2xvc2VEcm9wRG93bigpO1xuXHR9XG5cblx0Ly8gT3ZlcnJpZGVzXG5cdHB1YmxpYyBvdmVycmlkZSBnZXRSb3dzKHBhcmFtczogSUdldFJvd3NQYXJhbXMpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xuXHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuc2hvd0xvYWRpbmdPdmVybGF5KCk7XG5cdFx0XHRjb25zdCBwYWdlOiBudW1iZXIgPSBwYXJhbXMuZW5kUm93IC8gdGhpcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemU7XG5cdFx0XHR0aGlzLnRvdGFsSXRlbXNMb2FkZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuZ2V0RGF0YShwYWdlLCB0aGlzLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZSwgdGhpcy5zdGFydHNXaXRoKVxuXHRcdFx0XHQuc3Vic2NyaWJlKHtcblx0XHRcdFx0XHRcdG5leHQ6ICAodjogQXJyYXk8VD4pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuaGlkZU92ZXJsYXkoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy50b3RhbEl0ZW1zTG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLnN1Y2Nlc3NDYWxsYmFjayh2LCB0aGlzLmdldFRvdGFsSXRlbXMoKSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZXJyb3I6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuaGlkZU92ZXJsYXkoKTtcblx0XHRcdFx0XHRcdFx0cGFyYW1zLmZhaWxDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgZG9TZWFyY2hUZXh0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0Ryb3Bkb3duT3BlbmVkKSB7XG5cdFx0XHR0aGlzLm9wZW5Ecm9wRG93bigpO1xuXHRcdH1cblx0XHR0aGlzLnN0YXJ0c1dpdGggPSB0ZXh0O1xuXHRcdGlmICghdGhpcy5zdGFydHNXaXRoIHx8IHRoaXMuc3RhcnRzV2l0aC5sZW5ndGggPCAxKSB7XG5cdFx0XHR0aGlzLnJlc2V0Q29tYm9TZWxlY3Rpb24oKTtcblx0XHR9XG5cdFx0dGhpcy5yZWZyZXNoKG51bGwpO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlc2V0Q29tYm9TZWxlY3Rpb24oKTogdm9pZCB7XG5cdFx0dGhpcy5pZCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvZGUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmN1cnJlbnRTZWxlY3RlZCA9IHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xuXHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuZGVzZWxlY3RBbGwoKTtcblx0XHR9XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuZW1pdCh1bmRlZmluZWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBvcGVuRHJvcERvd24oKTogdm9pZCB7XG5cdFx0dGhpcy5zaG93RHJvcERvd24oKTtcblx0XHRqUXVlcnkoJyMnICsgdGhpcy5jb21ib0lkKVxuXHRcdFx0LmRyb3Bkb3duKCd0b2dnbGUnKTtcblx0XHR0aGlzLmlzRHJvcGRvd25PcGVuZWQgPSB0cnVlO1xuXHR9XG5cblx0cHVibGljIGlucHV0SXNFbXB0eSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuaW5wdXQgfHwgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50Py52YWx1ZS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJUZXh0KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG5cdFx0dGhpcy5kb1NlYXJjaFRleHQoJycpO1xuXHR9XG5cblx0cHVibGljIG9uRW50ZXJEb1NlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICh0aGlzLmlzRHJvcGRvd25PcGVuZWQgJiYgdGhpcy5ncmlkT3B0aW9ucy5hcGkuZ2V0UmVuZGVyZWROb2RlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuZ3JpZE9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoMCkuc2VsZWN0VGhpc05vZGUodHJ1ZSk7XG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5lbWl0KHRoaXMuZ3JpZE9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoMCkuZGF0YSk7XG5cdFx0fVxuXHR9XG5cbn1cbiJdfQ==