UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

145 lines 19.4 kB
import { __decorate, __metadata } from "tslib"; import { IgxGridCellComponent } from '../cell.component'; import { GridBaseAPIService } from '../api.service'; import { ChangeDetectorRef, ElementRef, ChangeDetectionStrategy, Component, OnInit, HostListener, NgZone } from '@angular/core'; import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/selection.service'; import { HammerGesturesManager } from '../../core/touch'; import { PlatformUtil } from '../../core/utils'; let IgxHierarchicalGridCellComponent = class IgxHierarchicalGridCellComponent extends IgxGridCellComponent { constructor(selectionService, crudService, gridAPI, cdr, helement, zone, touchManager, platformUtil) { super(selectionService, crudService, gridAPI, cdr, helement, zone, touchManager, platformUtil); this.selectionService = selectionService; this.crudService = crudService; this.gridAPI = gridAPI; this.cdr = cdr; this.helement = helement; this.zone = zone; this.platformUtil = platformUtil; } ngOnInit() { super.ngOnInit(); this._rootGrid = this._getRootGrid(); } _getRootGrid() { let currGrid = this.grid; while (currGrid.parent) { currGrid = currGrid.parent; } return currGrid; } // TODO: Extend the new selection service to avoid complete traversal _clearAllHighlights() { [this._rootGrid, ...this._rootGrid.getChildGrids(true)].forEach(grid => { grid.selectionService.clear(); grid.selectionService.activeElement = null; grid.nativeElement.classList.remove('igx-grid__tr--highlighted'); grid.highlightedRowID = null; grid.cdr.markForCheck(); }); } /** * @hidden * @internal */ onFocus(event) { if (this.focused) { return; } this._clearAllHighlights(); const currentElement = this.grid.nativeElement; let parentGrid = this.grid; let childGrid; // add highligh to the current grid if (this._rootGrid.id !== currentElement.id) { currentElement.classList.add('igx-grid__tr--highlighted'); } // add highligh to the current grid while (this._rootGrid.id !== parentGrid.id) { childGrid = parentGrid; parentGrid = parentGrid.parent; const parentRowID = parentGrid.hgridAPI.getParentRowId(childGrid); parentGrid.highlightedRowID = parentRowID; } super.onFocus(event); } // TODO: Refactor /** * @hidden * @internal */ dispatchEvent(event) { const key = event.key.toLowerCase(); if (event.altKey && !this.row.added) { const grid = this.gridAPI.grid; const state = this.gridAPI.grid.hierarchicalState; const collapse = this.row.expanded && (key === 'left' || key === 'arrowleft' || key === 'up' || key === 'arrowup'); const expand = !this.row.expanded && (key === 'right' || key === 'arrowright' || key === 'down' || key === 'arrowdown'); if (collapse) { grid.hierarchicalState = state.filter(v => { return v.rowID !== this.row.rowID; }); } else if (expand) { state.push({ rowID: this.row.rowID }); grid.hierarchicalState = [...state]; } if (expand || collapse) { const rowID = this.cellID.rowID; grid.cdr.detectChanges(); this.persistFocusedCell(rowID); } return; } super.dispatchEvent(event); } persistFocusedCell(rowID) { requestAnimationFrame(() => { // TODO: Test it out const cell = this.gridAPI.get_cell_by_key(rowID, this.column.field); if (cell) { cell.nativeElement.focus(); } }); } }; IgxHierarchicalGridCellComponent.ctorParameters = () => [ { type: IgxGridSelectionService }, { type: IgxGridCRUDService }, { type: GridBaseAPIService }, { type: ChangeDetectorRef }, { type: ElementRef }, { type: NgZone }, { type: HammerGesturesManager }, { type: PlatformUtil } ]; __decorate([ HostListener('focus', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxHierarchicalGridCellComponent.prototype, "onFocus", null); __decorate([ HostListener('keydown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], IgxHierarchicalGridCellComponent.prototype, "dispatchEvent", null); IgxHierarchicalGridCellComponent = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, selector: 'igx-hierarchical-grid-cell', template: "<ng-template #defaultCell>\n <div igxTextHighlight style=\"pointer-events: none\" [cssClass]=\"highlightClass\" [activeCssClass]=\"activeHighlightClass\" [groupName]=\"gridID\"\n [value]=\"formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal: grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value\"\n [row]=\"rowData\" [column]=\"this.column.field\" [containerClass]=\"'igx-grid__td-text'\"\n class=\"igx-grid__td-text\">{{ formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal:\n grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" />\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\"\n [igxFocus]=\"focused\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outletDirective\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [(value)]=\"editValue\" [igxFocus]=\"focused\" [labelVisibility]=\"false\">\n </igx-date-picker>\n </ng-container>\n</ng-template>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n", providers: [HammerGesturesManager] }), __metadata("design:paramtypes", [IgxGridSelectionService, IgxGridCRUDService, GridBaseAPIService, ChangeDetectorRef, ElementRef, NgZone, HammerGesturesManager, PlatformUtil]) ], IgxHierarchicalGridCellComponent); export { IgxHierarchicalGridCellComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtY2VsbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUNyRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFTaEQsSUFBYSxnQ0FBZ0MsR0FBN0MsTUFBYSxnQ0FBaUMsU0FBUSxvQkFBb0I7SUFLdEUsWUFDYyxnQkFBeUMsRUFDekMsV0FBK0IsRUFDbEMsT0FBeUQsRUFDekQsR0FBc0IsRUFDckIsUUFBb0IsRUFDbEIsSUFBWSxFQUN0QixZQUFtQyxFQUN6QixZQUEwQjtRQUVoQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFUekYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBa0Q7UUFDekQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIs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QUksSUFBSSxFQUFFO2dCQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDOUI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFBOztZQXpHbUMsdUJBQXVCO1lBQzVCLGtCQUFrQjtZQUN6QixrQkFBa0I7WUFDdEIsaUJBQWlCO1lBQ1gsVUFBVTtZQUNaLE1BQU07WUFDUixxQkFBcUI7WUFDWCxZQUFZOztBQWtDeEM7SUFEQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7K0RBdUJqQztBQVFEO0lBREMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztxQ0FDZixhQUFhOztxRUF1QmpDO0FBcEdRLGdDQUFnQztJQVA1QyxTQUFTLENBQUM7UUFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxtQkFBbUIsRUFBRSxLQUFLO1FBQzFCLFFBQVEsRUFBRSw0QkFBNEI7UUFDdEMsaS9EQUF1QztRQUN2QyxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztLQUNyQyxDQUFDO3FDQU9rQyx1QkFBdUI7UUFDNUIsa0JBQWtCO1FBQ3pCLGtCQUFrQjtRQUN0QixpQkFBaUI7UUFDWCxVQUFVO1FBQ1osTUFBTTtRQUNSLHFCQUFxQjtRQUNYLFlBQVk7R0FiL0IsZ0NBQWdDLENBK0c1QztTQS9HWSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJZ3hHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LFxuICAgICBPbkluaXQsIEhvc3RMaXN0ZW5lciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsIElneEdyaWRDUlVEU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBIYW1tZXJHZXN0dXJlc01hbmFnZXIgfSBmcm9tICcuLi8uLi9jb3JlL3RvdWNoJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1oaWVyYXJjaGljYWwtZ3JpZC1jZWxsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vLi4vY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbSGFtbWVyR2VzdHVyZXNNYW5hZ2VyXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCBleHRlbmRzIElneEdyaWRDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIC8vIHByb3RlY3RlZCBoU2VsZWN0aW9uO1xuICAgIHByb3RlY3RlZCBfcm9vdEdyaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgY3J1ZFNlcnZpY2U6IElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgcHVibGljIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50PixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgaGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHRvdWNoTWFuYWdlcjogSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzdXBlcihzZWxlY3Rpb25TZXJ2aWNlLCBjcnVkU2VydmljZSwgZ3JpZEFQSSwgY2RyLCBoZWxlbWVudCwgem9uZSwgdG91Y2hNYW5hZ2VyLCBwbGF0Zm9ybVV0aWwpO1xuICAgICAgICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuX3Jvb3RHcmlkID0gdGhpcy5fZ2V0Um9vdEdyaWQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRSb290R3JpZCgpIHtcbiAgICAgICAgbGV0IGN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB3aGlsZSAoY3VyckdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICBjdXJyR3JpZCA9IGN1cnJHcmlkLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VyckdyaWQ7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRXh0ZW5kIHRoZSBuZXcgc2VsZWN0aW9uIHNlcnZpY2UgdG8gYXZvaWQgY29tcGxldGUgdHJhdmVyc2FsXG4gICAgX2NsZWFyQWxsSGlnaGxpZ2h0cygpIHtcbiAgICAgICAgW3RoaXMuX3Jvb3RHcmlkLCAuLi50aGlzLl9yb290R3JpZC5nZXRDaGlsZEdyaWRzKHRydWUpXS5mb3JFYWNoKGdyaWQgPT4ge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyKCk7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICBncmlkLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaWd4LWdyaWRfX3RyLS1oaWdobGlnaHRlZCcpO1xuICAgICAgICAgICAgZ3JpZC5oaWdobGlnaHRlZFJvd0lEID0gbnVsbDtcbiAgICAgICAgICAgIGdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxuICAgIG9uRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NsZWFyQWxsSGlnaGxpZ2h0cygpO1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgcGFyZW50R3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgbGV0IGNoaWxkR3JpZDtcbiAgICAgICAgLy8gYWRkIGhpZ2hsaWdoIHRvIHRoZSBjdXJyZW50IGdyaWRcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3RHcmlkLmlkICE9PSBjdXJyZW50RWxlbWVudC5pZCkge1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWd4LWdyaWRfX3RyLS1oaWdobGlnaHRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGhpZ2hsaWdoIHRvIHRoZSBjdXJyZW50IGdyaWRcbiAgICAgICAgd2hpbGUgKHRoaXMuX3Jvb3RHcmlkLmlkICE9PSBwYXJlbnRHcmlkLmlkKSB7XG4gICAgICAgICAgICBjaGlsZEdyaWQgPSBwYXJlbnRHcmlkO1xuICAgICAgICAgICAgcGFyZW50R3JpZCA9IHBhcmVudEdyaWQucGFyZW50O1xuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHBhcmVudEdyaWQuaGdyaWRBUEkuZ2V0UGFyZW50Um93SWQoY2hpbGRHcmlkKTtcbiAgICAgICAgICAgIHBhcmVudEdyaWQuaGlnaGxpZ2h0ZWRSb3dJRCA9IHBhcmVudFJvd0lEO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uRm9jdXMoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgIXRoaXMucm93LmFkZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ3JpZEFQSS5ncmlkLmhpZXJhcmNoaWNhbFN0YXRlO1xuICAgICAgICAgICAgY29uc3QgY29sbGFwc2UgPSB0aGlzLnJvdy5leHBhbmRlZCAmJiAoa2V5ID09PSAnbGVmdCcgfHwga2V5ID09PSAnYXJyb3dsZWZ0JyB8fCBrZXkgPT09ICd1cCcgfHwga2V5ID09PSAnYXJyb3d1cCcpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kID0gIXRoaXMucm93LmV4cGFuZGVkICYmIChrZXkgPT09ICdyaWdodCcgfHwga2V5ID09PSAnYXJyb3dyaWdodCcgfHwga2V5ID09PSAnZG93bicgfHwga2V5ID09PSAnYXJyb3dkb3duJyk7XG4gICAgICAgICAgICBpZiAoY29sbGFwc2UpIHtcbiAgICAgICAgICAgICAgICBncmlkLmhpZXJhcmNoaWNhbFN0YXRlID0gc3RhdGUuZmlsdGVyKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5yb3dJRCAhPT0gdGhpcy5yb3cucm93SUQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4cGFuZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLnB1c2goeyByb3dJRDogdGhpcy5yb3cucm93SUQgfSk7XG4gICAgICAgICAgICAgICAgZ3JpZC5oaWVyYXJjaGljYWxTdGF0ZSA9IFsuLi5zdGF0ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXhwYW5kIHx8IGNvbGxhcHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmNlbGxJRC5yb3dJRDtcbiAgICAgICAgICAgICAgICBncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0Rm9jdXNlZENlbGwocm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwZXJzaXN0Rm9jdXNlZENlbGwocm93SUQpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE86IFRlc3QgaXQgb3V0XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkQVBJLmdldF9jZWxsX2J5X2tleShyb3dJRCwgdGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICBjZWxsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19