UNPKG

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.

174 lines 25.8 kB
import { Directive } from '@angular/core'; import { AbstractComboBox } from './abstract-combobox.component'; import * as i0 from "@angular/core"; import * as i1 from "systelab-preferences"; export class AbstractApiComboBox extends AbstractComboBox { constructor(myRenderer, chref, preferencesService) { super(myRenderer, chref, preferencesService); this.myRenderer = myRenderer; this.chref = chref; this.preferencesService = preferencesService; this.startsWith = ''; this.totalItemsLoaded = false; } // override configGrid() { super.configGrid(); this.gridOptions.rowModelType = 'infinite'; this.gridOptions.paginationPageSize = 20; this.gridOptions.cacheBlockSize = 20; this.gridOptions.cacheOverflowSize = 2; this.gridOptions.maxConcurrentDatasourceRequests = 1; this.gridOptions.infiniteInitialRowCount = 0; this.gridOptions.maxBlocksInCache = 100; } configGridData() { this.gridOptions.datasource = null; } refresh(params) { if (this.gridOptions && this.gridOptions.api) { this.gridOptions.api.setDatasource(this); } return true; } // override loop() { let result = true; if (this.isDropDownOpen()) { // First time opened we load the table if (this.gridOptions.datasource === null) { this.gridOptions.datasource = this; this.refresh(null); } if (this.totalItemsLoaded) { this.setDropdownHeight(); this.setDropdownPosition(); result = false; } } if (result && this.isDropdownOpened) { setTimeout(() => this.loop(), 10); } else { return; } } //override getTotalItemsInCombo() { return this.getTotalItems(); } doSearch(event) { if (event.shiftKey || event.ctrlKey) { return; } this.startsWith = event.target.value; this.refresh(null); } getRows(params) { const page = params.endRow / this.gridOptions.paginationPageSize; const pageSize = this.gridOptions.paginationPageSize; const emptyElemNumber = this.emptyElement ? 1 : 0; const allNumber = this.allElement ? 1 : 0; const totalItems = this.getTotalItems() + emptyElemNumber + allNumber; const modulus = totalItems % pageSize; if (page === 1 || page <= totalItems / pageSize || modulus > 1 || ((modulus === 1 || modulus === 2) && !this.emptyElement && !this.allElement)) { this.getElements(page, pageSize, emptyElemNumber, allNumber, params); } else { this.totalItemsLoaded = false; this.getData(page - 1, this.gridOptions.paginationPageSize, this.startsWith) .subscribe({ next: (previousPage) => { const itemArray = new Array(); const totItems = Number(this.getTotalItems() + emptyElemNumber + allNumber); if (this.emptyElement === true && this.allElement === true) { const lastButOneItemFromPreviousPage = previousPage[this.gridOptions.paginationPageSize - 2]; itemArray.push(lastButOneItemFromPreviousPage); const lastItemFromPreviousPage = previousPage[this.gridOptions.paginationPageSize - 1]; itemArray.push(lastItemFromPreviousPage); } else { const lastItemFromPreviousPage = previousPage[this.gridOptions.paginationPageSize - 1]; itemArray.push(lastItemFromPreviousPage); } this.totalItemsLoaded = true; params.successCallback(itemArray, totItems); }, error: () => { params.failCallback(); } }); } } getElements(page, pageSize, emptyElemNumber, allNumber, params) { this.totalItemsLoaded = false; this.getData(page, pageSize, this.startsWith) .subscribe({ next: (v) => { const itemArray = new Array(); const totalItems = Number(this.getTotalItems() + emptyElemNumber + allNumber); if (this.emptyElement === true || this.allElement === true) { if (page === 1) { if (this.emptyElement === true) { const newElement = this.getInstance(); itemArray.push(newElement); } if (this.allElement === true) { const allElement = this.getAllInstance(); itemArray.push(allElement); } for (const originalElement of v) { itemArray.push(originalElement); } params.successCallback(itemArray, totalItems); this.totalItemsLoaded = true; } else { this.getData(page - 1, this.gridOptions.paginationPageSize, this.startsWith) .subscribe({ next: (previousPage) => { if (this.emptyElement === true && this.allElement === true) { const lastButOneItemFromPreviousPage = previousPage[this.gridOptions.paginationPageSize - 2]; itemArray.push(lastButOneItemFromPreviousPage); const lastItemFromPreviousPage = previousPage[this.gridOptions.paginationPageSize - 1]; itemArray.push(lastItemFromPreviousPage); } else { const lastItemFromPreviousPage = previousPage[this.gridOptions.paginationPageSize - 1]; itemArray.push(lastItemFromPreviousPage); } for (const originalElement of v) { itemArray.push(originalElement); } this.totalItemsLoaded = true; params.successCallback(itemArray, totalItems); }, error: () => { params.failCallback(); } }); } } else { for (const originalElement of v) { itemArray.push(originalElement); } this.totalItemsLoaded = true; params.successCallback(itemArray, totalItems); } }, error: () => { params.failCallback(); } }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractApiComboBox, 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: AbstractApiComboBox, usesInheritance: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractApiComboBox, decorators: [{ type: Directive }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.PreferencesService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtYXBpLWNvbWJvYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLWNvbXBvbmVudHMvc3JjL2xpYi9jb21ib2JveC9hYnN0cmFjdC1hcGktY29tYm9ib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUczRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBS2pFLE1BQU0sT0FBZ0IsbUJBQXVCLFNBQVEsZ0JBQW1CO0lBUXZFLFlBQTRCLFVBQXFCLEVBQVMsS0FBd0IsRUFBa0Isa0JBQXVDO1FBQzFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFEbEIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUFTLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQWtCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFOcEksZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUloQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFJaEMsQ0FBQztJQUVELFdBQVc7SUFDUSxVQUFVO1FBRTVCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEdBQUcs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QUFDOzRCQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0NBQ1gsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN2QixDQUFDO3lCQUNELENBQ0QsQ0FBQztxQkFDSDtpQkFDRDtxQkFBTTtvQkFFTixLQUFLLE1BQU0sZUFBZSxJQUFJLENBQUMsRUFBRTt3QkFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztxQkFDaEM7b0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztvQkFDN0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7aUJBQzlDO1lBQ0YsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLENBQUM7U0FDRCxDQUNELENBQUM7SUFDSixDQUFDOzhHQS9Mb0IsbUJBQW1CO2tHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRHhDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZ1JlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IElHZXRSb3dzUGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21ib0JveCB9IGZyb20gJy4vYWJzdHJhY3QtY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJ3N5c3RlbGFiLXByZWZlcmVuY2VzJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RBcGlDb21ib0JveDxUPiBleHRlbmRzIEFic3RyYWN0Q29tYm9Cb3g8VD4gaW1wbGVtZW50cyBBZ1JlbmRlcmVyQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cblx0cHVibGljIHN0YXJ0c1dpdGggPSAnJztcblxuXHRwdWJsaWMgb3ZlcnJpZGUgcGFyYW1zOiBhbnk7XG5cblx0cHVibGljIHRvdGFsSXRlbXNMb2FkZWQgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgb3ZlcnJpZGUgbXlSZW5kZXJlcjogUmVuZGVyZXIyLCBwdWJsaWMgY2hyZWY6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgb3ZlcnJpZGUgcHJlZmVyZW5jZXNTZXJ2aWNlPzogUHJlZmVyZW5jZXNTZXJ2aWNlKSB7XG5cdFx0c3VwZXIobXlSZW5kZXJlciwgY2hyZWYsIHByZWZlcmVuY2VzU2VydmljZSk7XG5cdH1cblxuXHQvLyBvdmVycmlkZVxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgY29uZmlnR3JpZCgpIHtcblxuXHRcdHN1cGVyLmNvbmZpZ0dyaWQoKTtcblx0XHR0aGlzLmdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9ICdpbmZpbml0ZSc7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemUgPSAyMDtcblx0XHR0aGlzLmdyaWRPcHRpb25zLmNhY2hlQmxvY2tTaXplID0gMjA7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5jYWNoZU92ZXJmbG93U2l6ZSA9IDI7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5tYXhDb25jdXJyZW50RGF0YXNvdXJjZVJlcXVlc3RzID0gMTtcblx0XHR0aGlzLmdyaWRPcHRpb25zLmluZmluaXRlSW5pdGlhbFJvd0NvdW50ID0gMDtcblx0XHR0aGlzLmdyaWRPcHRpb25zLm1heEJsb2Nrc0luQ2FjaGUgPSAxMDA7XG5cblx0fVxuXG5cdHByb3RlY3RlZCBvdmVycmlkZSBjb25maWdHcmlkRGF0YSgpIHtcblx0XHR0aGlzLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UgPSBudWxsO1xuXHR9XG5cblx0cHVibGljIGFic3RyYWN0IGdldERhdGEocGFnZTogbnVtYmVyLCBpdGVtc1BlclBhZ2U6IG51bWJlciwgc3RhcnRzV2l0aFBhcmFtZXRlcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxUPj47XG5cblx0cHVibGljIGFic3RyYWN0IGdldFRvdGFsSXRlbXMoKTogbnVtYmVyO1xuXG5cdHB1YmxpYyBvdmVycmlkZSByZWZyZXNoKHBhcmFtczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuZ3JpZE9wdGlvbnMgJiYgdGhpcy5ncmlkT3B0aW9ucy5hcGkpIHtcblx0XHRcdHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNldERhdGFzb3VyY2UodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gb3ZlcnJpZGVcblx0cHVibGljIG92ZXJyaWRlIGxvb3AoKTogdm9pZCB7XG5cdFx0bGV0IHJlc3VsdCA9IHRydWU7XG5cblx0XHRpZiAodGhpcy5pc0Ryb3BEb3duT3BlbigpKSB7XG5cdFx0XHQvLyBGaXJzdCB0aW1lIG9wZW5lZCB3ZSBsb2FkIHRoZSB0YWJsZVxuXHRcdFx0aWYgKHRoaXMuZ3JpZE9wdGlvbnMuZGF0YXNvdXJjZSA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UgPSB0aGlzO1xuXHRcdFx0XHR0aGlzLnJlZnJlc2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy50b3RhbEl0ZW1zTG9hZGVkKSB7XG5cdFx0XHRcdHRoaXMuc2V0RHJvcGRvd25IZWlnaHQoKTtcblx0XHRcdFx0dGhpcy5zZXREcm9wZG93blBvc2l0aW9uKCk7XG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAocmVzdWx0ICYmIHRoaXMuaXNEcm9wZG93bk9wZW5lZCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLmxvb3AoKSwgMTApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly9vdmVycmlkZVxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0VG90YWxJdGVtc0luQ29tYm8oKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRUb3RhbEl0ZW1zKCk7XG5cdH1cblxuXHRwdWJsaWMgb3ZlcnJpZGUgZG9TZWFyY2goZXZlbnQ6IGFueSkge1xuXHRcdGlmIChldmVudC5zaGlmdEtleSB8fCBldmVudC5jdHJsS2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3RhcnRzV2l0aCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblx0XHR0aGlzLnJlZnJlc2gobnVsbCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Um93cyhwYXJhbXM6IElHZXRSb3dzUGFyYW1zKTogdm9pZCB7XG5cblx0XHRjb25zdCBwYWdlOiBudW1iZXIgPSBwYXJhbXMuZW5kUm93IC8gdGhpcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemU7XG5cdFx0Y29uc3QgcGFnZVNpemU6IG51bWJlciA9IHRoaXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplO1xuXG5cdFx0Y29uc3QgZW1wdHlFbGVtTnVtYmVyOiBudW1iZXIgPSB0aGlzLmVtcHR5RWxlbWVudCA/IDEgOiAwO1xuXHRcdGNvbnN0IGFsbE51bWJlcjogbnVtYmVyID0gdGhpcy5hbGxFbGVtZW50ID8gMSA6IDA7XG5cdFx0Y29uc3QgdG90YWxJdGVtczogbnVtYmVyID0gdGhpcy5nZXRUb3RhbEl0ZW1zKCkgKyBlbXB0eUVsZW1OdW1iZXIgKyBhbGxOdW1iZXI7XG5cdFx0Y29uc3QgbW9kdWx1czogbnVtYmVyID0gdG90YWxJdGVtcyAlIHBhZ2VTaXplO1xuXG5cdFx0aWYgKHBhZ2UgPT09IDFcblx0XHRcdHx8IHBhZ2UgPD0gdG90YWxJdGVtcyAvIHBhZ2VTaXplXG5cdFx0XHR8fCBtb2R1bHVzID4gMVxuXHRcdFx0fHwgKChtb2R1bHVzID09PSAxIHx8IG1vZHVsdXMgPT09IDIpICYmICF0aGlzLmVtcHR5RWxlbWVudCAmJiAhdGhpcy5hbGxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5nZXRFbGVtZW50cyhwYWdlLCBwYWdlU2l6ZSwgZW1wdHlFbGVtTnVtYmVyLCBhbGxOdW1iZXIsIHBhcmFtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudG90YWxJdGVtc0xvYWRlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5nZXREYXRhKHBhZ2UgLSAxLCB0aGlzLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZSwgdGhpcy5zdGFydHNXaXRoKVxuXHRcdFx0XHQuc3Vic2NyaWJlKHtcblx0XHRcdFx0XHRcdG5leHQ6ICAocHJldmlvdXNQYWdlOiBBcnJheTxUPikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtQXJyYXk6IEFycmF5PFQ+ID0gbmV3IEFycmF5PFQ+KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRvdEl0ZW1zOiBudW1iZXIgPSBOdW1iZXIodGhpcy5nZXRUb3RhbEl0ZW1zKCkgKyBlbXB0eUVsZW1OdW1iZXIgKyBhbGxOdW1iZXIpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5lbXB0eUVsZW1lbnQgPT09IHRydWUgJiYgdGhpcy5hbGxFbGVtZW50ID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbGFzdEJ1dE9uZUl0ZW1Gcm9tUHJldmlvdXNQYWdlID0gcHJldmlvdXNQYWdlW3RoaXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIC0gMl07XG5cdFx0XHRcdFx0XHRcdFx0aXRlbUFycmF5LnB1c2gobGFzdEJ1dE9uZUl0ZW1Gcm9tUHJldmlvdXNQYWdlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtRnJvbVByZXZpb3VzUGFnZSA9IHByZXZpb3VzUGFnZVt0aGlzLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZSAtIDFdO1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1BcnJheS5wdXNoKGxhc3RJdGVtRnJvbVByZXZpb3VzUGFnZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW1Gcm9tUHJldmlvdXNQYWdlID0gcHJldmlvdXNQYWdlW3RoaXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIC0gMV07XG5cdFx0XHRcdFx0XHRcdFx0aXRlbUFycmF5LnB1c2gobGFzdEl0ZW1Gcm9tUHJldmlvdXNQYWdlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHRoaXMudG90YWxJdGVtc0xvYWRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHBhcmFtcy5zdWNjZXNzQ2FsbGJhY2soaXRlbUFycmF5LCB0b3RJdGVtcyk7XG5cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvcjogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRwYXJhbXMuZmFpbENhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0RWxlbWVudHMocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyLCBlbXB0eUVsZW1OdW1iZXI6IG51bWJlciwgYWxsTnVtYmVyOiBudW1iZXIsIHBhcmFtczogSUdldFJvd3NQYXJhbXMpIHtcblx0XHR0aGlzLnRvdGFsSXRlbXNMb2FkZWQgPSBmYWxzZTtcblx0XHR0aGlzLmdldERhdGEocGFnZSwgcGFnZVNpemUsIHRoaXMuc3RhcnRzV2l0aClcblx0XHRcdC5zdWJzY3JpYmUoe1xuXHRcdFx0XHRcdG5leHQ6ICAodjogQXJyYXk8VD4pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1BcnJheTogQXJyYXk8VD4gPSBuZXcgQXJyYXk8VD4oKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRvdGFsSXRlbXM6IG51bWJlciA9IE51bWJlcih0aGlzLmdldFRvdGFsSXRlbXMoKSArIGVtcHR5RWxlbU51bWJlciArIGFsbE51bWJlcik7XG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLmVtcHR5RWxlbWVudCA9PT0gdHJ1ZSB8fCB0aGlzLmFsbEVsZW1lbnQgPT09IHRydWUpIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAocGFnZSA9PT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmVtcHR5RWxlbWVudCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3RWxlbWVudDogVCA9IHRoaXMuZ2V0SW5zdGFuY2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1BcnJheS5wdXNoKG5ld0VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbEVsZW1lbnQgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFsbEVsZW1lbnQ6IFQgPSB0aGlzLmdldEFsbEluc3RhbmNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtQXJyYXkucHVzaChhbGxFbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG9yaWdpbmFsRWxlbWVudCBvZiB2KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtQXJyYXkucHVzaChvcmlnaW5hbEVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRwYXJhbXMuc3VjY2Vzc0NhbGxiYWNrKGl0ZW1BcnJheSwgdG90YWxJdGVtcyk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50b3RhbEl0ZW1zTG9hZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0RGF0YShwYWdlIC0gMSwgdGhpcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemUsIHRoaXMuc3RhcnRzV2l0aClcblx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzY3JpYmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHQ6ICAocHJldmlvdXNQYWdlOiBBcnJheTxUPikgPT4ge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5lbXB0eUVsZW1lbnQgPT09IHRydWUgJiYgdGhpcy5hbGxFbGVtZW50ID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxhc3RCdXRPbmVJdGVtRnJvbVByZXZpb3VzUGFnZSA9IHByZXZpb3VzUGFnZVt0aGlzLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZSAtIDJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtQXJyYXkucHVzaChsYXN0QnV0T25lSXRlbUZyb21QcmV2aW91c1BhZ2UpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtRnJvbVByZXZpb3VzUGFnZSA9IHByZXZpb3VzUGFnZVt0aGlzLmdyaWRPcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZSAtIDFdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtQXJyYXkucHVzaChsYXN0SXRlbUZyb21QcmV2aW91c1BhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW1Gcm9tUHJldmlvdXNQYWdlID0gcHJldmlvdXNQYWdlW3RoaXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIC0gMV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1BcnJheS5wdXNoKGxhc3RJdGVtRnJvbVByZXZpb3VzUGFnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3Qgb3JpZ2luYWxFbGVtZW50IG9mIHYpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbUFycmF5LnB1c2gob3JpZ2luYWxFbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudG90YWxJdGVtc0xvYWRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMuc3VjY2Vzc0NhbGxiYWNrKGl0ZW1BcnJheSwgdG90YWxJdGVtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLmZhaWxDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IG9yaWdpbmFsRWxlbWVudCBvZiB2KSB7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbUFycmF5LnB1c2gob3JpZ2luYWxFbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnRvdGFsSXRlbXNMb2FkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRwYXJhbXMuc3VjY2Vzc0NhbGxiYWNrKGl0ZW1BcnJheSwgdG90YWxJdGVtcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvcjogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cGFyYW1zLmZhaWxDYWxsYmFjaygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0fVxuXG59XG4iXX0=