UNPKG

geminis-ng

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.

194 lines 25.6 kB
import { Component, ContentChildren, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { NzModalService } from 'ng-zorro-antd/modal'; import { NzTableComponent } from 'ng-zorro-antd/table'; import { GnTableColumnDirective } from './table-column.directive'; import { HttpClient } from '@angular/common/http'; import { GnObjectUtils, pipeTypes } from 'geminis-ng-core'; import { GnMessageService } from '../message-service/message-service'; import { RemoteDataStrategy } from './RemoteDataStrategy'; import { LocalDataStrategy } from './LocalDataStrategy'; export class GnTableComponent { constructor(http, modalService, messageService) { this.http = http; this.modalService = modalService; this.messageService = messageService; this.dataStrategies = {}; this.includes = []; this.sorts = []; this.data = []; this.dataTotal = 0; this.pageIndex = 1; this.pageSize = 10; this.showPagination = true; this.showSizeChanger = true; this.autoLoadData = true; this.selectionMode = 'multi'; this.dataStrategy = 'remote'; this.dataSaved = new EventEmitter(); this.dataDeleted = new EventEmitter(); this.dataLoaded = new EventEmitter(); this.selectionStatus = {}; this.selected = []; this.selectedKeys = []; this.isSelected = false; this.isAllSelected = false; this.isSomeSelected = false; this.isSingleSelected = false; this.editData = null; this.isLoading = false; this.dataStrategies.remote = new RemoteDataStrategy(this); this.dataStrategies.local = new LocalDataStrategy(this); } getValue(row, key) { return GnObjectUtils.getValue(row, key); } getValueWithPipe(row, key, pipe, pipeArgs) { if (!pipe) { return this.getValue(row, key); } const pipeTransform = pipeTypes[pipe]; if (!pipeTransform) { throw new Error('管道[' + pipe + ']未注册'); } const value = this.getValue(row, key); return pipeTransform.transform(value, pipeArgs); } loadData() { this.isLoading = true; return this.dataStrategies[this.dataStrategy].load() .then((resp) => { this.data = resp === null || resp === void 0 ? void 0 : resp.content; this.dataTotal = resp === null || resp === void 0 ? void 0 : resp.totalElements; this.dataLoaded.emit(this.data); return this.data; }) .catch(error => { this.messageService.error('获取数据错误'); throw error; }) .finally(() => { this.isLoading = false; }); } loadDataAndCleanSelection() { this.changeAllSelectStatus(false); this.loadData(); } deleteData(url, id) { this.modalService.confirm({ nzContent: '确定删除所选数据?', nzOnOk: () => { this.isLoading = true; return this.dataStrategies[this.dataStrategy].delete(url, id) .then(() => { this.messageService.success('删除数据成功'); this.dataDeleted.emit(); }) .catch(err => { this.messageService.error('删除数据错误'); console.error(err); }) .finally(() => { this.isLoading = false; this.loadDataAndCleanSelection(); }); } }, 'confirm'); } deleteSelectedData() { this.deleteData(this.url, this.selectedKeys); } refreshSelectionStatus() { this.selected = this.data.filter(item => this.selectionStatus[this.getValue(item, this.dataKey)]); this.selectedKeys = this.selected.map(item => this.getValue(item, this.dataKey)); this.isSelected = this.selectedKeys.length > 0; this.isAllSelected = this.isSelected && this.selectedKeys.length === this.data.length; this.isSomeSelected = this.isSelected && this.selectedKeys.length < this.data.length; this.isSingleSelected = this.selectedKeys.length === 1; this.selectedKey = this.isSelected ? this.selectedKeys[0] : null; this.selectedOne = this.isSelected ? this.selected[0] : null; } changeSelectStatus(key) { if (this.selectionMode === 'none') { return; } if (this.selectionMode === 'single') { this.selectionStatus = {}; } this.selectionStatus[key] = !this.selectionStatus[key]; this.refreshSelectionStatus(); } changeAllSelectStatus(selected) { this.data.forEach(item => this.selectionStatus[this.getValue(item, this.dataKey)] = selected); this.refreshSelectionStatus(); } selectOne(dataKey) { this.select([dataKey]); } select(dataKeys) { this.changeAllSelectStatus(false); dataKeys.forEach(dataKey => this.selectionStatus[dataKey] = true); this.refreshSelectionStatus(); } ngOnInit() { if (this.autoLoadData) { this.loadData(); } } refreshData(data) { this.data = data; this.dataTotal = data.length; } startEdit(data) { this.editData = data; } endEdit() { this.isLoading = true; this.dataStrategies[this.dataStrategy].save(this.url, this.editData) .then((resp) => { this.dataSaved.emit(this.editData); this.editData = null; }) .catch(error => { this.messageService.error('更新数据错误'); throw error; }) .finally(() => { this.isLoading = false; }); } } GnTableComponent.decorators = [ { type: Component, args: [{ selector: 'gn-table', template: "<nz-table\n [nzData]=\"data\"\n [nzLoading]=\"isLoading\"\n [nzFrontPagination]=\"false\"\n [nzShowPagination]=\"showPagination\"\n [nzTotal]=\"dataTotal\"\n [nzShowTotal]=\"totalTemplate\"\n [(nzPageIndex)]=\"pageIndex\"\n [(nzPageSize)]=\"pageSize\"\n (nzPageIndexChange)=\"loadData()\"\n [nzShowSizeChanger]=\"showSizeChanger\"\n (nzPageSizeChange)=\"loadData()\">\n <thead>\n <tr>\n <th class=\"selection\"\n *ngIf=\"selectionMode === 'multi'\"\n nzShowCheckbox\n [nzChecked]=\"isAllSelected\"\n [nzIndeterminate]=\"isSomeSelected\"\n (nzCheckedChange)=\"changeAllSelectStatus($event)\"></th>\n <th class=\"selection\"\n *ngIf=\"selectionMode === 'single'\"></th>\n <th *ngFor=\"let header of columns\" [innerHTML]=\"header.title\"></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of data\" (click)=\"changeSelectStatus(getValue(row,dataKey))\">\n <td nzShowCheckbox *ngIf=\"selectionMode !== 'none'\"\n [(nzChecked)]=\"selectionStatus[getValue(row,dataKey)]\"\n (nzCheckedChange)=\"selectionMode === 'single'?selectOne(getValue(row,dataKey)):refreshSelectionStatus()\"></td>\n <td *ngFor=\"let body of columns\">\n <ng-container\n *ngIf=\"!body.templateRef; else template\">{{getValueWithPipe(row, body.id, body.pipe, body.pipeArgs)}}</ng-container>\n <ng-template #template [ngTemplateOutlet]=\"body.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </td>\n </tr>\n </tbody>\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\n</nz-table>\n", styles: [".selection{max-width:5rem}"] },] } ]; GnTableComponent.ctorParameters = () => [ { type: HttpClient }, { type: NzModalService }, { type: GnMessageService } ]; GnTableComponent.propDecorators = { nzTable: [{ type: ViewChild, args: [NzTableComponent, { static: true },] }], url: [{ type: Input }], includes: [{ type: Input }], filterGroup: [{ type: Input }], sorts: [{ type: Input }], data: [{ type: Input }], dataKey: [{ type: Input }], dataTotal: [{ type: Input }], pageIndex: [{ type: Input }], pageSize: [{ type: Input }], showPagination: [{ type: Input }], showSizeChanger: [{ type: Input }], autoLoadData: [{ type: Input }], selectionMode: [{ type: Input }], dataStrategy: [{ type: Input }], dataSaved: [{ type: Output }], dataDeleted: [{ type: Output }], dataLoaded: [{ type: Output }], columns: [{ type: ContentChildren, args: [GnTableColumnDirective,] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VtaW5pcy1uZy9zcmMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFPdEQsTUFBTSxPQUFPLGdCQUFnQjtJQThDM0IsWUFBbUIsSUFBZ0IsRUFDaEIsWUFBNEIsRUFDNUIsY0FBZ0M7UUFGaEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBOUMzQyxtQkFBYyxHQUFvQyxFQUFFLENBQUM7UUFLcEQsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUV4QixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRWxCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFFakIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFdkIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIsa0JBQWEsR0FBZ0MsT0FBTyxDQUFDO1FBRXJELGlCQUFZLEdBQXVCLFFBQVEsQ0FBQztRQUczQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUMsb0JBQWUsR0FBK0IsRUFBRSxDQUFDO1FBQ2pELGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFHekIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsYUFBUSxHQUFRLElBQUksQ0FBQztRQUVyQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBT2hCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVEsRUFBRSxHQUFXO1FBQzVCLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLFFBQWU7UUFDbkUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDaEM7UUFFRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7U0FDeEM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUU7YUFDakQsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGFBQWEsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDO2FBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVyxFQUFFLEVBQVM7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDeEIsU0FBUyxFQUFFLFdBQVc7WUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztxQkFDMUQsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxDQUFDO3FCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7U0FDRixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0RixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBUTtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTSxFQUFFO1lBQ2pDLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBaUI7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBWTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWU7UUFDcEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFTO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNqRSxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUEvTEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxVQUFVO2dCQUNwQixxb0RBQXFDOzthQUV0Qzs7O1lBWE8sVUFBVTtZQUhWLGNBQWM7WUFLZCxnQkFBZ0I7OztzQkFjckIsU0FBUyxTQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztrQkFFMUMsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7b0JBQ0wsS0FBSzttQkFFTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFFTCxLQUFLO3VCQUNMLEtBQUs7NkJBQ0wsS0FBSzs4QkFDTCxLQUFLOzJCQUVMLEtBQUs7NEJBRUwsS0FBSzsyQkFFTCxLQUFLO3dCQUdMLE1BQU07MEJBQ04sTUFBTTt5QkFDTixNQUFNO3NCQWVOLGVBQWUsU0FBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOek1vZGFsU2VydmljZX0gZnJvbSAnbmctem9ycm8tYW50ZC9tb2RhbCc7XG5pbXBvcnQge056VGFibGVDb21wb25lbnR9IGZyb20gJ25nLXpvcnJvLWFudGQvdGFibGUnO1xuaW1wb3J0IHtHblRhYmxlQ29sdW1uRGlyZWN0aXZlfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0duT2JqZWN0VXRpbHMsIHBpcGVUeXBlc30gZnJvbSAnZ2VtaW5pcy1uZy1jb3JlJztcbmltcG9ydCB7R25NZXNzYWdlU2VydmljZX0gZnJvbSAnLi4vbWVzc2FnZS1zZXJ2aWNlL21lc3NhZ2Utc2VydmljZSc7XG5pbXBvcnQge0RhdGFTdHJhdGVneX0gZnJvbSAnLi9EYXRhU3RyYXRlZ3knO1xuaW1wb3J0IHtSZW1vdGVEYXRhU3RyYXRlZ3l9IGZyb20gJy4vUmVtb3RlRGF0YVN0cmF0ZWd5JztcbmltcG9ydCB7TG9jYWxEYXRhU3RyYXRlZ3l9IGZyb20gJy4vTG9jYWxEYXRhU3RyYXRlZ3knO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHblRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcml2YXRlIGRhdGFTdHJhdGVnaWVzOiB7IFtrZXk6IHN0cmluZ106IERhdGFTdHJhdGVneSB9ID0ge307XG5cbiAgQFZpZXdDaGlsZChOelRhYmxlQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgbnpUYWJsZTogTnpUYWJsZUNvbXBvbmVudDtcblxuICBASW5wdXQoKSB1cmw6IHN0cmluZztcbiAgQElucHV0KCkgaW5jbHVkZXM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGZpbHRlckdyb3VwOiBhbnk7XG4gIEBJbnB1dCgpIHNvcnRzOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZztcbiAgQElucHV0KCkgZGF0YVRvdGFsID0gMDtcblxuICBASW5wdXQoKSBwYWdlSW5kZXggPSAxO1xuICBASW5wdXQoKSBwYWdlU2l6ZSA9IDEwO1xuICBASW5wdXQoKSBzaG93UGFnaW5hdGlvbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTaXplQ2hhbmdlciA9IHRydWU7XG5cbiAgQElucHV0KCkgYXV0b0xvYWREYXRhID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiAnbm9uZScgfCAnc2luZ2xlJyB8ICdtdWx0aScgPSAnbXVsdGknO1xuXG4gIEBJbnB1dCgpIGRhdGFTdHJhdGVneTogJ3JlbW90ZScgfCAnbG9jYWwnID0gJ3JlbW90ZSc7XG5cblxuICBAT3V0cHV0KCkgZGF0YVNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZGF0YURlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkYXRhTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHNlbGVjdGlvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgc2VsZWN0ZWQ6IGFueVtdID0gW107XG4gIHNlbGVjdGVkS2V5czogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRLZXk6IGFueTtcbiAgc2VsZWN0ZWRPbmU6IGFueTtcbiAgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gIGlzU29tZVNlbGVjdGVkID0gZmFsc2U7XG4gIGlzU2luZ2xlU2VsZWN0ZWQgPSBmYWxzZTtcbiAgZWRpdERhdGE6IGFueSA9IG51bGw7XG5cbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihHblRhYmxlQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5zOiBRdWVyeUxpc3Q8R25UYWJsZUNvbHVtbkRpcmVjdGl2ZT47XG5cbiAgY29uc3RydWN0b3IocHVibGljIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE56TW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IEduTWVzc2FnZVNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGFTdHJhdGVnaWVzLnJlbW90ZSA9IG5ldyBSZW1vdGVEYXRhU3RyYXRlZ3kodGhpcyk7XG4gICAgdGhpcy5kYXRhU3RyYXRlZ2llcy5sb2NhbCA9IG5ldyBMb2NhbERhdGFTdHJhdGVneSh0aGlzKTtcbiAgfVxuXG4gIGdldFZhbHVlKHJvdzogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIEduT2JqZWN0VXRpbHMuZ2V0VmFsdWUocm93LCBrZXkpO1xuICB9XG5cbiAgZ2V0VmFsdWVXaXRoUGlwZShyb3c6IGFueSwga2V5OiBzdHJpbmcsIHBpcGU6IHN0cmluZywgcGlwZUFyZ3M6IGFueVtdKTogYW55IHtcbiAgICBpZiAoIXBpcGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKHJvdywga2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBwaXBlVHJhbnNmb3JtID0gcGlwZVR5cGVzW3BpcGVdO1xuICAgIGlmICghcGlwZVRyYW5zZm9ybSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCfnrqHpgZNbJyArIHBpcGUgKyAnXeacquazqOWGjCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShyb3csIGtleSk7XG4gICAgcmV0dXJuIHBpcGVUcmFuc2Zvcm0udHJhbnNmb3JtKHZhbHVlLCBwaXBlQXJncyk7XG4gIH1cblxuICBsb2FkRGF0YSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3RyYXRlZ2llc1t0aGlzLmRhdGFTdHJhdGVneV0ubG9hZCgpXG4gICAgICAudGhlbigocmVzcDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3A/LmNvbnRlbnQ7XG4gICAgICAgIHRoaXMuZGF0YVRvdGFsID0gcmVzcD8udG90YWxFbGVtZW50cztcbiAgICAgICAgdGhpcy5kYXRhTG9hZGVkLmVtaXQodGhpcy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKCfojrflj5bmlbDmja7plJnor68nKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBsb2FkRGF0YUFuZENsZWFuU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlQWxsU2VsZWN0U3RhdHVzKGZhbHNlKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBkZWxldGVEYXRhKHVybDogc3RyaW5nLCBpZDogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHtcbiAgICAgIG56Q29udGVudDogJ+ehruWumuWIoOmZpOaJgOmAieaVsOaNru+8nycsXG4gICAgICBuek9uT2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhU3RyYXRlZ2llc1t0aGlzLmRhdGFTdHJhdGVneV0uZGVsZXRlKHVybCwgaWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKCfliKDpmaTmlbDmja7miJDlip8nKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YURlbGV0ZWQuZW1pdCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKCfliKDpmaTmlbDmja7plJnor68nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhQW5kQ2xlYW5TZWxlY3Rpb24oKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAnY29uZmlybScpO1xuICB9XG5cbiAgZGVsZXRlU2VsZWN0ZWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlRGF0YSh0aGlzLnVybCwgdGhpcy5zZWxlY3RlZEtleXMpO1xuICB9XG5cbiAgcmVmcmVzaFNlbGVjdGlvblN0YXR1cygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5kYXRhLmZpbHRlcihpdGVtID0+IHRoaXMuc2VsZWN0aW9uU3RhdHVzW3RoaXMuZ2V0VmFsdWUoaXRlbSwgdGhpcy5kYXRhS2V5KV0pO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gdGhpcy5zZWxlY3RlZC5tYXAoaXRlbSA9PiB0aGlzLmdldFZhbHVlKGl0ZW0sIHRoaXMuZGF0YUtleSkpO1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA9PT0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB0aGlzLmlzU29tZVNlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5pc1NpbmdsZVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSB0aGlzLmlzU2VsZWN0ZWQgPyB0aGlzLnNlbGVjdGVkS2V5c1swXSA6IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZE9uZSA9IHRoaXMuaXNTZWxlY3RlZCA/IHRoaXMuc2VsZWN0ZWRbMF0gOiBudWxsO1xuICB9XG5cbiAgY2hhbmdlU2VsZWN0U3RhdHVzKGtleTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXR1cyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvblN0YXR1c1trZXldID0gIXRoaXMuc2VsZWN0aW9uU3RhdHVzW2tleV07XG4gICAgdGhpcy5yZWZyZXNoU2VsZWN0aW9uU3RhdHVzKCk7XG4gIH1cblxuICBjaGFuZ2VBbGxTZWxlY3RTdGF0dXMoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuZm9yRWFjaChpdGVtID0+IHRoaXMuc2VsZWN0aW9uU3RhdHVzW3RoaXMuZ2V0VmFsdWUoaXRlbSwgdGhpcy5kYXRhS2V5KV0gPSBzZWxlY3RlZCk7XG4gICAgdGhpcy5yZWZyZXNoU2VsZWN0aW9uU3RhdHVzKCk7XG4gIH1cblxuICBzZWxlY3RPbmUoZGF0YUtleTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3QoW2RhdGFLZXldKTtcbiAgfVxuXG4gIHNlbGVjdChkYXRhS2V5czogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUFsbFNlbGVjdFN0YXR1cyhmYWxzZSk7XG4gICAgZGF0YUtleXMuZm9yRWFjaChkYXRhS2V5ID0+IHRoaXMuc2VsZWN0aW9uU3RhdHVzW2RhdGFLZXldID0gdHJ1ZSk7XG4gICAgdGhpcy5yZWZyZXNoU2VsZWN0aW9uU3RhdHVzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvTG9hZERhdGEpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoRGF0YShkYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5kYXRhVG90YWwgPSBkYXRhLmxlbmd0aDtcbiAgfVxuXG4gIHN0YXJ0RWRpdChkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXREYXRhID0gZGF0YTtcbiAgfVxuXG4gIGVuZEVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGF0YVN0cmF0ZWdpZXNbdGhpcy5kYXRhU3RyYXRlZ3ldLnNhdmUodGhpcy51cmwsIHRoaXMuZWRpdERhdGEpXG4gICAgICAudGhlbigocmVzcDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVNhdmVkLmVtaXQodGhpcy5lZGl0RGF0YSk7XG4gICAgICAgIHRoaXMuZWRpdERhdGEgPSBudWxsO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoJ+abtOaWsOaVsOaNrumUmeivrycpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxufVxuIl19