@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
216 lines • 22.4 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, Input, OnInit, ViewChild, AfterViewInit, SimpleChanges, ComponentFactoryResolver } from '@angular/core';
import { GridBaseAPIService } from '.././api.service';
import { IgxRowIslandComponent } from './row-island.component';
import { IgxGridComponent } from '../grid/grid.component';
import { takeUntil } from 'rxjs/operators';
var IgxChildGridRowComponent = /** @class */ (function () {
function IgxChildGridRowComponent(gridAPI, element, resolver, cdr) {
this.gridAPI = gridAPI;
this.element = element;
this.cdr = cdr;
/**
* Returns whether the row is expanded.
* ```typescript
* const RowExpanded = this.grid1.rowList.first.expanded;
* ```
*/
this.expanded = false;
/**
* The data passed to the row component.
*
* ```typescript
* // get the row data for the first selected row
* let selectedRowData = this.grid.selectedRows[0].rowData;
* ```
*/
this.rowData = [];
/**
* @hidden
*/
this.tabindex = 0;
/**
* @hidden
*/
this.role = 'row';
this.resolver = resolver;
}
Object.defineProperty(IgxChildGridRowComponent.prototype, "parentHasScroll", {
/**
* @hidden
*/
get: function () {
return !this.parentGrid.verticalScrollContainer.dc.instance.notVirtual;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxChildGridRowComponent.prototype, "parentGrid", {
/**
* Get a reference to the grid that contains the selected row.
*
* ```typescript
* handleRowSelection(event) {
* // the grid on which the onRowSelectionChange event was triggered
* const grid = event.row.grid;
* }
* ```
*
* ```html
* <igx-grid
* [data]="data"
* (onRowSelectionChange)="handleRowSelection($event)">
* </igx-grid>
* ```
*/
// TODO: Refactor
get: function () {
return this.gridAPI.grid;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxChildGridRowComponent.prototype, "level", {
get: function () {
return this.layout.level;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxChildGridRowComponent.prototype, "nativeElement", {
/**
* The native DOM element representing the row. Could be null in certain environments.
*
* ```typescript
* // get the nativeElement of the second selected row
* let selectedRowNativeElement = this.grid.selectedRows[1].nativeElement;
* ```
*/
get: function () {
return this.element.nativeElement;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxChildGridRowComponent.prototype.ngOnInit = function () {
var _this = this;
this.layout.onLayoutChange.subscribe(function (ch) {
_this._handleLayoutChanges(ch);
});
var changes = this.layout.initialChanges;
changes.forEach(function (change) {
_this._handleLayoutChanges(change);
});
this.hGrid.parent = this.parentGrid;
this.hGrid.parentIsland = this.layout;
this.hGrid.childRow = this;
// handler logic that re-emits hgrid events on the row island
this.setupEventEmitters();
this.layout.onGridCreated.emit({
owner: this.layout,
parentID: this.rowData.rowID,
grid: this.hGrid
});
};
/**
* @hidden
*/
IgxChildGridRowComponent.prototype.ngAfterViewInit = function () {
var _this = this;
this.hGrid.childLayoutList = this.layout.children;
if (this.layout.childColumns.length > 0 && !this.hGrid.autoGenerate) {
this.hGrid.createColumnsList(this.layout.childColumns.toArray());
}
var layouts = this.hGrid.childLayoutList.toArray();
layouts.forEach(function (l) { return _this.hGrid.hgridAPI.registerChildRowIsland(l); });
this.parentGrid.hgridAPI.registerChildGrid(this.rowData.rowID, this.layout.key, this.hGrid);
this.layout.rowIslandAPI.registerChildGrid(this.rowData.rowID, this.hGrid);
this.hGrid.cdr.detectChanges();
};
IgxChildGridRowComponent.prototype.setupEventEmitters = function () {
var _this = this;
var destructor = takeUntil(this.hGrid.destroy$);
var factory = this.resolver.resolveComponentFactory(IgxGridComponent);
// exclude outputs related to two-way binding functionality
var inputNames = factory.inputs.map(function (input) { return input.propName; });
var outputs = factory.outputs.filter(function (o) {
var matchingInputPropName = o.propName.slice(0, o.propName.indexOf('Change'));
return inputNames.indexOf(matchingInputPropName) === -1;
});
outputs.forEach(function (output) {
if (_this.hGrid[output.propName]) {
_this.hGrid[output.propName].pipe(destructor).subscribe(function (args) {
if (!args) {
args = {};
}
args.owner = _this.hGrid;
_this.layout[output.propName].emit(args);
});
}
});
};
IgxChildGridRowComponent.prototype._handleLayoutChanges = function (changes) {
for (var change in changes) {
if (changes.hasOwnProperty(change)) {
this.hGrid[change] = changes[change].currentValue;
}
}
};
IgxChildGridRowComponent.ctorParameters = function () { return [
{ type: GridBaseAPIService },
{ type: ElementRef },
{ type: ComponentFactoryResolver },
{ type: ChangeDetectorRef }
]; };
__decorate([
Input(),
__metadata("design:type", IgxRowIslandComponent)
], IgxChildGridRowComponent.prototype, "layout", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], IgxChildGridRowComponent.prototype, "parentGridID", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxChildGridRowComponent.prototype, "rowData", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], IgxChildGridRowComponent.prototype, "index", void 0);
__decorate([
ViewChild('hgrid', { static: true }),
__metadata("design:type", Object)
], IgxChildGridRowComponent.prototype, "hGrid", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxChildGridRowComponent.prototype, "tabindex", void 0);
__decorate([
HostBinding('attr.role'),
__metadata("design:type", Object)
], IgxChildGridRowComponent.prototype, "role", void 0);
__decorate([
HostBinding('attr.data-level'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxChildGridRowComponent.prototype, "level", null);
IgxChildGridRowComponent = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-child-grid-row',
template: "<div class=\"igx-grid__hierarchical-indent\" [ngClass]=\"{'igx-grid__hierarchical-indent--scroll': parentHasScroll}\">\n <igx-hierarchical-grid #hgrid [data]='rowData.childGridsData[layout.key]'></igx-hierarchical-grid>\n</div>\n"
}),
__metadata("design:paramtypes", [GridBaseAPIService,
ElementRef,
ComponentFactoryResolver,
ChangeDetectorRef])
], IgxChildGridRowComponent);
return IgxChildGridRowComponent;
}());
export { IgxChildGridRowComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtZ3JpZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9jaGlsZC1ncmlkLXJvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsRUFDYixhQUFhLEVBQ2Isd0JBQXdCLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVEzQztJQXdHSSxrQ0FBbUIsT0FBdUUsRUFDL0UsT0FBbUIsRUFDMUIsUUFBa0MsRUFDM0IsR0FBc0I7UUFIZCxZQUFPLEdBQVAsT0FBTyxDQUFnRTtRQUMvRSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBRW5CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEdqQzs7Ozs7T0FLRDtRQUNRLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFtQnhCOzs7Ozs7O1dBT0c7UUFFSSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBZ0J6Qjs7V0FFRztRQUVJLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFFcEI7O1dBRUc7UUFFSSxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBNkNaLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUE1RkQsc0JBQVcscURBQWU7UUFIMUI7O1dBRUc7YUFDSDtZQUNJLE9BQU8s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QztJQUFELCtCQUFDO0NBQUEsQUFyTEQsSUFxTEM7U0FyTFksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi8uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneFJvd0lzbGFuZENvbXBvbmVudCB9IGZyb20gJy4vcm93LWlzbGFuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZENvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1jaGlsZC1ncmlkLXJvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoaWxkLWdyaWQtcm93LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xucHJpdmF0ZSByZXNvbHZlcjtcblxuICAgIC8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBSb3dFeHBhbmRlZCA9IHRoaXMuZ3JpZDEucm93TGlzdC5maXJzdC5leHBhbmRlZDtcbiAqIGBgYFxuICovXG4gICAgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGxheW91dDogSWd4Um93SXNsYW5kQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFyZW50SGFzU2Nyb2xsKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50R3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5ub3RWaXJ0dWFsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXJlbnRHcmlkSUQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSByb3cgZGF0YSBmb3IgdGhlIGZpcnN0IHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd0RhdGEgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnJvd0RhdGE7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm93RGF0YTogYW55ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93SW5kZXggPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLmluZGV4O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XG5cbiAgICBAVmlld0NoaWxkKCdoZ3JpZCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoR3JpZDogYW55LyogVE9ETzogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCovO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAncm93JztcblxuICAgIC8qKlxuICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaGFuZGxlUm93U2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICogIC8vIHRoZSBncmlkIG9uIHdoaWNoIHRoZSBvblJvd1NlbGVjdGlvbkNoYW5nZSBldmVudCB3YXMgdHJpZ2dlcmVkXG4gICAgICogIGNvbnN0IGdyaWQgPSBldmVudC5yb3cuZ3JpZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZ3JpZFxuICAgICAqICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAqICAgIChvblJvd1NlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVSb3dTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAqICA8L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgZ2V0IHBhcmVudEdyaWQoKTogYW55LyogVE9ETzogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCovIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWxldmVsJylcbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dC5sZXZlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmF0aXZlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgcm93LiBDb3VsZCBiZSBudWxsIGluIGNlcnRhaW4gZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgbmF0aXZlRWxlbWVudCBvZiB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd05hdGl2ZUVsZW1lbnQgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPGFueS8qIFRPRE86IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQqLz4sXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQub25MYXlvdXRDaGFuZ2Uuc3Vic2NyaWJlKChjaCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTGF5b3V0Q2hhbmdlcyhjaCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5sYXlvdXQuaW5pdGlhbENoYW5nZXM7XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTGF5b3V0Q2hhbmdlcyhjaGFuZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oR3JpZC5wYXJlbnQgPSB0aGlzLnBhcmVudEdyaWQ7XG4gICAgICAgIHRoaXMuaEdyaWQucGFyZW50SXNsYW5kID0gdGhpcy5sYXlvdXQ7XG4gICAgICAgIHRoaXMuaEdyaWQuY2hpbGRSb3cgPSAgdGhpcztcbiAgICAgICAgLy8gaGFuZGxlciBsb2dpYyB0aGF0IHJlLWVtaXRzIGhncmlkIGV2ZW50cyBvbiB0aGUgcm93IGlzbGFuZFxuICAgICAgICB0aGlzLnNldHVwRXZlbnRFbWl0dGVycygpO1xuICAgICAgICB0aGlzLmxheW91dC5vbkdyaWRDcmVhdGVkLmVtaXQoe1xuICAgICAgICAgICAgb3duZXI6IHRoaXMubGF5b3V0LFxuICAgICAgICAgICAgcGFyZW50SUQ6IHRoaXMucm93RGF0YS5yb3dJRCxcbiAgICAgICAgICAgIGdyaWQ6IHRoaXMuaEdyaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5oR3JpZC5jaGlsZExheW91dExpc3QgPSB0aGlzLmxheW91dC5jaGlsZHJlbjtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmNoaWxkQ29sdW1ucy5sZW5ndGggPiAwICYmICF0aGlzLmhHcmlkLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5oR3JpZC5jcmVhdGVDb2x1bW5zTGlzdCh0aGlzLmxheW91dC5jaGlsZENvbHVtbnMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXlvdXRzID0gdGhpcy5oR3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpO1xuICAgICAgICBsYXlvdXRzLmZvckVhY2goKGwpID0+IHRoaXMuaEdyaWQuaGdyaWRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZChsKSk7XG4gICAgICAgIHRoaXMucGFyZW50R3JpZC5oZ3JpZEFQSS5yZWdpc3RlckNoaWxkR3JpZCh0aGlzLnJvd0RhdGEucm93SUQsIHRoaXMubGF5b3V0LmtleSwgdGhpcy5oR3JpZCk7XG4gICAgICAgIHRoaXMubGF5b3V0LnJvd0lzbGFuZEFQSS5yZWdpc3RlckNoaWxkR3JpZCh0aGlzLnJvd0RhdGEucm93SUQsIHRoaXMuaEdyaWQpO1xuXG4gICAgICAgIHRoaXMuaEdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRXZlbnRFbWl0dGVycygpIHtcbiAgICAgICAgY29uc3QgZGVzdHJ1Y3RvciA9IHRha2VVbnRpbCh0aGlzLmhHcmlkLmRlc3Ryb3kkKTtcblxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShJZ3hHcmlkQ29tcG9uZW50KTtcbiAgICAgICAgLy8gZXhjbHVkZSBvdXRwdXRzIHJlbGF0ZWQgdG8gdHdvLXdheSBiaW5kaW5nIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgY29uc3QgaW5wdXROYW1lcyA9IGZhY3RvcnkuaW5wdXRzLm1hcChpbnB1dCA9PiBpbnB1dC5wcm9wTmFtZSk7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBmYWN0b3J5Lm91dHB1dHMuZmlsdGVyKG8gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbnB1dFByb3BOYW1lID0gby5wcm9wTmFtZS5zbGljZSgwLCBvLnByb3BOYW1lLmluZGV4T2YoJ0NoYW5nZScpKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE5hbWVzLmluZGV4T2YobWF0Y2hpbmdJbnB1dFByb3BOYW1lKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBvdXRwdXRzLmZvckVhY2gob3V0cHV0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhHcmlkW291dHB1dC5wcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhHcmlkW291dHB1dC5wcm9wTmFtZV0ucGlwZShkZXN0cnVjdG9yKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5vd25lciA9IHRoaXMuaEdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0W291dHB1dC5wcm9wTmFtZV0uZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9oYW5kbGVMYXlvdXRDaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2UgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoY2hhbmdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaEdyaWRbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=