UNPKG

ngx-config-datatable

Version:
393 lines 26.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core'; import { BehaviorSubject, combineLatest, Subscription } from 'rxjs'; import { filter } from 'rxjs/operators'; var DatatableComponent = /** @class */ (function () { function DatatableComponent() { var _this = this; this.isShowCheckbox = true; this.isShowRowNumber = true; this.className = ''; this.sortCommand = new EventEmitter(); this.checkRowCommand = new EventEmitter(); this.sub = new Subscription(); this.datatableSetting$ = new BehaviorSubject(null); this.data$ = new BehaviorSubject([]); this.rows = []; this.footers = []; this.headerChecked = false; this.sub.add(combineLatest(this.datatableSetting$, this.data$).pipe(filter((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), datatableSetting = _b[0], data = _b[1]; return datatableSetting ? true : false; }))).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), datatableSetting = _b[0], data = _b[1]; _this.render(); }))); } Object.defineProperty(DatatableComponent.prototype, "datatableSetting", { get: /** * @return {?} */ function () { return this.datatableSetting$.getValue(); }, set: /** * @param {?} v * @return {?} */ function (v) { this.datatableSetting$.next(v); }, enumerable: true, configurable: true }); Object.defineProperty(DatatableComponent.prototype, "data", { get: /** * @return {?} */ function () { return this.data$.getValue(); }, set: /** * @param {?} v * @return {?} */ function (v) { this.data$.next(v); }, enumerable: true, configurable: true }); /** * @return {?} */ DatatableComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.sub.unsubscribe(); }; /** * @private * @return {?} */ DatatableComponent.prototype.render = /** * @private * @return {?} */ function () { this.rows = []; this.footers = []; this.addRows(); this.addSummaryRow(); }; /** * @param {?} sortInfo * @return {?} */ DatatableComponent.prototype.changeSort = /** * @param {?} sortInfo * @return {?} */ function (sortInfo) { var e_1, _a; try { for (var _b = tslib_1.__values(this.datatableSetting.headers), _c = _b.next(); !_c.done; _c = _b.next()) { var item = _c.value; if (item.propName !== sortInfo.propName) { item.sort = 'none'; } else { item.sort = sortInfo.sort; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } this.sortCommand.emit(sortInfo); }; /** * @param {?} event * @return {?} */ DatatableComponent.prototype.headerCheckIt = /** * @param {?} event * @return {?} */ function (event) { var e_2, _a; event.preventDefault(); this.headerChecked = !this.headerChecked; try { for (var _b = tslib_1.__values(this.rows), _c = _b.next(); !_c.done; _c = _b.next()) { var row = _c.value; // tslint:disable-next-line:no-string-literal row['cbk__checked'] = this.headerChecked; } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } this.checkAllCheckbox(); }; /** * @param {?} event * @param {?} row * @return {?} */ DatatableComponent.prototype.rowCheckIt = /** * @param {?} event * @param {?} row * @return {?} */ function (event, row) { event.preventDefault(); this.checkAllCheckbox(); }; /** * @private * @return {?} */ DatatableComponent.prototype.checkAllCheckbox = /** * @private * @return {?} */ function () { // tslint:disable-next-line:no-string-literal this.headerChecked = !this.rows.some((/** * @param {?} a * @return {?} */ function (a) { return !a['cbk__checked']; })); // tslint:disable-next-line:no-string-literal /** @type {?} */ var ids = this.rows.filter((/** * @param {?} a * @return {?} */ function (a) { return !!a['cbk__checked']; })).map((/** * @param {?} a * @return {?} */ function (a) { return a.id; })); this.checkRowCommand.emit(ids); }; /** * @private * @return {?} */ DatatableComponent.prototype.addRows = /** * @private * @return {?} */ function () { var e_3, _a, e_4, _b; this.checkDatatableSetting(); try { for (var _c = tslib_1.__values(this.data), _d = _c.next(); !_d.done; _d = _c.next()) { var row = _d.value; /** @type {?} */ var cs = { id: row.id, rowData: row, columns: [] }; try { for (var _e = tslib_1.__values(this.datatableSetting.headers), _f = _e.next(); !_f.done; _f = _e.next()) { var item = _f.value; if (!item.isEnabled) { continue; } /** @type {?} */ var vv = row[item.propName]; if (item.converter) { vv = item.converter.to(vv); } cs.columns.push({ isHtml: item.isHtml, content: vv }); } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (_f && !_f.done && (_b = _e.return)) _b.call(_e); } finally { if (e_4) throw e_4.error; } } this.rows.push(cs); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } finally { if (e_3) throw e_3.error; } } }; /** * @private * @return {?} */ DatatableComponent.prototype.addSummaryRow = /** * @private * @return {?} */ function () { var e_5, _a, e_6, _b; this.checkDatatableSetting(); /** @type {?} */ var fs = { id: '', rowData: { id: '' }, columns: [] }; if (!this.datatableSetting.headers.some((/** * @param {?} a * @return {?} */ function (a) { return a.isSum; }))) { return; } try { for (var _c = tslib_1.__values(this.datatableSetting.headers), _d = _c.next(); !_d.done; _d = _c.next()) { var item = _d.value; if (!item.isEnabled) { continue; } if (!item.isSum) { fs.columns.push({ isHtml: item.isHtml, content: '' }); continue; } /** @type {?} */ var tTotal = 0; try { for (var _e = tslib_1.__values(this.data), _f = _e.next(); !_f.done; _f = _e.next()) { var row = _f.value; /** @type {?} */ var vv = row[item.propName]; tTotal += +vv; } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (_f && !_f.done && (_b = _e.return)) _b.call(_e); } finally { if (e_6) throw e_6.error; } } if (item.converter) { tTotal = item.converter.to(tTotal); } fs.columns.push({ isHtml: item.isHtml, content: tTotal }); } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } finally { if (e_5) throw e_5.error; } } this.footers.push(fs); }; /** * @private * @return {?} */ DatatableComponent.prototype.checkDatatableSetting = /** * @private * @return {?} */ function () { if (!this.datatableSetting) { throw new Error('please set up the datatableSetting property'); } }; DatatableComponent.decorators = [ { type: Component, args: [{ selector: 'cdt-datatable', template: "<table *ngIf=\"datatableSetting\" [class]=\"className\">\n <thead>\n <tr>\n <th *ngIf=\"isShowCheckbox\">\n <input type=\"checkbox\" \n [checked]=\" headerChecked\"\n (change)=\"headerCheckIt($event)\">\n </th>\n <th *ngIf=\"isShowRowNumber\">#</th>\n <th [ngClass]=\"{'d-none': !item.isEnabled}\" *ngFor=\"let item of datatableSetting.headers\">\n <cdt-btn-sort [info]=\"item\" (clickLink)=\"changeSort($event)\"></cdt-btn-sort>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows; let i=index\">\n\n <td *ngIf=\"isShowCheckbox\">\n <input type=\"checkbox\" \n [checked]=\"!!row.cbk__checked\" \n (change)=\"row.cbk__checked=!row.cbk__checked;rowCheckIt($event, row)\">\n </td>\n\n <td *ngIf=\"isShowRowNumber\"><span>{{i+1}}</span></td>\n\n <ng-container *ngFor=\"let column of row.columns\">\n <td *ngIf=\"column.isHtml\" [innerHTML]=\"column.content\"></td>\n <td *ngIf=\"!column.isHtml\" [innerText]=\"column.content\"></td>\n </ng-container>\n\n <td>\n <ng-container *ngTemplateOutlet=\"rowTmpl, context: { $implicit: row }\"></ng-container>\n </td>\n\n </tr>\n </tbody>\n <tfoot>\n <tr *ngFor=\"let row of footers\">\n <th *ngIf=\"isShowCheckbox\">\n </th>\n <th *ngIf=\"isShowRowNumber\"></th>\n <ng-container *ngFor=\"let column of row.columns\">\n <td>{{column.content}}</td>\n </ng-container>\n <th>\n </th>\n </tr>\n </tfoot>\n</table>", styles: [""] }] } ]; /** @nocollapse */ DatatableComponent.ctorParameters = function () { return []; }; DatatableComponent.propDecorators = { rowTmpl: [{ type: ContentChild, args: ['rowCommand', { static: true },] }], isShowCheckbox: [{ type: Input }], isShowRowNumber: [{ type: Input }], className: [{ type: Input }], datatableSetting: [{ type: Input }], data: [{ type: Input }], sortCommand: [{ type: Output }], checkRowCommand: [{ type: Output }] }; return DatatableComponent; }()); export { DatatableComponent }; if (false) { /** @type {?} */ DatatableComponent.prototype.rowTmpl; /** @type {?} */ DatatableComponent.prototype.isShowCheckbox; /** @type {?} */ DatatableComponent.prototype.isShowRowNumber; /** @type {?} */ DatatableComponent.prototype.className; /** @type {?} */ DatatableComponent.prototype.sortCommand; /** @type {?} */ DatatableComponent.prototype.checkRowCommand; /** * @type {?} * @private */ DatatableComponent.prototype.sub; /** * @type {?} * @private */ DatatableComponent.prototype.datatableSetting$; /** * @type {?} * @private */ DatatableComponent.prototype.data$; /** @type {?} */ DatatableComponent.prototype.rows; /** @type {?} */ DatatableComponent.prototype.footers; /** @type {?} */ DatatableComponent.prototype.headerChecked; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1jb25maWctZGF0YXRhYmxlLyIsInNvdXJjZXMiOlsibGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU14QztJQXNDRTtRQUFBLGlCQVNDO1FBdENRLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFlZCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRWpELFFBQUcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pCLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFvQixJQUFJLENBQUMsQ0FBQztRQUNqRSxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFFckQsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUMsSUFBSSxDQUNKLE1BQU07Ozs7UUFBQyxVQUFDLEVBQXdCO2dCQUF4QiwwQkFBd0IsRUFBdkIsd0JBQWdCLEVBQUUsWUFBSTtZQUFNLE9BQUEsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztRQUEvQixDQUErQixFQUFDLENBQ3RFLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsRUFBd0I7Z0JBQXhCLDBCQUF3QixFQUF2Qix3QkFBZ0IsRUFBRSxZQUFJO1lBQ2xDLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQWxDRCxzQkFDSSxnREFBZ0I7Ozs7UUFHcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxDQUFDOzs7OztRQU5ELFVBQ3FCLENBQW9CO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQzs7O09BQUE7SUFJRCxzQkFDSSxvQ0FBSTs7OztRQUdSO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLENBQUM7Ozs7O1FBTkQsVUFDUyxDQUFjO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7OztPQUFBOzs7O0lBMEJELHdDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFTyxtQ0FBTTs7OztJQUFkO1FBQ0UsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs7Ozs7SUFFRCx1Q0FBVTs7OztJQUFWLFVBQVcsUUFBaUI7OztZQUMxQixLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtnQkFBN0MsSUFBTSxJQUFJLFdBQUE7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2lCQUNwQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7aUJBQzNCO2FBQ0Y7Ozs7Ozs7OztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7O0lBRUQsMENBQWE7Ozs7SUFBYixVQUFjLEtBQVk7O1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7WUFFekMsS0FBa0IsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxJQUFJLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXhCLElBQU0sR0FBRyxXQUFBO2dCQUNaLDZDQUE2QztnQkFDN0MsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDMUM7Ozs7Ozs7OztRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7OztJQUVELHVDQUFVOzs7OztJQUFWLFVBQVcsS0FBWSxFQUFFLEdBQUc7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7O0lBRU8sNkNBQWdCOzs7O0lBQXhCO1FBQ0UsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFsQixDQUFrQixFQUFDLENBQUM7OztZQUd4RCxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFuQixDQUFtQixFQUFDLENBQUMsR0FBRzs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEVBQUUsRUFBSixDQUFJLEVBQUM7UUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7Ozs7SUFFTyxvQ0FBTzs7OztJQUFmOztRQUNFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOztZQUU3QixLQUFrQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLElBQUksQ0FBQSxnQkFBQSw0QkFBRTtnQkFBeEIsSUFBTSxHQUFHLFdBQUE7O29CQUNOLEVBQUUsR0FBUztvQkFDZixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLEdBQUc7b0JBQ1osT0FBTyxFQUFFLEVBQUU7aUJBQ1o7O29CQUNELEtBQW1CLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFBLGdCQUFBLDRCQUFFO3dCQUE3QyxJQUFNLElBQUksV0FBQTt3QkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTs0QkFDbkIsU0FBUzt5QkFDVjs7NEJBQ0csRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7NEJBQ2xCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDNUI7d0JBQ0QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7NEJBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNOzRCQUNuQixPQUFPLEVBQUUsRUFBRTt5QkFDWixDQUFDLENBQUM7cUJBQ0o7Ozs7Ozs7OztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNwQjs7Ozs7Ozs7O0lBQ0gsQ0FBQzs7Ozs7SUFFTywwQ0FBYTs7OztJQUFyQjs7UUFDRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7WUFFdkIsRUFBRSxHQUFTO1lBQ2YsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ25CLE9BQU8sRUFBRSxFQUFFO1NBQ1o7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxFQUFQLENBQU8sRUFBQyxFQUFFO1lBQ3JELE9BQU87U0FDUjs7WUFDRCxLQUFtQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtnQkFBN0MsSUFBTSxJQUFJLFdBQUE7Z0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ25CLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2YsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixPQUFPLEVBQUUsRUFBRTtxQkFDWixDQUFDLENBQUM7b0JBQ0gsU0FBUztpQkFDVjs7b0JBRUcsTUFBTSxHQUFHLENBQUM7O29CQUNkLEtBQWtCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFBLGdCQUFBLDRCQUFFO3dCQUF4QixJQUFNLEdBQUcsV0FBQTs7NEJBQ04sRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUM3QixNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7cUJBQ2Y7Ozs7Ozs7OztnQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixPQUFPLEVBQUUsTUFBTTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7Ozs7Ozs7OztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRU8sa0RBQXFCOzs7O0lBQTdCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDOztnQkF0S0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6Qiw0akRBQXlDOztpQkFFMUM7Ozs7OzBCQUdFLFlBQVksU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2lDQUUzQyxLQUFLO2tDQUNMLEtBQUs7NEJBRUwsS0FBSzttQ0FDTCxLQUFLO3VCQU9MLEtBQUs7OEJBT0wsTUFBTTtrQ0FDTixNQUFNOztJQTRJVCx5QkFBQztDQUFBLEFBeEtELElBd0tDO1NBbktZLGtCQUFrQjs7O0lBRTdCLHFDQUF3RTs7SUFFeEUsNENBQStCOztJQUMvQiw2Q0FBZ0M7O0lBRWhDLHVDQUF3Qjs7SUFleEIseUNBQW9EOztJQUNwRCw2Q0FBeUQ7Ozs7O0lBRXpELGlDQUFpQzs7Ozs7SUFDakMsK0NBQXlFOzs7OztJQUN6RSxtQ0FBcUQ7O0lBRXJELGtDQUFrQjs7SUFDbEIscUNBQXFCOztJQUNyQiwyQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSURhdGF0YWJsZVNldHRpbmcgfSBmcm9tICcuLi9pbnRlcmZhY2UvSURhdGF0YWJsZVNldHRpbmcnO1xuaW1wb3J0IHsgSUhlYWRlciB9IGZyb20gJy4uL2ludGVyZmFjZS9JSGVhZGVyJztcbmltcG9ydCB7IElJZE9iamVjdCB9IGZyb20gJy4uL2ludGVyZmFjZS9JSWRPYmplY3QnO1xuaW1wb3J0IHsgSVJvdyB9IGZyb20gJy4uL2ludGVyZmFjZS9JUm93JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2R0LWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBDb250ZW50Q2hpbGQoJ3Jvd0NvbW1hbmQnLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dUbXBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpIGlzU2hvd0NoZWNrYm94ID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNTaG93Um93TnVtYmVyID0gdHJ1ZTtcblxuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KClcbiAgc2V0IGRhdGF0YWJsZVNldHRpbmcodjogSURhdGF0YWJsZVNldHRpbmcpIHtcbiAgICB0aGlzLmRhdGF0YWJsZVNldHRpbmckLm5leHQodik7XG4gIH1cbiAgZ2V0IGRhdGF0YWJsZVNldHRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlU2V0dGluZyQuZ2V0VmFsdWUoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2OiBJSWRPYmplY3RbXSkge1xuICAgIHRoaXMuZGF0YSQubmV4dCh2KTtcbiAgfVxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhJC5nZXRWYWx1ZSgpO1xuICB9XG4gIEBPdXRwdXQoKSBzb3J0Q29tbWFuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUhlYWRlcj4oKTtcbiAgQE91dHB1dCgpIGNoZWNrUm93Q29tbWFuZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgcHJpdmF0ZSBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgZGF0YXRhYmxlU2V0dGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEYXRhdGFibGVTZXR0aW5nPihudWxsKTtcbiAgcHJpdmF0ZSBkYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUlkT2JqZWN0W10+KFtdKTtcblxuICByb3dzOiBJUm93W10gPSBbXTtcbiAgZm9vdGVyczogSVJvd1tdID0gW107XG4gIGhlYWRlckNoZWNrZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN1Yi5hZGQoY29tYmluZUxhdGVzdChcbiAgICAgIHRoaXMuZGF0YXRhYmxlU2V0dGluZyQsXG4gICAgICB0aGlzLmRhdGEkXG4gICAgKS5waXBlKFxuICAgICAgZmlsdGVyKChbZGF0YXRhYmxlU2V0dGluZywgZGF0YV0pID0+IGRhdGF0YWJsZVNldHRpbmcgPyB0cnVlIDogZmFsc2UpXG4gICAgKS5zdWJzY3JpYmUoKFtkYXRhdGFibGVTZXR0aW5nLCBkYXRhXSkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgdGhpcy5yb3dzID0gW107XG4gICAgdGhpcy5mb290ZXJzID0gW107XG5cbiAgICB0aGlzLmFkZFJvd3MoKTtcbiAgICB0aGlzLmFkZFN1bW1hcnlSb3coKTtcbiAgfVxuXG4gIGNoYW5nZVNvcnQoc29ydEluZm86IElIZWFkZXIpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhdGFibGVTZXR0aW5nLmhlYWRlcnMpIHtcbiAgICAgIGlmIChpdGVtLnByb3BOYW1lICE9PSBzb3J0SW5mby5wcm9wTmFtZSkge1xuICAgICAgICBpdGVtLnNvcnQgPSAnbm9uZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtLnNvcnQgPSBzb3J0SW5mby5zb3J0O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNvcnRDb21tYW5kLmVtaXQoc29ydEluZm8pO1xuICB9XG5cbiAgaGVhZGVyQ2hlY2tJdChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaGVhZGVyQ2hlY2tlZCA9ICF0aGlzLmhlYWRlckNoZWNrZWQ7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgcm93WydjYmtfX2NoZWNrZWQnXSA9IHRoaXMuaGVhZGVyQ2hlY2tlZDtcbiAgICB9XG4gICAgdGhpcy5jaGVja0FsbENoZWNrYm94KCk7XG4gIH1cblxuICByb3dDaGVja0l0KGV2ZW50OiBFdmVudCwgcm93KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNoZWNrQWxsQ2hlY2tib3goKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbGxDaGVja2JveCgpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICB0aGlzLmhlYWRlckNoZWNrZWQgPSAhdGhpcy5yb3dzLnNvbWUoYSA9PiAhYVsnY2JrX19jaGVja2VkJ10pO1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgY29uc3QgaWRzID0gdGhpcy5yb3dzLmZpbHRlcihhID0+ICEhYVsnY2JrX19jaGVja2VkJ10pLm1hcChhID0+IGEuaWQpO1xuICAgIHRoaXMuY2hlY2tSb3dDb21tYW5kLmVtaXQoaWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUm93cygpIHtcbiAgICB0aGlzLmNoZWNrRGF0YXRhYmxlU2V0dGluZygpO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhKSB7XG4gICAgICBjb25zdCBjczogSVJvdyA9IHtcbiAgICAgICAgaWQ6IHJvdy5pZCxcbiAgICAgICAgcm93RGF0YTogcm93LFxuICAgICAgICBjb2x1bW5zOiBbXVxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGF0YWJsZVNldHRpbmcuaGVhZGVycykge1xuICAgICAgICBpZiAoIWl0ZW0uaXNFbmFibGVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZ2ID0gcm93W2l0ZW0ucHJvcE5hbWVdO1xuICAgICAgICBpZiAoaXRlbS5jb252ZXJ0ZXIpIHtcbiAgICAgICAgICB2diA9IGl0ZW0uY29udmVydGVyLnRvKHZ2KTtcbiAgICAgICAgfVxuICAgICAgICBjcy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgIGlzSHRtbDogaXRlbS5pc0h0bWwsXG4gICAgICAgICAgY29udGVudDogdnZcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3MucHVzaChjcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdW1tYXJ5Um93KCkge1xuICAgIHRoaXMuY2hlY2tEYXRhdGFibGVTZXR0aW5nKCk7XG5cbiAgICBjb25zdCBmczogSVJvdyA9IHtcbiAgICAgIGlkOiAnJyxcbiAgICAgIHJvd0RhdGE6IHsgaWQ6ICcnIH0sXG4gICAgICBjb2x1bW5zOiBbXVxuICAgIH07XG4gICAgaWYgKCF0aGlzLmRhdGF0YWJsZVNldHRpbmcuaGVhZGVycy5zb21lKGEgPT4gYS5pc1N1bSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZGF0YXRhYmxlU2V0dGluZy5oZWFkZXJzKSB7XG4gICAgICBpZiAoIWl0ZW0uaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpdGVtLmlzU3VtKSB7XG4gICAgICAgIGZzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgaXNIdG1sOiBpdGVtLmlzSHRtbCxcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCB0VG90YWwgPSAwO1xuICAgICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHZ2ID0gcm93W2l0ZW0ucHJvcE5hbWVdO1xuICAgICAgICB0VG90YWwgKz0gK3Z2O1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XG4gICAgICAgIHRUb3RhbCA9IGl0ZW0uY29udmVydGVyLnRvKHRUb3RhbCk7XG4gICAgICB9XG4gICAgICBmcy5jb2x1bW5zLnB1c2goe1xuICAgICAgICBpc0h0bWw6IGl0ZW0uaXNIdG1sLFxuICAgICAgICBjb250ZW50OiB0VG90YWxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmZvb3RlcnMucHVzaChmcyk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRGF0YXRhYmxlU2V0dGluZygpIHtcbiAgICBpZiAoIXRoaXMuZGF0YXRhYmxlU2V0dGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwbGVhc2Ugc2V0IHVwIHRoZSBkYXRhdGFibGVTZXR0aW5nIHByb3BlcnR5Jyk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==