UNPKG

ornamentum

Version:
250 lines 24.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input } from '@angular/core'; import { get } from '../../../utility/services/object-utility.class'; import { DataFetchMode } from '../../models/data-fetch-mode.enum'; import { DragAndDropService } from '../../../utility/utility.module'; import { DataTableConfigService } from '../../services/data-table-config.service'; import { DataTableEventStateService } from '../../services/data-table-event.service'; import { DataTableDataStateService } from '../../services/data-table-data-state.service'; /** * Column title header component. Render data table column headers. */ export class DataTableColumnTitleHeaderComponent { /** * @param {?} dragAndDropService * @param {?} eventStateService * @param {?} dataStateService * @param {?} config */ constructor(dragAndDropService, eventStateService, dataStateService, config) { this.dragAndDropService = dragAndDropService; this.eventStateService = eventStateService; this.dataStateService = dataStateService; this.config = config; this.resizeInProgress = false; } /** * Header click event handler. * @param {?} column Data table column component reference. * @param {?} event Mouse event arguments object. * @return {?} */ onHeaderClick(column, event) { if (!this.resizeInProgress) { this.sortData(column); this.eventStateService.headerClickStream.emit({ column, event }); } else { this.resizeInProgress = false; // this is because I can't prevent click from mousup of the drag end } } /** * Sort data event handler. * @private * @param {?} column Data table column component reference. * @return {?} */ sortData(column) { if (column.sortable) { /** @type {?} */ const prevSortOrder = column.sortOrder; if (column.sortOrder) { column.sortOrder = column.getNewSortOrder(); } else { if (!this.config.multiColumnSortable) { /** @type {?} */ const sortColumns = this.columns.filter((/** * @param {?} item * @return {?} */ item => item.sortable)); sortColumns.forEach((/** * @param {?} sortColumn * @return {?} */ (sortColumn) => { if (sortColumn !== column) { sortColumn.sortOrder = ''; } })); } column.sortOrder = 'asc'; } if (this.config.multiColumnSortable) { if (column.sortOrder === '') { /** @type {?} */ const sortColumns = this.columns.filter((/** * @param {?} item * @return {?} */ item => item.sortable)); sortColumns.forEach((/** * @param {?} sortColumn * @return {?} */ (sortColumn) => { if (sortColumn !== column && sortColumn.sortPriority > column.sortPriority) { --sortColumn.sortPriority; } })); column.sortPriority = undefined; --this.dataStateService.currentSortPriority; } else { if (!prevSortOrder) { column.sortPriority = ++this.dataStateService.currentSortPriority; } } } this.eventStateService.dataFetchStream.next(DataFetchMode.SOFT_LOAD); } } /** * Set column width. * @param {?} width Width value in pixels. * @param {?} column Data table column component reference. * @return {?} */ setColumnWidth(width, column) { column.actualWidth = width; } /** * Column resize event handler. * @param {?} event Resize mouse event. * @param {?} column Data table column component. * @param {?} columnElement Table header cell element DOM reference. * @return {?} */ onColumnResize(event, column, columnElement) { this.resizeInProgress = true; this.dragAndDropService.drag(event, { move: (/** * @param {?} moveEvent * @param {?} dx * @return {?} */ (moveEvent, dx) => { /** @type {?} */ const newWidth = columnElement.offsetWidth + dx; if (column.resizeMinLimit !== undefined && newWidth < column.resizeMinLimit) { return; } column.actualWidth = newWidth; /** @type {?} */ let totalWidth = 0; this.columns.forEach((/** * @param {?} col * @return {?} */ col => { col.width = col.actualWidth; totalWidth += col.width; })); this.dataStateService.tableWidth = totalWidth; }) }); } /** * Set all row selected state. * @param {?} value All row selected status. * @return {?} */ set allRowSelected(value) { this.dataStateService.allRowSelected = value; this.allRowSelectedChanged(this.dataStateService.allRowSelected); this.eventStateService.allRowSelectChangeStream.emit(this.dataStateService.allRowSelected); } /** * Get all row selected state. * @return {?} */ get allRowSelected() { return this.dataStateService.allRowSelected; } /** * All row select change event handler. * @private * @param {?} selectedState Row selected status. * @return {?} */ allRowSelectedChanged(selectedState) { this.dataStateService.dataRows.forEach((/** * @param {?} row * @return {?} */ row => { /** @type {?} */ const id = get(row.item, this.config.selectTrackBy); /** @type {?} */ const index = this.dataStateService.selectedRows.indexOf(id); if (selectedState && index < 0) { this.dataStateService.selectedRows.push(id); } else if (!selectedState && index > -1) { this.dataStateService.selectedRows.splice(index, 1); } row.selected = selectedState; })); this.eventStateService.rowSelectChangeStream.emit(this.dataStateService.selectedRows); } /** * Get all row select checkbox display status. * @return {?} True if all row select checkbox should be displayed. */ get showAllRowSelectCheckbox() { return this.config.selectMode === 'multi' && this.config.showRowSelectAllCheckbox; } /** * @param {?} column * @return {?} */ showSortPriorityLabel(column) { return !!(this.config.multiColumnSortable && this.dataStateService.currentSortPriority > 1 && column.sortPriority); } } DataTableColumnTitleHeaderComponent.decorators = [ { type: Component, args: [{ exportAs: 'ngDataTableColumnTitleHeader', // tslint:disable-next-line selector: '[ngDataTableColumnTitleHeader]', template: "<th class=\"ng-data-table-expand-column-header\" *ngIf=\"config.expandableRows\"></th>\n<th class=\"ng-data-table-index-column-header\" *ngIf=\"config.showIndexColumn\">\n <span [textContent]=\"config.indexColumnTitle\"></span>\n</th>\n<th class=\"ng-data-table-select-column-header\" *ngIf=\"config.showRowSelectCheckboxColumn\">\n <div class=\"ng-data-table-checkbox-container\" *ngIf=\"showAllRowSelectCheckbox\">\n <input class=\"ng-data-table-checkbox-input\" type=\"checkbox\"\n [id]=\"dataStateService.getUniqueId('rsa', 0)\" [(ngModel)]=\"allRowSelected\"/>\n <label [for]=\"dataStateService.getUniqueId('rsa', 0)\"></label>\n </div>\n</th>\n<ng-container *ngFor=\"let column of columns\">\n <th class=\"ng-data-table-column-header\"\n #columnHeader\n *ngIf=\"column.visible\"\n (click)=\"onHeaderClick(column, $event)\"\n (ngElementWidth)=\"setColumnWidth($event, column)\"\n [class.sortable]=\"column.sortable\"\n [class.resizable]=\"column.resizable\"\n [ngClass]=\"column.cssClass\">\n <span class=\"ng-data-table-column-sort-priority\" *ngIf=\"showSortPriorityLabel(column)\"><small>{{column.sortPriority}}</small></span>\n <span *ngIf=\"!column.headerTemplate\" [textContent]=\"column.title\" class=\"ng-data-table-column-header-label\"></span>\n <ng-container *ngIf=\"column.headerTemplate\" [ngTemplateOutlet]=\"column.headerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n <span class=\"ng-data-table-column-sort-icon\" [hidden]=\"!column.sortable\" [ngClass]=\"column.getSortIconClass()\"></span>\n <span class=\"ng-data-table-column-resize-handle\" *ngIf=\"column.resizable\" (mousedown)=\"onColumnResize($event, column, columnHeader)\"> </span>\n </th>\n</ng-container>\n" }] } ]; /** @nocollapse */ DataTableColumnTitleHeaderComponent.ctorParameters = () => [ { type: DragAndDropService }, { type: DataTableEventStateService }, { type: DataTableDataStateService }, { type: DataTableConfigService } ]; DataTableColumnTitleHeaderComponent.propDecorators = { columns: [{ type: Input }] }; if (false) { /** * @type {?} * @private */ DataTableColumnTitleHeaderComponent.prototype.resizeInProgress; /** @type {?} */ DataTableColumnTitleHeaderComponent.prototype.columns; /** * @type {?} * @private */ DataTableColumnTitleHeaderComponent.prototype.dragAndDropService; /** * @type {?} * @private */ DataTableColumnTitleHeaderComponent.prototype.eventStateService; /** @type {?} */ DataTableColumnTitleHeaderComponent.prototype.dataStateService; /** @type {?} */ DataTableColumnTitleHeaderComponent.prototype.config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1jb2x1bW4tdGl0bGUtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL29ybmFtZW50dW0vIiwic291cmNlcyI6WyJkYXRhLXRhYmxlL2NvbXBvbmVudHMvZGF0YS10YWJsZS1jb2x1bW4tdGl0bGUtaGVhZGVyL2RhdGEtdGFibGUtY29sdW1uLXRpdGxlLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUVyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDckYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7QUFXekYsTUFBTSxPQUFPLG1DQUFtQzs7Ozs7OztJQU05QyxZQUNVLGtCQUFzQyxFQUN0QyxpQkFBNkMsRUFDOUMsZ0JBQTJDLEVBQzNDLE1BQThCO1FBSDdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE0QjtRQUM5QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJCO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBVC9CLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQVU5QixDQUFDOzs7Ozs7O0lBT0csYUFBYSxDQUFDLE1BQWdDLEVBQUUsS0FBaUI7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBUSxD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cm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9zZXJ2aWNlcy9vYmplY3QtdXRpbGl0eS5jbGFzcyc7XG5cbmltcG9ydCB7IERhdGFGZXRjaE1vZGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YS1mZXRjaC1tb2RlLmVudW0nO1xuXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXRhYmxlLWNvbHVtbi9kYXRhLXRhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBEcmFnQW5kRHJvcFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlsaXR5L3V0aWxpdHkubW9kdWxlJztcbmltcG9ydCB7IERhdGFUYWJsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXRhYmxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFUYWJsZUV2ZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS10YWJsZS1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFUYWJsZURhdGFTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXRhYmxlLWRhdGEtc3RhdGUuc2VydmljZSc7XG5cbi8qKlxuICogQ29sdW1uIHRpdGxlIGhlYWRlciBjb21wb25lbnQuIFJlbmRlciBkYXRhIHRhYmxlIGNvbHVtbiBoZWFkZXJzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgZXhwb3J0QXM6ICduZ0RhdGFUYWJsZUNvbHVtblRpdGxlSGVhZGVyJyxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gIHNlbGVjdG9yOiAnW25nRGF0YVRhYmxlQ29sdW1uVGl0bGVIZWFkZXJdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUtY29sdW1uLXRpdGxlLWhlYWRlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29sdW1uVGl0bGVIZWFkZXJDb21wb25lbnQge1xuICBwcml2YXRlIHJlc2l6ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50W107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkcmFnQW5kRHJvcFNlcnZpY2U6IERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U3RhdGVTZXJ2aWNlOiBEYXRhVGFibGVFdmVudFN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgZGF0YVN0YXRlU2VydmljZTogRGF0YVRhYmxlRGF0YVN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgY29uZmlnOiBEYXRhVGFibGVDb25maWdTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogSGVhZGVyIGNsaWNrIGV2ZW50IGhhbmRsZXIuXG4gICAqIEBwYXJhbSBjb2x1bW4gRGF0YSB0YWJsZSBjb2x1bW4gY29tcG9uZW50IHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIGV2ZW50IE1vdXNlIGV2ZW50IGFyZ3VtZW50cyBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25IZWFkZXJDbGljayhjb2x1bW46IERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudCwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzaXplSW5Qcm9ncmVzcykge1xuICAgICAgdGhpcy5zb3J0RGF0YShjb2x1bW4pO1xuICAgICAgdGhpcy5ldmVudFN0YXRlU2VydmljZS5oZWFkZXJDbGlja1N0cmVhbS5lbWl0KHsgY29sdW1uLCBldmVudCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNpemVJblByb2dyZXNzID0gZmFsc2U7IC8vIHRoaXMgaXMgYmVjYXVzZSBJIGNhbid0IHByZXZlbnQgY2xpY2sgZnJvbSBtb3VzdXAgb2YgdGhlIGRyYWcgZW5kXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgZGF0YSBldmVudCBoYW5kbGVyLlxuICAgKiBAcGFyYW0gY29sdW1uIERhdGEgdGFibGUgY29sdW1uIGNvbXBvbmVudCByZWZlcmVuY2UuXG4gICAqL1xuICBwcml2YXRlIHNvcnREYXRhKGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgY29uc3QgcHJldlNvcnRPcmRlciA9IGNvbHVtbi5zb3J0T3JkZXI7XG4gICAgICBpZiAoY29sdW1uLnNvcnRPcmRlcikge1xuICAgICAgICBjb2x1bW4uc29ydE9yZGVyID0gY29sdW1uLmdldE5ld1NvcnRPcmRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5tdWx0aUNvbHVtblNvcnRhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgc29ydENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0YWJsZSk7XG4gICAgICAgICAgc29ydENvbHVtbnMuZm9yRWFjaCgoc29ydENvbHVtbjogRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoc29ydENvbHVtbiAhPT0gY29sdW1uKSB7XG4gICAgICAgICAgICAgIHNvcnRDb2x1bW4uc29ydE9yZGVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW4uc29ydE9yZGVyID0gJ2FzYyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy5tdWx0aUNvbHVtblNvcnRhYmxlKSB7XG4gICAgICAgIGlmIChjb2x1bW4uc29ydE9yZGVyID09PSAnJykge1xuICAgICAgICAgIGNvbnN0IHNvcnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uc29ydGFibGUpO1xuICAgICAgICAgIHNvcnRDb2x1bW5zLmZvckVhY2goKHNvcnRDb2x1bW46IERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvcnRDb2x1bW4gIT09IGNvbHVtbiAmJiBzb3J0Q29sdW1uLnNvcnRQcmlvcml0eSA+IGNvbHVtbi5zb3J0UHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgLS1zb3J0Q29sdW1uLnNvcnRQcmlvcml0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbHVtbi5zb3J0UHJpb3JpdHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgLS10aGlzLmRhdGFTdGF0ZVNlcnZpY2UuY3VycmVudFNvcnRQcmlvcml0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXByZXZTb3J0T3JkZXIpIHtcbiAgICAgICAgICAgIGNvbHVtbi5zb3J0UHJpb3JpdHkgPSArK3RoaXMuZGF0YVN0YXRlU2VydmljZS5jdXJyZW50U29ydFByaW9yaXR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmV2ZW50U3RhdGVTZXJ2aWNlLmRhdGFGZXRjaFN0cmVhbS5uZXh0KERhdGFGZXRjaE1vZGUuU09GVF9MT0FEKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbHVtbiB3aWR0aC5cbiAgICogQHBhcmFtIHdpZHRoIFdpZHRoIHZhbHVlIGluIHBpeGVscy5cbiAgICogQHBhcmFtIGNvbHVtbiBEYXRhIHRhYmxlIGNvbHVtbiBjb21wb25lbnQgcmVmZXJlbmNlLlxuICAgKi9cbiAgcHVibGljIHNldENvbHVtbldpZHRoKHdpZHRoOiBudW1iZXIsIGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgY29sdW1uLmFjdHVhbFdpZHRoID0gd2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQ29sdW1uIHJlc2l6ZSBldmVudCBoYW5kbGVyLlxuICAgKiBAcGFyYW0gZXZlbnQgUmVzaXplIG1vdXNlIGV2ZW50LlxuICAgKiBAcGFyYW0gY29sdW1uIERhdGEgdGFibGUgY29sdW1uIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIGNvbHVtbkVsZW1lbnQgVGFibGUgaGVhZGVyIGNlbGwgZWxlbWVudCBET00gcmVmZXJlbmNlLlxuICAgKi9cbiAgcHVibGljIG9uQ29sdW1uUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2x1bW46IERhdGFUYWJsZUNvbHVtbkNvbXBvbmVudCwgY29sdW1uRWxlbWVudDogSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2UuZHJhZyhldmVudCwge1xuICAgICAgbW92ZTogKG1vdmVFdmVudDogTW91c2VFdmVudCwgZHg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGNvbHVtbkVsZW1lbnQub2Zmc2V0V2lkdGggKyBkeDtcbiAgICAgICAgaWYgKGNvbHVtbi5yZXNpemVNaW5MaW1pdCAhPT0gdW5kZWZpbmVkICYmIG5ld1dpZHRoIDwgY29sdW1uLnJlc2l6ZU1pbkxpbWl0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sdW1uLmFjdHVhbFdpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgIGNvbC53aWR0aCA9IGNvbC5hY3R1YWxXaWR0aDtcbiAgICAgICAgICB0b3RhbFdpZHRoICs9IGNvbC53aWR0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kYXRhU3RhdGVTZXJ2aWNlLnRhYmxlV2lkdGggPSB0b3RhbFdpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGwgcm93IHNlbGVjdGVkIHN0YXRlLlxuICAgKiBAcGFyYW0gdmFsdWUgQWxsIHJvdyBzZWxlY3RlZCBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgc2V0IGFsbFJvd1NlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kYXRhU3RhdGVTZXJ2aWNlLmFsbFJvd1NlbGVjdGVkID0gdmFsdWU7XG4gICAgdGhpcy5hbGxSb3dTZWxlY3RlZENoYW5nZWQodGhpcy5kYXRhU3RhdGVTZXJ2aWNlLmFsbFJvd1NlbGVjdGVkKTtcbiAgICB0aGlzLmV2ZW50U3RhdGVTZXJ2aWNlLmFsbFJvd1NlbGVjdENoYW5nZVN0cmVhbS5lbWl0KHRoaXMuZGF0YVN0YXRlU2VydmljZS5hbGxSb3dTZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByb3cgc2VsZWN0ZWQgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbFJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdGF0ZVNlcnZpY2UuYWxsUm93U2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIHJvdyBzZWxlY3QgY2hhbmdlIGV2ZW50IGhhbmRsZXIuXG4gICAqIEBwYXJhbSBzZWxlY3RlZFN0YXRlIFJvdyBzZWxlY3RlZCBzdGF0dXMuXG4gICAqL1xuICBwcml2YXRlIGFsbFJvd1NlbGVjdGVkQ2hhbmdlZChzZWxlY3RlZFN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU3RhdGVTZXJ2aWNlLmRhdGFSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IGlkID0gZ2V0KHJvdy5pdGVtLCB0aGlzLmNvbmZpZy5zZWxlY3RUcmFja0J5KTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhU3RhdGVTZXJ2aWNlLnNlbGVjdGVkUm93cy5pbmRleE9mKGlkKTtcbiAgICAgIGlmIChzZWxlY3RlZFN0YXRlICYmIGluZGV4IDwgMCkge1xuICAgICAgICB0aGlzLmRhdGFTdGF0ZVNlcnZpY2Uuc2VsZWN0ZWRSb3dzLnB1c2goaWQpO1xuICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWRTdGF0ZSAmJiBpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuZGF0YVN0YXRlU2VydmljZS5zZWxlY3RlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgcm93LnNlbGVjdGVkID0gc2VsZWN0ZWRTdGF0ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTdGF0ZVNlcnZpY2Uucm93U2VsZWN0Q2hhbmdlU3RyZWFtLmVtaXQodGhpcy5kYXRhU3RhdGVTZXJ2aWNlLnNlbGVjdGVkUm93cyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByb3cgc2VsZWN0IGNoZWNrYm94IGRpc3BsYXkgc3RhdHVzLlxuICAgKiBAcmV0dXJuIFRydWUgaWYgYWxsIHJvdyBzZWxlY3QgY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0FsbFJvd1NlbGVjdENoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5zZWxlY3RNb2RlID09PSAnbXVsdGknICYmIHRoaXMuY29uZmlnLnNob3dSb3dTZWxlY3RBbGxDaGVja2JveDtcbiAgfVxuXG4gIHB1YmxpYyBzaG93U29ydFByaW9yaXR5TGFiZWwoY29sdW1uOiBEYXRhVGFibGVDb2x1bW5Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5jb25maWcubXVsdGlDb2x1bW5Tb3J0YWJsZSAmJiB0aGlzLmRhdGFTdGF0ZVNlcnZpY2UuY3VycmVudFNvcnRQcmlvcml0eSA+IDEgJiYgY29sdW1uLnNvcnRQcmlvcml0eSk7XG4gIH1cbn1cbiJdfQ==