UNPKG

@catull/igniteui-angular

Version:

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

196 lines 20.9 kB
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'; let IgxChildGridRowComponent = class IgxChildGridRowComponent { constructor(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; } /** * @hidden */ get parentHasScroll() { return !this.parentGrid.verticalScrollContainer.dc.instance.notVirtual; } /** * 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 parentGrid() { return this.gridAPI.grid; } get level() { return this.layout.level; } /** * 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 nativeElement() { return this.element.nativeElement; } /** * @hidden */ ngOnInit() { this.layout.onLayoutChange.subscribe((ch) => { this._handleLayoutChanges(ch); }); const changes = this.layout.initialChanges; changes.forEach(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 */ ngAfterViewInit() { this.hGrid.childLayoutList = this.layout.children; if (this.layout.childColumns.length > 0 && !this.hGrid.autoGenerate) { this.hGrid.createColumnsList(this.layout.childColumns.toArray()); } const layouts = this.hGrid.childLayoutList.toArray(); layouts.forEach((l) => 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(); } setupEventEmitters() { const destructor = takeUntil(this.hGrid.destroy$); const factory = this.resolver.resolveComponentFactory(IgxGridComponent); // exclude outputs related to two-way binding functionality const inputNames = factory.inputs.map(input => input.propName); const outputs = factory.outputs.filter(o => { const matchingInputPropName = o.propName.slice(0, o.propName.indexOf('Change')); return inputNames.indexOf(matchingInputPropName) === -1; }); outputs.forEach(output => { if (this.hGrid[output.propName]) { this.hGrid[output.propName].pipe(destructor).subscribe((args) => { if (!args) { args = {}; } args.owner = this.hGrid; this.layout[output.propName].emit(args); }); } }); } _handleLayoutChanges(changes) { for (const change in changes) { if (changes.hasOwnProperty(change)) { this.hGrid[change] = changes[change].currentValue; } } } }; IgxChildGridRowComponent.ctorParameters = () => [ { 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); export { IgxChildGridRowComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtZ3JpZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9jaGlsZC1ncmlkLXJvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsRUFDYixhQUFhLEVBQ2Isd0JBQXdCLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVEzQyxJQUFhLHdCQUF3QixHQUFyQyxNQUFhLHdCQUF3QjtJQXdHakMsWUFBbUIsT0FBdUUsRUFDL0UsT0FBbUIsRUFDMUIsUUFBa0MsRUFDM0IsR0FBc0I7UUFIZCxZQUFPLEdBQVAsT0FBTyxDQUFnRTtRQUMvRSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBRW5CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEdqQzs7Ozs7T0FLRDtRQUNRLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFtQnhCOzs7Ozs7O1dBT0c7UUFFSSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBZ0J6Qjs7V0FFRztRQUVJLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFFcEI7O1dBRUc7UUFFSSxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBNkNaLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUEvRkQ7O09BRUc7SUFD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dHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi8uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneFJvd0lzbGFuZENvbXBvbmVudCB9IGZyb20gJy4vcm93LWlzbGFuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZENvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1jaGlsZC1ncmlkLXJvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoaWxkLWdyaWQtcm93LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xucHJpdmF0ZSByZXNvbHZlcjtcblxuICAgIC8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBSb3dFeHBhbmRlZCA9IHRoaXMuZ3JpZDEucm93TGlzdC5maXJzdC5leHBhbmRlZDtcbiAqIGBgYFxuICovXG4gICAgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGxheW91dDogSWd4Um93SXNsYW5kQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFyZW50SGFzU2Nyb2xsKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50R3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5ub3RWaXJ0dWFsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXJlbnRHcmlkSUQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSByb3cgZGF0YSBmb3IgdGhlIGZpcnN0IHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd0RhdGEgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnJvd0RhdGE7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm93RGF0YTogYW55ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93SW5kZXggPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLmluZGV4O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XG5cbiAgICBAVmlld0NoaWxkKCdoZ3JpZCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoR3JpZDogYW55LyogVE9ETzogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCovO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAncm93JztcblxuICAgIC8qKlxuICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaGFuZGxlUm93U2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICogIC8vIHRoZSBncmlkIG9uIHdoaWNoIHRoZSBvblJvd1NlbGVjdGlvbkNoYW5nZSBldmVudCB3YXMgdHJpZ2dlcmVkXG4gICAgICogIGNvbnN0IGdyaWQgPSBldmVudC5yb3cuZ3JpZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZ3JpZFxuICAgICAqICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAqICAgIChvblJvd1NlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVSb3dTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAqICA8L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgZ2V0IHBhcmVudEdyaWQoKTogYW55LyogVE9ETzogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCovIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWxldmVsJylcbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dC5sZXZlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmF0aXZlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgcm93LiBDb3VsZCBiZSBudWxsIGluIGNlcnRhaW4gZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgbmF0aXZlRWxlbWVudCBvZiB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd05hdGl2ZUVsZW1lbnQgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPGFueS8qIFRPRE86IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQqLz4sXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQub25MYXlvdXRDaGFuZ2Uuc3Vic2NyaWJlKChjaCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTGF5b3V0Q2hhbmdlcyhjaCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5sYXlvdXQuaW5pdGlhbENoYW5nZXM7XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTGF5b3V0Q2hhbmdlcyhjaGFuZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oR3JpZC5wYXJlbnQgPSB0aGlzLnBhcmVudEdyaWQ7XG4gICAgICAgIHRoaXMuaEdyaWQucGFyZW50SXNsYW5kID0gdGhpcy5sYXlvdXQ7XG4gICAgICAgIHRoaXMuaEdyaWQuY2hpbGRSb3cgPSAgdGhpcztcbiAgICAgICAgLy8gaGFuZGxlciBsb2dpYyB0aGF0IHJlLWVtaXRzIGhncmlkIGV2ZW50cyBvbiB0aGUgcm93IGlzbGFuZFxuICAgICAgICB0aGlzLnNldHVwRXZlbnRFbWl0dGVycygpO1xuICAgICAgICB0aGlzLmxheW91dC5vbkdyaWRDcmVhdGVkLmVtaXQoe1xuICAgICAgICAgICAgb3duZXI6IHRoaXMubGF5b3V0LFxuICAgICAgICAgICAgcGFyZW50SUQ6IHRoaXMucm93RGF0YS5yb3dJRCxcbiAgICAgICAgICAgIGdyaWQ6IHRoaXMuaEdyaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5oR3JpZC5jaGlsZExheW91dExpc3QgPSB0aGlzLmxheW91dC5jaGlsZHJlbjtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmNoaWxkQ29sdW1ucy5sZW5ndGggPiAwICYmICF0aGlzLmhHcmlkLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5oR3JpZC5jcmVhdGVDb2x1bW5zTGlzdCh0aGlzLmxheW91dC5jaGlsZENvbHVtbnMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXlvdXRzID0gdGhpcy5oR3JpZC5jaGlsZExheW91dExpc3QudG9BcnJheSgpO1xuICAgICAgICBsYXlvdXRzLmZvckVhY2goKGwpID0+IHRoaXMuaEdyaWQuaGdyaWRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZChsKSk7XG4gICAgICAgIHRoaXMucGFyZW50R3JpZC5oZ3JpZEFQSS5yZWdpc3RlckNoaWxkR3JpZCh0aGlzLnJvd0RhdGEucm93SUQsIHRoaXMubGF5b3V0LmtleSwgdGhpcy5oR3JpZCk7XG4gICAgICAgIHRoaXMubGF5b3V0LnJvd0lzbGFuZEFQSS5yZWdpc3RlckNoaWxkR3JpZCh0aGlzLnJvd0RhdGEucm93SUQsIHRoaXMuaEdyaWQpO1xuXG4gICAgICAgIHRoaXMuaEdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRXZlbnRFbWl0dGVycygpIHtcbiAgICAgICAgY29uc3QgZGVzdHJ1Y3RvciA9IHRha2VVbnRpbCh0aGlzLmhHcmlkLmRlc3Ryb3kkKTtcblxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShJZ3hHcmlkQ29tcG9uZW50KTtcbiAgICAgICAgLy8gZXhjbHVkZSBvdXRwdXRzIHJlbGF0ZWQgdG8gdHdvLXdheSBiaW5kaW5nIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgY29uc3QgaW5wdXROYW1lcyA9IGZhY3RvcnkuaW5wdXRzLm1hcChpbnB1dCA9PiBpbnB1dC5wcm9wTmFtZSk7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBmYWN0b3J5Lm91dHB1dHMuZmlsdGVyKG8gPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdJbnB1dFByb3BOYW1lID0gby5wcm9wTmFtZS5zbGljZSgwLCBvLnByb3BOYW1lLmluZGV4T2YoJ0NoYW5nZScpKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE5hbWVzLmluZGV4T2YobWF0Y2hpbmdJbnB1dFByb3BOYW1lKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBvdXRwdXRzLmZvckVhY2gob3V0cHV0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhHcmlkW291dHB1dC5wcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhHcmlkW291dHB1dC5wcm9wTmFtZV0ucGlwZShkZXN0cnVjdG9yKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5vd25lciA9IHRoaXMuaEdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0W291dHB1dC5wcm9wTmFtZV0uZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9oYW5kbGVMYXlvdXRDaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2UgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoY2hhbmdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaEdyaWRbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=