UNPKG

angular-9-datatable

Version:

DataTable component for Angular 9 framework

165 lines 22.5 kB
import { __decorate, __metadata } from "tslib"; import { Directive, Input, EventEmitter, SimpleChange, OnChanges, DoCheck, IterableDiffers, IterableDiffer, Output } from "@angular/core"; import * as _ from "lodash"; import { ReplaySubject } from "rxjs"; let DataTable = class DataTable { constructor(differs) { this.differs = differs; this.inputData = []; this.sortBy = ""; this.sortOrder = "asc"; this.sortByChange = new EventEmitter(); this.sortOrderChange = new EventEmitter(); this.rowsOnPage = 1000; this.activePage = 1; this.mustRecalculateData = false; this.onSortChange = new ReplaySubject(1); this.onPageChange = new EventEmitter(); this.diff = differs.find([]).create(null); } getSort() { return { sortBy: this.sortBy, sortOrder: this.sortOrder }; } setSort(sortBy, sortOrder) { if (this.sortBy !== sortBy || this.sortOrder !== sortOrder) { this.sortBy = sortBy; this.sortOrder = _.includes(["asc", "desc"], sortOrder) ? sortOrder : "asc"; this.mustRecalculateData = true; this.onSortChange.next({ sortBy: sortBy, sortOrder: sortOrder }); this.sortByChange.emit(this.sortBy); this.sortOrderChange.emit(this.sortOrder); } } getPage() { return { activePage: this.activePage, rowsOnPage: this.rowsOnPage, dataLength: this.inputData.length }; } setPage(activePage, rowsOnPage) { if (this.rowsOnPage !== rowsOnPage || this.activePage !== activePage) { this.activePage = this.activePage !== activePage ? activePage : this.calculateNewActivePage(this.rowsOnPage, rowsOnPage); this.rowsOnPage = rowsOnPage; this.mustRecalculateData = true; this.onPageChange.emit({ activePage: this.activePage, rowsOnPage: this.rowsOnPage, dataLength: this.inputData ? this.inputData.length : 0 }); } } calculateNewActivePage(previousRowsOnPage, currentRowsOnPage) { let firstRowOnPage = (this.activePage - 1) * previousRowsOnPage + 1; let newActivePage = Math.ceil(firstRowOnPage / currentRowsOnPage); return newActivePage; } recalculatePage() { let lastPage = Math.ceil(this.inputData.length / this.rowsOnPage); this.activePage = lastPage < this.activePage ? lastPage : this.activePage; this.activePage = this.activePage || 1; this.onPageChange.emit({ activePage: this.activePage, rowsOnPage: this.rowsOnPage, dataLength: this.inputData.length }); } ngOnChanges(changes) { if (changes["rowsOnPage"]) { this.rowsOnPage = changes["rowsOnPage"].previousValue; this.setPage(this.activePage, changes["rowsOnPage"].currentValue); this.mustRecalculateData = true; } if (changes["sortBy"] || changes["sortOrder"]) { if (!_.includes(["asc", "desc"], this.sortOrder)) { console.warn("angular2-datatable: value for input mfSortOrder must be one of ['asc', 'desc'], but is:", this.sortOrder); this.sortOrder = "asc"; } if (this.sortBy) { this.onSortChange.next({ sortBy: this.sortBy, sortOrder: this.sortOrder }); } this.mustRecalculateData = true; } if (changes["inputData"]) { this.inputData = changes["inputData"].currentValue || []; this.recalculatePage(); this.mustRecalculateData = true; } } ngDoCheck() { let changes = this.diff.diff(this.inputData); if (changes) { this.recalculatePage(); this.mustRecalculateData = true; } if (this.mustRecalculateData) { this.fillData(); this.mustRecalculateData = false; } } fillData() { this.activePage = this.activePage; this.rowsOnPage = this.rowsOnPage; let offset = (this.activePage - 1) * this.rowsOnPage; let data = this.inputData; var sortBy = this.sortBy; if (typeof sortBy === 'string' || sortBy instanceof String) { data = _.orderBy(data, this.caseInsensitiveIteratee(sortBy), this.sortOrder == 'asc' ? 'asc' : 'desc'); } else { data = _.orderBy(data, sortBy, this.sortOrder == 'asc' ? 'asc' : 'desc'); } data = _.slice(data, offset, offset + this.rowsOnPage); this.data = data; } caseInsensitiveIteratee(sortBy) { return (row) => { var value = row; for (let sortByProperty of sortBy.split('.')) { if (value) { value = value[sortByProperty]; } } if (value && typeof value === 'string' || value instanceof String) { return value.toLowerCase(); } return value; }; } }; DataTable.ctorParameters = () => [ { type: IterableDiffers } ]; __decorate([ Input("mfData"), __metadata("design:type", Array) ], DataTable.prototype, "inputData", void 0); __decorate([ Input("mfSortBy"), __metadata("design:type", Object) ], DataTable.prototype, "sortBy", void 0); __decorate([ Input("mfSortOrder"), __metadata("design:type", Object) ], DataTable.prototype, "sortOrder", void 0); __decorate([ Output("mfSortByChange"), __metadata("design:type", Object) ], DataTable.prototype, "sortByChange", void 0); __decorate([ Output("mfSortOrderChange"), __metadata("design:type", Object) ], DataTable.prototype, "sortOrderChange", void 0); __decorate([ Input("mfRowsOnPage"), __metadata("design:type", Object) ], DataTable.prototype, "rowsOnPage", void 0); __decorate([ Input("mfActivePage"), __metadata("design:type", Object) ], DataTable.prototype, "activePage", void 0); DataTable = __decorate([ Directive({ selector: 'table[mfData]', exportAs: 'mfDataTable' }), __metadata("design:paramtypes", [IterableDiffers]) ], DataTable); export { DataTable }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLTktZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2RhdGEtdGFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUNqRixjQUFjLEVBQUUsTUFBTSxFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBcUJyQyxJQUFhLFNBQVMsR0FBdEIsTUFBYSxTQUFTO0lBb0JsQixZQUEyQixPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQWpCM0IsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUVwQixXQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2QsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbkQsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUk3QixpQkFBWSxHQUFHLElBQUksYUFBYSxDQUFZLENBQUMsQ0FBQyxDQUFDO1FBQy9DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUdoRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxPQUFPO1FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFF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Ozs2Q0FBMEI7QUFDekI7SUFBdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQzs7NkNBQXVCO0FBWHBDLFNBQVM7SUFKckIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGVBQWU7UUFDekIsUUFBUSxFQUFFLGFBQWE7S0FDMUIsQ0FBQztxQ0FxQnNDLGVBQWU7R0FwQjFDLFNBQVMsQ0EySXJCO1NBM0lZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgRGlyZWN0aXZlLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2UsIE9uQ2hhbmdlcywgRG9DaGVjaywgSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgSXRlcmFibGVEaWZmZXIsIE91dHB1dFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydEV2ZW50IHtcclxuICAgIHNvcnRCeTogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgICBzb3J0T3JkZXI6IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VFdmVudCB7XHJcbiAgICBhY3RpdmVQYWdlOiBudW1iZXI7XHJcbiAgICByb3dzT25QYWdlOiBudW1iZXI7XHJcbiAgICBkYXRhTGVuZ3RoOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUV2ZW50IHtcclxuICAgIGxlbmd0aDogbnVtYmVyO1xyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAndGFibGVbbWZEYXRhXScsXHJcbiAgICBleHBvcnRBczogJ21mRGF0YVRhYmxlJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBEb0NoZWNrIHtcclxuXHJcbiAgICBwcml2YXRlIGRpZmY6IEl0ZXJhYmxlRGlmZmVyPGFueT47XHJcbiAgICBASW5wdXQoXCJtZkRhdGFcIikgcHVibGljIGlucHV0RGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgICBASW5wdXQoXCJtZlNvcnRCeVwiKSBwdWJsaWMgc29ydEJ5OiBzdHJpbmcgfCBzdHJpbmdbXSA9IFwiXCI7XHJcbiAgICBASW5wdXQoXCJtZlNvcnRPcmRlclwiKSBwdWJsaWMgc29ydE9yZGVyID0gXCJhc2NcIjtcclxuICAgIEBPdXRwdXQoXCJtZlNvcnRCeUNoYW5nZVwiKSBwdWJsaWMgc29ydEJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4oKTtcclxuICAgIEBPdXRwdXQoXCJtZlNvcnRPcmRlckNoYW5nZVwiKSBwdWJsaWMgc29ydE9yZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQElucHV0KFwibWZSb3dzT25QYWdlXCIpIHB1YmxpYyByb3dzT25QYWdlID0gMTAwMDtcclxuICAgIEBJbnB1dChcIm1mQWN0aXZlUGFnZVwiKSBwdWJsaWMgYWN0aXZlUGFnZSA9IDE7XHJcblxyXG4gICAgcHJpdmF0ZSBtdXN0UmVjYWxjdWxhdGVEYXRhID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGRhdGE6IGFueVtdO1xyXG5cclxuICAgIHB1YmxpYyBvblNvcnRDaGFuZ2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTb3J0RXZlbnQ+KDEpO1xyXG4gICAgcHVibGljIG9uUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycykge1xyXG4gICAgICAgIHRoaXMuZGlmZiA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3J0KCk6IFNvcnRFdmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHsgc29ydEJ5OiB0aGlzLnNvcnRCeSwgc29ydE9yZGVyOiB0aGlzLnNvcnRPcmRlciB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTb3J0KHNvcnRCeTogc3RyaW5nIHwgc3RyaW5nW10sIHNvcnRPcmRlcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29ydEJ5ICE9PSBzb3J0QnkgfHwgdGhpcy5zb3J0T3JkZXIgIT09IHNvcnRPcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRCeSA9IHNvcnRCeTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0T3JkZXIgPSBfLmluY2x1ZGVzKFtcImFzY1wiLCBcImRlc2NcIl0sIHNvcnRPcmRlcikgPyBzb3J0T3JkZXIgOiBcImFzY1wiO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU29ydENoYW5nZS5uZXh0KHsgc29ydEJ5OiBzb3J0QnksIHNvcnRPcmRlcjogc29ydE9yZGVyIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRCeUNoYW5nZS5lbWl0KHRoaXMuc29ydEJ5KTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLnNvcnRPcmRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYWdlKCk6IFBhZ2VFdmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHsgYWN0aXZlUGFnZTogdGhpcy5hY3RpdmVQYWdlLCByb3dzT25QYWdlOiB0aGlzLnJvd3NPblBhZ2UsIGRhdGFMZW5ndGg6IHRoaXMuaW5wdXREYXRhLmxlbmd0aCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQYWdlKGFjdGl2ZVBhZ2U6IG51bWJlciwgcm93c09uUGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucm93c09uUGFnZSAhPT0gcm93c09uUGFnZSB8fCB0aGlzLmFjdGl2ZVBhZ2UgIT09IGFjdGl2ZVBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVQYWdlID0gdGhpcy5hY3RpdmVQYWdlICE9PSBhY3RpdmVQYWdlID8gYWN0aXZlUGFnZSA6IHRoaXMuY2FsY3VsYXRlTmV3QWN0aXZlUGFnZSh0aGlzLnJvd3NPblBhZ2UsIHJvd3NPblBhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLnJvd3NPblBhZ2UgPSByb3dzT25QYWdlO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2U6IHRoaXMuYWN0aXZlUGFnZSxcclxuICAgICAgICAgICAgICAgIHJvd3NPblBhZ2U6IHRoaXMucm93c09uUGFnZSxcclxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IHRoaXMuaW5wdXREYXRhID8gdGhpcy5pbnB1dERhdGEubGVuZ3RoIDogMFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVOZXdBY3RpdmVQYWdlKHByZXZpb3VzUm93c09uUGFnZTogbnVtYmVyLCBjdXJyZW50Um93c09uUGFnZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZmlyc3RSb3dPblBhZ2UgPSAodGhpcy5hY3RpdmVQYWdlIC0gMSkgKiBwcmV2aW91c1Jvd3NPblBhZ2UgKyAxO1xyXG4gICAgICAgIGxldCBuZXdBY3RpdmVQYWdlID0gTWF0aC5jZWlsKGZpcnN0Um93T25QYWdlIC8gY3VycmVudFJvd3NPblBhZ2UpO1xyXG4gICAgICAgIHJldHVybiBuZXdBY3RpdmVQYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjYWxjdWxhdGVQYWdlKCkge1xyXG4gICAgICAgIGxldCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLmlucHV0RGF0YS5sZW5ndGggLyB0aGlzLnJvd3NPblBhZ2UpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlUGFnZSA9IGxhc3RQYWdlIDwgdGhpcy5hY3RpdmVQYWdlID8gbGFzdFBhZ2UgOiB0aGlzLmFjdGl2ZVBhZ2U7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlID0gdGhpcy5hY3RpdmVQYWdlIHx8IDE7XHJcblxyXG4gICAgICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmVQYWdlOiB0aGlzLmFjdGl2ZVBhZ2UsXHJcbiAgICAgICAgICAgIHJvd3NPblBhZ2U6IHRoaXMucm93c09uUGFnZSxcclxuICAgICAgICAgICAgZGF0YUxlbmd0aDogdGhpcy5pbnB1dERhdGEubGVuZ3RoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pOiBhbnkge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzW1wicm93c09uUGFnZVwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd3NPblBhZ2UgPSBjaGFuZ2VzW1wicm93c09uUGFnZVwiXS5wcmV2aW91c1ZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhZ2UodGhpcy5hY3RpdmVQYWdlLCBjaGFuZ2VzW1wicm93c09uUGFnZVwiXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1tcInNvcnRCeVwiXSB8fCBjaGFuZ2VzW1wic29ydE9yZGVyXCJdKSB7XHJcbiAgICAgICAgICAgIGlmICghXy5pbmNsdWRlcyhbXCJhc2NcIiwgXCJkZXNjXCJdLCB0aGlzLnNvcnRPcmRlcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcImFuZ3VsYXIyLWRhdGF0YWJsZTogdmFsdWUgZm9yIGlucHV0IG1mU29ydE9yZGVyIG11c3QgYmUgb25lIG9mIFsnYXNjJywgJ2Rlc2MnXSwgYnV0IGlzOlwiLCB0aGlzLnNvcnRPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcmRlciA9IFwiYXNjXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc29ydEJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU29ydENoYW5nZS5uZXh0KHsgc29ydEJ5OiB0aGlzLnNvcnRCeSwgc29ydE9yZGVyOiB0aGlzLnNvcnRPcmRlciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlc1tcImlucHV0RGF0YVwiXSkge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0RGF0YSA9IGNoYW5nZXNbXCJpbnB1dERhdGFcIl0uY3VycmVudFZhbHVlIHx8IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlUGFnZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11c3RSZWNhbGN1bGF0ZURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IGFueSB7XHJcbiAgICAgICAgbGV0IGNoYW5nZXMgPSB0aGlzLmRpZmYuZGlmZih0aGlzLmlucHV0RGF0YSk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBhZ2UoKTtcclxuICAgICAgICAgICAgdGhpcy5tdXN0UmVjYWxjdWxhdGVEYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxEYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMubXVzdFJlY2FsY3VsYXRlRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGxEYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlUGFnZSA9IHRoaXMuYWN0aXZlUGFnZTtcclxuICAgICAgICB0aGlzLnJvd3NPblBhZ2UgPSB0aGlzLnJvd3NPblBhZ2U7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXQgPSAodGhpcy5hY3RpdmVQYWdlIC0gMSkgKiB0aGlzLnJvd3NPblBhZ2U7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmlucHV0RGF0YTtcclxuICAgICAgICB2YXIgc29ydEJ5ID0gdGhpcy5zb3J0Qnk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzb3J0QnkgPT09ICdzdHJpbmcnIHx8IHNvcnRCeSBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICBkYXRhID0gXy5vcmRlckJ5KGRhdGEsIHRoaXMuY2FzZUluc2Vuc2l0aXZlSXRlcmF0ZWUoPHN0cmluZz5zb3J0QnkpLCB0aGlzLnNvcnRPcmRlciA9PSAnYXNjJyA/ICdhc2MnIDogJ2Rlc2MnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhID0gXy5vcmRlckJ5KGRhdGEsIHNvcnRCeSwgdGhpcy5zb3J0T3JkZXIgPT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEgPSBfLnNsaWNlKGRhdGEsIG9mZnNldCwgb2Zmc2V0ICsgdGhpcy5yb3dzT25QYWdlKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FzZUluc2Vuc2l0aXZlSXRlcmF0ZWUoc29ydEJ5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKHJvdzogYW55KTogYW55ID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gcm93O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBzb3J0QnlQcm9wZXJ0eSBvZiBzb3J0Qnkuc3BsaXQoJy4nKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtzb3J0QnlQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59Il19