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.
311 lines • 40.4 kB
JavaScript
import { Directive, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { StylesUtilService } from '../utilities/styles.util.service';
import { AutosizeGridHelper, initializeCalculatedGridState } from '../helper/autosize-grid-helper';
import * as i0 from "@angular/core";
export class AbstractListBox {
set values(newValues) {
this._values = newValues;
if (this.gridOptions && this.gridOptions.api) {
this.gridOptions.api.setRowData(this._values);
}
}
get values() {
return this._values;
}
set selectedItem(value) {
this._selectedItem = value;
this.selectItemInGrid();
}
get selectedItem() {
return this._selectedItem;
}
set multipleSelectedItemList(value) {
this._multipleSelectedItemList = value;
this.selectItemInGrid();
this.multipleSelectedItemListChange.emit(this._multipleSelectedItemList);
this.multipleSelectedIDListChange.emit(this.selectionItemListToIDList());
}
get multipleSelectedItemList() {
return this._multipleSelectedItemList;
}
constructor() {
this.rowDrag = false;
this.selectedItemChange = new EventEmitter();
this.multipleSelectedIDListChange = new EventEmitter();
this.rowDragEnd = new EventEmitter();
this.selectFirstItem = false;
this.multipleSelection = false;
this.showAll = false;
this.hideChecks = false;
this.calculatedGridState = initializeCalculatedGridState();
this.multipleSelectedItemListChange = new EventEmitter();
// This is intentional
}
ngOnInit() {
const rowHeight = StylesUtilService.getStyleValue(this.hiddenElement, 'line-height');
this.gridOptions = {};
this.gridOptions.columnDefs = this.getColumnDefsWithOptions();
if (this.multipleSelection && !this.hideChecks) {
this.gridOptions.suppressRowClickSelection = true;
this.gridOptions.rowClassRules = {
'ag-row-disabled': (params) => {
return this.isDisabled;
},
};
}
else {
this.gridOptions.suppressRowClickSelection = this.isDisabled;
}
this.gridOptions.rowHeight = Number(rowHeight);
this.gridOptions.suppressDragLeaveHidesColumns = true;
this.gridOptions.suppressCellFocus = true;
this.gridOptions.enableRangeSelection = !this.isDisabled;
this.gridOptions.defaultColDef = {};
this.gridOptions.defaultColDef.resizable = false;
this.gridOptions.rowSelection = this.multipleSelection ? 'multiple' : 'single';
this.gridOptions.suppressRowDeselection = this.isDisabled;
this.gridOptions.context = { componentParent: this };
this.gridOptions.headerHeight = 0;
this.gridOptions.getRowId = (item) => this.getRowNodeId(item)
?.toString();
this.gridOptions.rowData = this.values;
this.gridOptions.enableBrowserTooltips = true;
}
getRowNodeId(item) {
if (item) {
if (item[this.getIdField()] != null) {
return item[this.getIdField()];
}
return item?.data[this.getIdField()] ?? '';
}
return '';
}
getColumnDefsWithOptions() {
const colDefs = [
{
rowDrag: this.rowDrag,
colId: this.getIdField(),
field: this.getDescriptionField(),
tooltipField: this.getDescriptionField()
}
];
if (this.multipleSelection && !this.hideChecks) {
colDefs.unshift({
colId: 'selectCol',
headerName: '',
checkboxSelection: true,
width: this.getCheckColumnWidth(),
suppressSizeToFit: true,
resizable: false,
suppressMovable: true,
pinned: 'left'
});
}
this.addSuppressSizeToFitToColumnsWithWidthDefined(colDefs);
return colDefs;
}
getCheckColumnWidth() {
return 32;
}
getAllFieldID() {
return 0;
}
getAllFieldDescription() {
return 'All';
}
cleanSelection() {
this.unselectAllNodes();
}
addSuppressSizeToFitToColumnsWithWidthDefined(colDefs) {
colDefs.forEach(function (columnDef) {
if (columnDef.width) {
columnDef.suppressSizeToFit = true;
}
});
}
doGridReady(event) {
this.gridOptions.api.addEventListener('bodyScroll', this.onBodyScroll.bind(this));
}
onBodyScroll(event) {
clearTimeout(this.scrollTimeout);
this.scrollTimeout = setTimeout(() => {
this.doAutoSizeManagement(event);
}, 150);
}
doAutoSizeManagement(event) {
AutosizeGridHelper.doAutoSizeManagement(this.calculatedGridState, this.gridOptions, event);
}
doGridSizeChanged(event) {
if (this.gridOptions.api) {
this.doAutoSizeManagement();
}
}
doClick(row) {
if (!this.multipleSelection && !this.isDisabled) {
this.selectedItem = row.node.data;
this.selectedItemChange.emit(row.node.data);
}
}
// overrides
onRowSelected(event) {
if (this.multipleSelection) {
if (!this.isDisabled && event.node && event.node.data && event.node.data[this.getIdField()] != null) {
if (this.multipleSelectedItemList) {
const elementIndexInSelectedList = this.multipleSelectedItemList.findIndex((item) => {
return item[this.getIdField()] === event.node.data[this.getIdField()];
});
if (event.node.selected) {
if (elementIndexInSelectedList < 0) {
if (this.showAll) {
if (event.node.data[this.getIdField()] === this.getAllFieldID()) {
this.multipleSelectedItemList.push(event.node.data);
this.unselectAllNodes();
}
else {
const elementAllInSelectedList = this.multipleSelectedItemList.findIndex((item) => {
return item[this.getIdField()] === this.getAllFieldID();
});
if (elementAllInSelectedList !== -1) {
this.unselectNodeAll();
this.multipleSelectedItemList = [];
}
this.multipleSelectedItemList.push(event.node.data);
this.multipleSelectedItemList = this.multipleSelectedItemList.slice();
}
}
else {
this.multipleSelectedItemList.push(event.node.data);
this.multipleSelectedItemList = this.multipleSelectedItemList.slice();
}
}
}
else {
if (elementIndexInSelectedList !== -1) {
this.multipleSelectedItemList.splice(elementIndexInSelectedList, 1);
this.multipleSelectedItemList = this.multipleSelectedItemList.slice();
}
}
}
else {
if (this.showAll && (event.node.data[this.getIdField()] === this.getAllFieldID())) {
this.multipleSelectedItemList.push(event.node.data);
this.unselectAllNodes();
}
else {
this.multipleSelectedItemList = [];
this.multipleSelectedItemList.push(event.node.data);
this.multipleSelectedItemList = this.multipleSelectedItemList.slice();
}
}
}
}
}
onModelUpdated(pEvent) {
this.doAutoSizeManagement();
this.selectItemInGrid();
return pEvent;
}
selectItemInGrid() {
if (this.gridOptions && this.gridOptions.api) {
this.gridOptions.api.forEachNode(node => {
if (node.data) {
if (this.multipleSelection) {
if (this.multipleSelectedItemList && this.multipleSelectedItemList.length > 0) {
if (this.multipleSelectedItemList
.filter((selectedItem) => {
return (selectedItem !== undefined && selectedItem[this.getIdField()] === this.getRowNodeId(node.data));
}).length > 0) {
node.selectThisNode(true);
}
else {
node.selectThisNode(false);
}
}
else {
node.selectThisNode(false);
}
}
else {
if (!this.selectedItem && this.selectFirstItem) {
if (node.rowIndex === 0) {
node.setSelected(true);
this.selectedItem = node.data;
this.selectedItemChange.emit(node.data);
return;
}
}
else if (this.selectedItem) {
if (this.getRowNodeId(node.data) === this.selectedItem[this.getIdField()]) {
node.setSelected(true);
return;
}
}
}
}
});
}
}
selectionItemListToIDList() {
const idList = new Array();
for (const item of this.multipleSelectedItemList) {
idList.push(item[this.getIdField()]);
}
return idList;
}
unselectAllNodes() {
if (this.gridOptions && this.gridOptions.api) {
this.gridOptions.api.forEachNode(node => {
if (node && this.getRowNodeId(node.data) !== this.getAllFieldID()) {
node.selectThisNode(false);
}
});
}
}
unselectNodeAll() {
if (this.gridOptions && this.gridOptions.api) {
this.gridOptions.api.forEachNode(node => {
if (node && this.getRowNodeId(node.data) === this.getAllFieldID()) {
node.selectThisNode(false);
}
});
}
}
onRowDragEnd(event) {
this.rowDragEnd.emit(event);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractListBox, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: AbstractListBox, inputs: { values: "values", rowDrag: "rowDrag", isDisabled: "isDisabled", selectedItem: "selectedItem", selectFirstItem: "selectFirstItem", multipleSelection: "multipleSelection", showAll: "showAll", hideChecks: "hideChecks", multipleSelectedItemList: "multipleSelectedItemList" }, outputs: { selectedItemChange: "selectedItemChange", multipleSelectedIDListChange: "multipleSelectedIDListChange", rowDragEnd: "rowDragEnd", multipleSelectedItemListChange: "multipleSelectedItemListChange" }, viewQueries: [{ propertyName: "hiddenElement", first: true, predicate: ["hidden"], descendants: true, static: true }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractListBox, decorators: [{
type: Directive
}], ctorParameters: () => [], propDecorators: { hiddenElement: [{
type: ViewChild,
args: ['hidden', { static: true }]
}], values: [{
type: Input
}], rowDrag: [{
type: Input
}], isDisabled: [{
type: Input
}], selectedItem: [{
type: Input
}], selectedItemChange: [{
type: Output
}], multipleSelectedIDListChange: [{
type: Output
}], rowDragEnd: [{
type: Output
}], selectFirstItem: [{
type: Input
}], multipleSelection: [{
type: Input
}], showAll: [{
type: Input
}], hideChecks: [{
type: Input
}], multipleSelectedItemList: [{
type: Input
}], multipleSelectedItemListChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi1jb21wb25lbnRzL3NyYy9saWIvbGlzdGJveC9hYnN0cmFjdC1saXN0Ym94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXVCLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBR3hILE1BQU0sT0FBZ0IsZUFBZTtJQUtwQyxJQUNJLE1BQU0sQ0FBQyxTQUFtQjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5QztJQUNGLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQU9ELElBQ0ksWUFBWSxDQUFDLEtBQVE7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQixDQUFDO0lBZ0JELElBQ0ksd0JBQXdCLENBQUMsS0FBZTtRQUMzQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ3ZD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QUFVO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBblVvQixlQUFlO2tHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRHBDLFNBQVM7d0RBSW1DLGFBQWE7c0JBQXhELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFHL0IsTUFBTTtzQkFEVCxLQUFLO2dCQVlVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFLRixZQUFZO3NCQURmLEtBQUs7Z0JBVUksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDVSxVQUFVO3NCQUExQixNQUFNO2dCQUVTLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFRRix3QkFBd0I7c0JBRDNCLEtBQUs7Z0JBWVcsOEJBQThCO3NCQUE5QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdHlsZXNVdGlsU2VydmljZSB9IGZyb20gJy4uL3V0aWxpdGllcy9zdHlsZXMudXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbERlZiwgR2V0Um93SWRQYXJhbXMsIEdyaWRPcHRpb25zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQXV0b3NpemVHcmlkSGVscGVyLCBDYWxjdWxhdGVkR3JpZFN0YXRlLCBpbml0aWFsaXplQ2FsY3VsYXRlZEdyaWRTdGF0ZSB9IGZyb20gJy4uL2hlbHBlci9hdXRvc2l6ZS1ncmlkLWhlbHBlcic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0TGlzdEJveDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblx0cHVibGljIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcblx0QFZpZXdDaGlsZCgnaGlkZGVuJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyBoaWRkZW5FbGVtZW50OiBFbGVtZW50UmVmO1xuXHRwdWJsaWMgX3ZhbHVlczogQXJyYXk8VD47XG5cdEBJbnB1dCgpXG5cdHNldCB2YWx1ZXMobmV3VmFsdWVzOiBBcnJheTxUPikge1xuXHRcdHRoaXMuX3ZhbHVlcyA9IG5ld1ZhbHVlcztcblx0XHRpZiAodGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xuXHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLl92YWx1ZXMpO1xuXHRcdH1cblx0fVxuXG5cdGdldCB2YWx1ZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlcztcblx0fVxuXG5cdEBJbnB1dCgpIHB1YmxpYyByb3dEcmFnID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuXG5cdHB1YmxpYyBfc2VsZWN0ZWRJdGVtOiBUO1xuXG5cdEBJbnB1dCgpXG5cdHNldCBzZWxlY3RlZEl0ZW0odmFsdWU6IFQpIHtcblx0XHR0aGlzLl9zZWxlY3RlZEl0ZW0gPSB2YWx1ZTtcblx0XHR0aGlzLnNlbGVjdEl0ZW1JbkdyaWQoKTtcblx0fVxuXG5cdGdldCBzZWxlY3RlZEl0ZW0oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbTtcblx0fVxuXG5cdEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3RlZElETGlzdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHB1YmxpYyByb3dEcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RGaXJzdEl0ZW0gPSBmYWxzZTtcblx0QElucHV0KCkgcHVibGljIG11bHRpcGxlU2VsZWN0aW9uID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBzaG93QWxsID0gZmFsc2U7XG5cdEBJbnB1dCgpIHB1YmxpYyBoaWRlQ2hlY2tzID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIF9tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3Q6IEFycmF5PFQ+O1xuXG5cdHByaXZhdGUgY2FsY3VsYXRlZEdyaWRTdGF0ZSA6IENhbGN1bGF0ZWRHcmlkU3RhdGUgPSBpbml0aWFsaXplQ2FsY3VsYXRlZEdyaWRTdGF0ZSgpO1xuXHRwcml2YXRlIHNjcm9sbFRpbWVvdXQ7XG5cblx0QElucHV0KClcblx0c2V0IG11bHRpcGxlU2VsZWN0ZWRJdGVtTGlzdCh2YWx1ZTogQXJyYXk8VD4pIHtcblx0XHR0aGlzLl9tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QgPSB2YWx1ZTtcblx0XHR0aGlzLnNlbGVjdEl0ZW1JbkdyaWQoKTtcblx0XHR0aGlzLm11bHRpcGxlU2VsZWN0ZWRJdGVtTGlzdENoYW5nZS5lbWl0KHRoaXMuX211bHRpcGxlU2VsZWN0ZWRJdGVtTGlzdCk7XG5cdFx0dGhpcy5tdWx0aXBsZVNlbGVjdGVkSURMaXN0Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb25JdGVtTGlzdFRvSURMaXN0KCkpO1xuXHR9XG5cblx0Z2V0IG11bHRpcGxlU2VsZWN0ZWRJdGVtTGlzdCgpOiBBcnJheTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMuX211bHRpcGxlU2VsZWN0ZWRJdGVtTGlzdDtcblx0fVxuXG5cdEBPdXRwdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcblx0XHQvLyBUaGlzIGlzIGludGVudGlvbmFsXG5cdH1cblxuXHRwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0SWRGaWVsZChsZXZlbD86IG51bWJlcik6IHN0cmluZztcblxuXHRwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0RGVzY3JpcHRpb25GaWVsZChsZXZlbD86IG51bWJlcik6IHN0cmluZztcblxuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0SW5zdGFuY2UoKTogVDtcblxuXHRwdWJsaWMgbmdPbkluaXQoKSB7XG5cblx0XHRjb25zdCByb3dIZWlnaHQgPSBTdHlsZXNVdGlsU2VydmljZS5nZXRTdHlsZVZhbHVlKHRoaXMuaGlkZGVuRWxlbWVudCwgJ2xpbmUtaGVpZ2h0Jyk7XG5cblx0XHR0aGlzLmdyaWRPcHRpb25zID0ge307XG5cblx0XHR0aGlzLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMgPSB0aGlzLmdldENvbHVtbkRlZnNXaXRoT3B0aW9ucygpO1xuXG5cdFx0aWYgKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gJiYgIXRoaXMuaGlkZUNoZWNrcykge1xuXHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuZ3JpZE9wdGlvbnMucm93Q2xhc3NSdWxlcyA9IHtcblx0XHRcdFx0J2FnLXJvdy1kaXNhYmxlZCc6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuXHRcdFx0XHR9LFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gdGhpcy5pc0Rpc2FibGVkO1xuXHRcdH1cblxuXHRcdHRoaXMuZ3JpZE9wdGlvbnMucm93SGVpZ2h0ID0gTnVtYmVyKHJvd0hlaWdodCk7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5zdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1ucyA9IHRydWU7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5zdXBwcmVzc0NlbGxGb2N1cyA9IHRydWU7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5lbmFibGVSYW5nZVNlbGVjdGlvbiA9ICF0aGlzLmlzRGlzYWJsZWQ7XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmID0ge307XG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmLnJlc2l6YWJsZSA9IGZhbHNlO1xuXHRcdHRoaXMuZ3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID0gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA/ICdtdWx0aXBsZScgOiAnc2luZ2xlJztcblx0XHR0aGlzLmdyaWRPcHRpb25zLnN1cHByZXNzUm93RGVzZWxlY3Rpb24gPSB0aGlzLmlzRGlzYWJsZWQ7XG5cblx0XHR0aGlzLmdyaWRPcHRpb25zLmNvbnRleHQgPSB7Y29tcG9uZW50UGFyZW50OiB0aGlzfTtcblxuXHRcdHRoaXMuZ3JpZE9wdGlvbnMuaGVhZGVySGVpZ2h0ID0gMDtcblx0XHR0aGlzLmdyaWRPcHRpb25zLmdldFJvd0lkID0gKGl0ZW06IEdldFJvd0lkUGFyYW1zKSA9PiB0aGlzLmdldFJvd05vZGVJZChpdGVtKVxuXHRcdFx0Py50b1N0cmluZygpO1xuXG5cdFx0dGhpcy5ncmlkT3B0aW9ucy5yb3dEYXRhID0gdGhpcy52YWx1ZXM7XG5cblx0XHR0aGlzLmdyaWRPcHRpb25zLmVuYWJsZUJyb3dzZXJUb29sdGlwcyA9IHRydWU7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZ2V0Um93Tm9kZUlkKGl0ZW06IEdldFJvd0lkUGFyYW1zKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXRlbSkge1xuXHRcdFx0aWYgKGl0ZW1bdGhpcy5nZXRJZEZpZWxkKCldICE9IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1bdGhpcy5nZXRJZEZpZWxkKCldO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGl0ZW0/LmRhdGFbdGhpcy5nZXRJZEZpZWxkKCldID8/ICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZ2V0Q29sdW1uRGVmc1dpdGhPcHRpb25zKCk6IEFycmF5PGFueT4ge1xuXG5cdFx0Y29uc3QgY29sRGVmczogQXJyYXk8YW55PiA9IFtcblx0XHRcdHtcblx0XHRcdFx0cm93RHJhZzogdGhpcy5yb3dEcmFnLFxuXHRcdFx0XHRjb2xJZDogICB0aGlzLmdldElkRmllbGQoKSxcblx0XHRcdFx0ZmllbGQ6ICAgdGhpcy5nZXREZXNjcmlwdGlvbkZpZWxkKCksXG5cdFx0XHRcdHRvb2x0aXBGaWVsZDogdGhpcy5nZXREZXNjcmlwdGlvbkZpZWxkKClcblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0aWYgKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gJiYgIXRoaXMuaGlkZUNoZWNrcykge1xuXHRcdFx0Y29sRGVmcy51bnNoaWZ0KHtcblx0XHRcdFx0Y29sSWQ6ICAgICAgICAgICAgICdzZWxlY3RDb2wnLFxuXHRcdFx0XHRoZWFkZXJOYW1lOiAgICAgICAgJycsXG5cdFx0XHRcdGNoZWNrYm94U2VsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHR3aWR0aDogICAgICAgICAgICAgdGhpcy5nZXRDaGVja0NvbHVtbldpZHRoKCksXG5cdFx0XHRcdHN1cHByZXNzU2l6ZVRvRml0OiB0cnVlLFxuXHRcdFx0XHRyZXNpemFibGU6ICAgICAgICAgZmFsc2UsXG5cdFx0XHRcdHN1cHByZXNzTW92YWJsZTogICB0cnVlLFxuXHRcdFx0XHRwaW5uZWQ6ICAgICAgICAgICAgJ2xlZnQnXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5hZGRTdXBwcmVzc1NpemVUb0ZpdFRvQ29sdW1uc1dpdGhXaWR0aERlZmluZWQoY29sRGVmcyk7XG5cblx0XHRyZXR1cm4gY29sRGVmcztcblx0fVxuXG5cdHByb3RlY3RlZCBnZXRDaGVja0NvbHVtbldpZHRoKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIDMyO1xuXHR9XG5cblx0cHVibGljIGdldEFsbEZpZWxkSUQoKTogbnVtYmVyIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHB1YmxpYyBnZXRBbGxGaWVsZERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICdBbGwnO1xuXHR9XG5cblx0cHVibGljIGNsZWFuU2VsZWN0aW9uKCkge1xuXHRcdHRoaXMudW5zZWxlY3RBbGxOb2RlcygpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGFkZFN1cHByZXNzU2l6ZVRvRml0VG9Db2x1bW5zV2l0aFdpZHRoRGVmaW5lZChjb2xEZWZzOiBDb2xEZWZbXSkge1xuXHRcdGNvbERlZnMuZm9yRWFjaChmdW5jdGlvbihjb2x1bW5EZWY6IENvbERlZikge1xuXHRcdFx0aWYgKGNvbHVtbkRlZi53aWR0aCkge1xuXHRcdFx0XHRjb2x1bW5EZWYuc3VwcHJlc3NTaXplVG9GaXQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGRvR3JpZFJlYWR5KGV2ZW50OiBhbnkpIHtcblx0XHR0aGlzLmdyaWRPcHRpb25zLmFwaS5hZGRFdmVudExpc3RlbmVyKCdib2R5U2Nyb2xsJywgdGhpcy5vbkJvZHlTY3JvbGwuYmluZCh0aGlzKSk7XG5cdH1cblxuXHRwcml2YXRlIG9uQm9keVNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVGltZW91dCk7XG5cdFx0dGhpcy5zY3JvbGxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRvQXV0b1NpemVNYW5hZ2VtZW50KGV2ZW50KTtcblx0XHR9LCAxNTApO1xuXHR9XG5cblx0cHJvdGVjdGVkIGRvQXV0b1NpemVNYW5hZ2VtZW50KGV2ZW50PzogYW55KSB7XG5cdFx0QXV0b3NpemVHcmlkSGVscGVyLmRvQXV0b1NpemVNYW5hZ2VtZW50KHRoaXMuY2FsY3VsYXRlZEdyaWRTdGF0ZSwgdGhpcy5ncmlkT3B0aW9ucywgZXZlbnQpO1xuXHR9XG5cblx0cHVibGljIGRvR3JpZFNpemVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcblx0XHRpZiAodGhpcy5ncmlkT3B0aW9ucy5hcGkpIHtcblx0XHRcdHRoaXMuZG9BdXRvU2l6ZU1hbmFnZW1lbnQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZG9DbGljayhyb3c6IGFueSkge1xuXHRcdGlmICghdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiAmJiAhdGhpcy5pc0Rpc2FibGVkKSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IHJvdy5ub2RlLmRhdGE7XG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5lbWl0KHJvdy5ub2RlLmRhdGEpO1xuXHRcdH1cblx0fVxuXG5cdC8vIG92ZXJyaWRlc1xuXHRwdWJsaWMgb25Sb3dTZWxlY3RlZChldmVudDogYW55KSB7XG5cdFx0aWYgKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24pIHtcblx0XHRcdGlmICghdGhpcy5pc0Rpc2FibGVkICYmIGV2ZW50Lm5vZGUgJiYgZXZlbnQubm9kZS5kYXRhICYmIGV2ZW50Lm5vZGUuZGF0YVt0aGlzLmdldElkRmllbGQoKV0gIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QpIHtcblx0XHRcdFx0XHRjb25zdCBlbGVtZW50SW5kZXhJblNlbGVjdGVkTGlzdDogbnVtYmVyID0gdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QuZmluZEluZGV4KChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXRlbVt0aGlzLmdldElkRmllbGQoKV0gPT09IGV2ZW50Lm5vZGUuZGF0YVt0aGlzLmdldElkRmllbGQoKV07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKGV2ZW50Lm5vZGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50SW5kZXhJblNlbGVjdGVkTGlzdCA8IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuc2hvd0FsbCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChldmVudC5ub2RlLmRhdGFbdGhpcy5nZXRJZEZpZWxkKCldID09PSB0aGlzLmdldEFsbEZpZWxkSUQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QucHVzaChldmVudC5ub2RlLmRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy51bnNlbGVjdEFsbE5vZGVzKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnRBbGxJblNlbGVjdGVkTGlzdDogbnVtYmVyID0gdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QuZmluZEluZGV4KChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtW3RoaXMuZ2V0SWRGaWVsZCgpXSA9PT0gdGhpcy5nZXRBbGxGaWVsZElEKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50QWxsSW5TZWxlY3RlZExpc3QgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudW5zZWxlY3ROb2RlQWxsKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0ID0gW107XG5cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0LnB1c2goZXZlbnQubm9kZS5kYXRhKTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0ID0gdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3Quc2xpY2UoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QucHVzaChldmVudC5ub2RlLmRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0ID0gdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3Quc2xpY2UoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudEluZGV4SW5TZWxlY3RlZExpc3QgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0LnNwbGljZShlbGVtZW50SW5kZXhJblNlbGVjdGVkTGlzdCwgMSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0ID0gdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3Quc2xpY2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuc2hvd0FsbCAmJiAoZXZlbnQubm9kZS5kYXRhW3RoaXMuZ2V0SWRGaWVsZCgpXSA9PT0gdGhpcy5nZXRBbGxGaWVsZElEKCkpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm11bHRpcGxlU2VsZWN0ZWRJdGVtTGlzdC5wdXNoKGV2ZW50Lm5vZGUuZGF0YSk7XG5cdFx0XHRcdFx0XHR0aGlzLnVuc2VsZWN0QWxsTm9kZXMoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0LnB1c2goZXZlbnQubm9kZS5kYXRhKTtcblx0XHRcdFx0XHRcdHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0ID0gdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3Quc2xpY2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgb25Nb2RlbFVwZGF0ZWQocEV2ZW50OiBhbnkpIHtcblx0XHR0aGlzLmRvQXV0b1NpemVNYW5hZ2VtZW50KCk7XG5cdFx0dGhpcy5zZWxlY3RJdGVtSW5HcmlkKCk7XG5cdFx0cmV0dXJuIHBFdmVudDtcblx0fVxuXG5cdHByb3RlY3RlZCBzZWxlY3RJdGVtSW5HcmlkKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmdyaWRPcHRpb25zICYmIHRoaXMuZ3JpZE9wdGlvbnMuYXBpKSB7XG5cdFx0XHR0aGlzLmdyaWRPcHRpb25zLmFwaS5mb3JFYWNoTm9kZShub2RlID0+IHtcblx0XHRcdFx0aWYgKG5vZGUuZGF0YSkge1xuXHRcdFx0XHRcdGlmICh0aGlzLm11bHRpcGxlU2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QgJiYgdGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5tdWx0aXBsZVNlbGVjdGVkSXRlbUxpc3Rcblx0XHRcdFx0XHRcdFx0XHQuZmlsdGVyKChzZWxlY3RlZEl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoc2VsZWN0ZWRJdGVtICE9PSB1bmRlZmluZWQgJiYgc2VsZWN0ZWRJdGVtW3RoaXMuZ2V0SWRGaWVsZCgpXSA9PT0gdGhpcy5nZXRSb3dOb2RlSWQobm9kZS5kYXRhKSk7XG5cdFx0XHRcdFx0XHRcdFx0fSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUuc2VsZWN0VGhpc05vZGUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5zZWxlY3RUaGlzTm9kZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUuc2VsZWN0VGhpc05vZGUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtICYmIHRoaXMuc2VsZWN0Rmlyc3RJdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChub2RlLnJvd0luZGV4ID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IG5vZGUuZGF0YTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5lbWl0KG5vZGUuZGF0YSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmdldFJvd05vZGVJZChub2RlLmRhdGEpID09PSB0aGlzLnNlbGVjdGVkSXRlbVt0aGlzLmdldElkRmllbGQoKV0pIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlLnNldFNlbGVjdGVkKHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzZWxlY3Rpb25JdGVtTGlzdFRvSURMaXN0KCk6IEFycmF5PHN0cmluZyB8IG51bWJlcj4ge1xuXHRcdGNvbnN0IGlkTGlzdCA9IG5ldyBBcnJheTxzdHJpbmcgfCBudW1iZXI+KCk7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMubXVsdGlwbGVTZWxlY3RlZEl0ZW1MaXN0KSB7XG5cdFx0XHRpZExpc3QucHVzaChpdGVtW3RoaXMuZ2V0SWRGaWVsZCgpXSk7XG5cdFx0fVxuXHRcdHJldHVybiBpZExpc3Q7XG5cdH1cblxuXHRwcml2YXRlIHVuc2VsZWN0QWxsTm9kZXMoKSB7XG5cdFx0aWYgKHRoaXMuZ3JpZE9wdGlvbnMgJiYgdGhpcy5ncmlkT3B0aW9ucy5hcGkpIHtcblx0XHRcdHRoaXMuZ3JpZE9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuXHRcdFx0XHRpZiAobm9kZSAmJiB0aGlzLmdldFJvd05vZGVJZChub2RlLmRhdGEpICE9PSB0aGlzLmdldEFsbEZpZWxkSUQoKSkge1xuXHRcdFx0XHRcdG5vZGUuc2VsZWN0VGhpc05vZGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVuc2VsZWN0Tm9kZUFsbCgpIHtcblx0XHRpZiAodGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xuXHRcdFx0dGhpcy5ncmlkT3B0aW9ucy5hcGkuZm9yRWFjaE5vZGUobm9kZSA9PiB7XG5cdFx0XHRcdGlmIChub2RlICYmIHRoaXMuZ2V0Um93Tm9kZUlkKG5vZGUuZGF0YSkgPT09IHRoaXMuZ2V0QWxsRmllbGRJRCgpKSB7XG5cdFx0XHRcdFx0bm9kZS5zZWxlY3RUaGlzTm9kZShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBvblJvd0RyYWdFbmQoZXZlbnQ6IGFueSkge1xuXHRcdHRoaXMucm93RHJhZ0VuZC5lbWl0KGV2ZW50KTtcblx0fVxuXG59XG4iXX0=