@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
178 lines • 22.2 kB
JavaScript
import { __decorate, __extends, __metadata, __read, __spread } from "tslib";
import { ChangeDetectionStrategy, Component, HostBinding, forwardRef, ElementRef, ViewChildren, QueryList, ViewChild, TemplateRef } from '@angular/core';
import { IgxRowDirective } from '../row.directive';
import { IgxHierarchicalGridCellComponent } from './hierarchical-cell.component';
var IgxHierarchicalRowComponent = /** @class */ (function (_super) {
__extends(IgxHierarchicalRowComponent, _super);
function IgxHierarchicalRowComponent() {
var _this = _super !== null && _super.apply(this, arguments) || this;
/**
* @hidden
*/
_this.tabindex = 0;
/**
* @hidden
* @internal
*/
_this.select = function () {
_this.grid.selectRows([_this.rowID]);
};
/**
* @hidden
* @internal
*/
_this.deselect = function () {
_this.grid.deselectRows([_this.rowID]);
};
return _this;
}
IgxHierarchicalRowComponent_1 = IgxHierarchicalRowComponent;
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "viewIndex", {
get: function () {
return this.index + this.grid.page * this.grid.perPage;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "expanded", {
/**
* Returns whether the row is expanded.
* ```typescript
* const RowExpanded = this.grid1.rowList.first.expanded;
* ```
*/
get: function () {
return this.grid.isExpanded(this.rowData);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "hasChildren", {
get: function () {
return !!this.grid.childLayoutKeys.length;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "highlighted", {
/**
* @hidden
*/
get: function () {
return this.grid && this.grid.highlightedRowID === this.rowID;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxHierarchicalRowComponent.prototype.expanderClick = function (event) {
event.stopPropagation();
this.toggle();
};
/**
* Toggles the hierarchical row.
* ```typescript
* this.grid1.rowList.first.toggle()
* ```
*/
IgxHierarchicalRowComponent.prototype.toggle = function () {
var _this = this;
if (this.added) {
return;
}
var grid = this.gridAPI.grid;
this.endEdit(grid.rootGrid);
var state = this.gridAPI.grid.hierarchicalState;
if (!this.expanded) {
state.push({ rowID: this.rowID });
grid.hierarchicalState = __spread(state);
}
else {
grid.hierarchicalState = state.filter(function (v) {
return v.rowID !== _this.rowID;
});
}
grid.cdr.detectChanges();
};
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "iconTemplate", {
/**
* @hidden
*/
get: function () {
var expandable = true;
if (this.grid.hasChildrenKey) {
expandable = this.rowData[this.grid.hasChildrenKey];
}
if (!expandable) {
return this.defaultEmptyTemplate;
}
if (this.expanded) {
return this.grid.rowExpandedIndicatorTemplate || this.defaultExpandedTemplate;
}
else {
return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;
}
},
enumerable: true,
configurable: true
});
IgxHierarchicalRowComponent.prototype.endEdit = function (grid) {
if (grid.crudService.inEditMode) {
grid.endEdit();
}
grid.hgridAPI.getChildGrids(true).forEach(function (g) {
if (g.crudService.inEditMode) {
g.endEdit();
}
});
};
var IgxHierarchicalRowComponent_1;
__decorate([
ViewChildren(forwardRef(function () { return IgxHierarchicalGridCellComponent; }), { read: IgxHierarchicalGridCellComponent }),
__metadata("design:type", QueryList)
], IgxHierarchicalRowComponent.prototype, "cells", void 0);
__decorate([
ViewChild('expander', { read: ElementRef }),
__metadata("design:type", ElementRef)
], IgxHierarchicalRowComponent.prototype, "expander", void 0);
__decorate([
ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxHierarchicalRowComponent.prototype, "defaultExpandedTemplate", void 0);
__decorate([
ViewChild('defaultEmptyTemplate', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxHierarchicalRowComponent.prototype, "defaultEmptyTemplate", void 0);
__decorate([
ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxHierarchicalRowComponent.prototype, "defaultCollapsedTemplate", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxHierarchicalRowComponent.prototype, "tabindex", void 0);
__decorate([
HostBinding('class.igx-grid__tr--expanded'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxHierarchicalRowComponent.prototype, "expanded", null);
__decorate([
HostBinding('class.igx-grid__tr--highlighted'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxHierarchicalRowComponent.prototype, "highlighted", null);
IgxHierarchicalRowComponent = IgxHierarchicalRowComponent_1 = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-hierarchical-grid-row',
template: "<div (click)=\"expanderClick($event)\" class=\"igx-grid__hierarchical-expander\" [tabIndex]=\"tabindex\" *ngIf=\"hasChildren\" #expander>\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n</div>\n<ng-template #defaultExpandedTemplate>\n <igx-icon [isActive]='!added' fontSet=\"material\">expand_more</igx-icon>\n </ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon [isActive]='!added' fontSet=\"material\">chevron_right</igx-icon>\n </ng-template>\n\n <ng-template #defaultEmptyTemplate>\n <igx-icon fontSet=\"material\"></igx-icon>\n</ng-template>\n\n<ng-container *ngIf=\"rowDraggable\">\n <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"showRowSelectors\">\n <div class=\"igx-grid__cbx-selection\" (click)=\"onRowSelectorClick($event)\">\n <ng-template *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n context: { $implicit: {\n index: viewIndex,\n rowID: rowID,\n selected: selected,\n select: select,\n deselect: deselect }}\">\n </ng-template>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0\">\n <igx-hierarchical-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.isLastPinned\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\">\n </igx-hierarchical-grid-cell>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"' [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-hierarchical-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\">\n </igx-hierarchical-grid-cell>\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [readonly]=\"true\"\n [checked]=\"selected\"\n disableRipple=\"true\"\n [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n",
providers: [{ provide: IgxRowDirective, useExisting: forwardRef(function () { return IgxHierarchicalRowComponent_1; }) }]
})
], IgxHierarchicalRowComponent);
return IgxHierarchicalRowComponent;
}(IgxRowDirective));
export { IgxHierarchicalRowComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBU2pGO0lBQWlELCtDQUE2QztJQUE5RjtRQUFBLHFFQTZJQztRQXhHRzs7V0FFRztRQUVJLGNBQVEsR0FBRyxDQUFDLENBQUM7UUF5RHBCOzs7V0FHRztRQUNJLFlBQU0sR0FBRztZQUNaLEtBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBRUQ7OztXQUdHO1FBQ0ksY0FBUSxHQUFHO1lBQ2QsS0FBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUE7O0lBNkJMLENBQUM7b0NBN0lZLDJCQUEyQjtJQWVwQyxzQkFBSSxrREFBUzthQUFiO1lBQ0ksT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNELENBQUM7OztPQUFBO0lBaUNELHNCQUFXLGlEQUFRO1FBUGY7Ozs7O09BS0Q7YUFFSDtZQUNJLE9B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ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGZvcndhcmRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtY2VsbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1oaWVyYXJjaGljYWwtZ3JpZC1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaGljYWwtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElneFJvd0RpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWd4SGllcmFyY2hpY2FsUm93Q29tcG9uZW50KSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQgZXh0ZW5kcyBJZ3hSb3dEaXJlY3RpdmU8SWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudD4ge1xuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIGNlbGxzIG9mIHRoZSB0aGlyZCBzZWxlY3RlZCByb3dcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dDZWxscyA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMl0uY2VsbHM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50KSwgeyByZWFkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjZWxsczogUXVlcnlMaXN0PElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2V4cGFuZGVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHVibGljIGV4cGFuZGVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyB0aGlzLmdyaWQucGFnZSAqIHRoaXMuZ3JpZC5wZXJQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICBAVmlld0NoaWxkKCdkZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgcHJvdGVjdGVkIGRlZmF1bHRFeHBhbmRlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFbXB0eVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICBwcm90ZWN0ZWQgZGVmYXVsdEVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICBwcm90ZWN0ZWQgZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgICAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJvdyBpcyBleHBhbmRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgUm93RXhwYW5kZWQgPSB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QuZXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdHItLWV4cGFuZGVkJylcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzRXhwYW5kZWQodGhpcy5yb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0NoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gICEhdGhpcy5ncmlkLmNoaWxkTGF5b3V0S2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RyLS1oaWdobGlnaHRlZCcpXG4gICAgcHVibGljIGdldCBoaWdobGlnaHRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQuaGlnaGxpZ2h0ZWRSb3dJRCA9PT0gdGhpcy5yb3dJRDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgcHVibGljIGV4cGFuZGVyQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgaGllcmFyY2hpY2FsIHJvdy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LnRvZ2dsZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgICAgIHRoaXMuZW5kRWRpdChncmlkLnJvb3RHcmlkKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdyaWRBUEkuZ3JpZC5oaWVyYXJjaGljYWxTdGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICBzdGF0ZS5wdXNoKHsgcm93SUQ6IHRoaXMucm93SUQgfSk7XG4gICAgICAgICAgICBncmlkLmhpZXJhcmNoaWNhbFN0YXRlID0gWy4uLnN0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuaGllcmFyY2hpY2FsU3RhdGUgPSBzdGF0ZS5maWx0ZXIodiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYucm93SUQgIT09IHRoaXMucm93SUQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3dzKFt0aGlzLnJvd0lEXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkLmRlc2VsZWN0Um93cyhbdGhpcy5yb3dJRF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBpY29uVGVtcGxhdGUoKSB7XG4gICAgICAgIGxldCBleHBhbmRhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDaGlsZHJlbktleSkge1xuICAgICAgICAgICAgZXhwYW5kYWJsZSA9IHRoaXMucm93RGF0YVt0aGlzLmdyaWQuaGFzQ2hpbGRyZW5LZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVtcHR5VGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RXhwYW5kZWRJbmRpY2F0b3JUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRFeHBhbmRlZFRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dDb2xsYXBzZWRJbmRpY2F0b3JUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW5kRWRpdChncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChncmlkLmNydWRTZXJ2aWNlLmluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIGdyaWQuZW5kRWRpdCgpO1xuICAgICAgICB9XG4gICAgICAgIGdyaWQuaGdyaWRBUEkuZ2V0Q2hpbGRHcmlkcyh0cnVlKS5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgaWYgKGcuY3J1ZFNlcnZpY2UuaW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgZy5lbmRFZGl0KCk7XG4gICAgICAgIH19KTtcbiAgICB9XG59XG4iXX0=