@ecip/system
Version:
276 lines • 26.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewChild } from '@angular/core';
import { ModalHelper } from '@delon/theme';
import { SystemResourceEditComponent } from "./edit/edit.component";
import { NzTableComponent, NzMessageService } from 'ng-zorro-antd';
import { CacheService } from '@delon/cache';
import { AppsService, ResourceService } from "@ecip/service";
export class SystemResourceComponent {
/**
* @param {?} resourceService
* @param {?} appsService
* @param {?} modal
* @param {?} msgSrv
* @param {?} cacheService
*/
constructor(resourceService, appsService, modal, msgSrv, cacheService) {
this.resourceService = resourceService;
this.appsService = appsService;
this.modal = modal;
this.msgSrv = msgSrv;
this.cacheService = cacheService;
// url = `api/v1/sysrResource/list`;
this.searchSchema = {
properties: {
id: {
type: 'string',
title: '编号'
}
}
};
this.data = [];
this.dataList = {}; //所有节点的map,key为id,value为节点对象
this.appId = -1;
}
/**
* @return {?}
*/
ngOnInit() {
/*this.data.forEach(item => {
this.expandDataCache[ item.key ] = this.convertTreeToList(item);
});
console.log(this.expandDataCache)*/
this.appsService.getList().subscribe((/**
* @param {?} appList
* @return {?}
*/
appList => {
this.appList = appList;
}));
this.appChange();
}
/**
* @return {?}
*/
appChange() {
this.resourceService.getList({ appId: this.appId }).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
this.data = res;
this.data.forEach((/**
* @param {?} item
* @return {?}
*/
item => {
this.dataList[item.id] = item;
}));
}));
}
/**
* @param {?} parentId
* @return {?}
*/
addChild(parentId) {
this.selectId = parentId;
this.add(false);
}
/**
* @param {?} isRoot
* @return {?}
*/
add(isRoot) {
/** @type {?} */
let parent;
if (!isRoot) {
if (!this.selectId) {
this.msgSrv.warning("请选择父节点");
return;
}
parent = this.dataList[this.selectId];
}
this.modal
.createStatic(SystemResourceEditComponent, {
i: {}, isRoot: isRoot, parent: parent, appId: this.appId
})
.subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
this.dataList[res.id] = res;
if (isRoot) {
this.data.push(res);
return;
}
if (!parent.children) {
parent.children = [];
parent.expand = true;
}
parent.children.push(res);
}));
}
/**
* @param {?} item
* @return {?}
*/
addpermission(item) {
this.resourceService.addDefaultPermission(item).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
if (!item.children) {
item.children = [];
}
res.forEach((/**
* @param {?} it
* @return {?}
*/
it => {
item.children.push(it);
}));
}));
}
/**
* @param {?} item
* @return {?}
*/
edit(item) {
this.modal
.createStatic(SystemResourceEditComponent, { record: item })
.subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
item = Object.assign(item, res.result);
if (res.addFlag) {
this.resourceService.getChildren(res.result.id).subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
item.children = [];
data.forEach((/**
* @param {?} it
* @return {?}
*/
it => {
item.children.push(it);
}));
}));
}
this.dataList[res.result.id] = item;
}));
}
/**
* @param {?} item
* @return {?}
*/
delete(item) {
this.resourceService.deleteById(item.id).subscribe((/**
* @param {?} res
* @return {?}
*/
res => {
this.msgSrv.success('删除成功');
//根节点
if (!item.pid) {
this.data = this.data.filter((/**
* @param {?} _item
* @return {?}
*/
_item => _item.id !== item.id));
this.dataList[item.id] = null;
return;
}
//子节点
this.dataList[item.pid].children =
this.dataList[item.pid].children.filter((/**
* @param {?} _item
* @return {?}
*/
_item => _item.id !== item.id));
}));
}
/**
* @param {?} data
* @param {?} $event
* @return {?}
*/
collapse(data, $event) {
if (!$event || data.children.length > 0) {
return;
}
this.resourceService.getChildren(data.id).subscribe((/**
* @param {?} res
* @return {?}
*/
res => {
data.children = res;
data.children.forEach((/**
* @param {?} item
* @return {?}
*/
item => {
this.dataList[item.id] = item;
}));
}));
}
}
SystemResourceComponent.decorators = [
{ type: Component, args: [{
selector: 'app-system-resource',
template: "<page-header [action]=\"phPhAction\">\r\n <ng-template #phPhAction>\r\n <nz-dropdown>\r\n <button acl [acl-ability]=\"'resource:add'\" nz-button nz-dropdown nzType=\"primary\">\r\n \u65B0\u5EFA\r\n <i class=\"anticon anticon-down\"></i>\r\n </button>\r\n <ul nz-menu>\r\n <li (click)=\"add(true)\" nz-menu-item>\r\n <a>\u6839\u8282\u70B9</a>\r\n </li>\r\n <li (click)=\"add(false)\" nz-menu-item>\r\n <a>\u5B50\u8282\u70B9</a>\r\n </li>\r\n </ul>\r\n </nz-dropdown>\r\n </ng-template>\r\n</page-header>\r\n<nz-card>\r\n <form nz-form [nzLayout]=\"'inline'\">\r\n <!--<nz-form-item> <nz-col class=\"ant-form-item-control-wrapper\"> <div class=\"ant-form-item-control\"> <button nz-popconfirm nzTitle=\"\u786E\u8BA4\u6388\u6743\u5417?\" (nzOnConfirm)=\"assign()\" nz-button nzType=\"primary\">\u6388\u6743</button> <button nz-popconfirm nzTitle=\"\u786E\u8BA4\u53D6\u6D88\u6388\u6743\u5417?\" (nzOnConfirm)=\"cancel()\" nz-button nzType=\"warning\">\u53D6\u6D88\u6388\u6743</button> </div> </nz-col> </nz-form-item>-->\r\n <nz-form-item>\r\n <nz-form-label>\u7CFB\u7EDF</nz-form-label>\r\n <nz-col class=\"ant-form-item-control-wrapper\">\r\n <div class=\"ant-form-item-control\">\r\n <nz-select style=\"width: 240px\" name=\"appId\" nzShowSearch [(ngModel)]=\"appId\" (ngModelChange)=\"appChange()\">\r\n <nz-option *ngFor=\"let option of appList\" [nzLabel]=\"option.appName\" [nzValue]=\"option.appId\"></nz-option>\r\n </nz-select>\r\n </div>\r\n </nz-col>\r\n </nz-form-item>\r\n </form>\r\n <!--<sf mode=\"search\" [schema]=\"searchSchema\" (formSubmit)=\"st.reset($event)\" (formReset)=\"st.reset($event)\"></sf>-->\r\n <!--<simple-table [data]=\"url\" [extraParams]=\"params\" [total]=\"total\" [columns]=\"columns\" [preDataChange]=\"dataChange\" [resReName]=\"{list: 'results' }\" (radioChange)=\"radioChange($event)\"> <!–<ng-template #expand let-item let-index=\"index\" let-column=\"column\"> {{ item.description }} </ng-template>–> <ng-template st-row=\"custom\" let-item let-index=\"index\"> <nz-tooltip [nzTitle]=\"'\u5E74\u9F84\uFF1A' + item.phone\"> <span nz-tooltip>tooltip: {{item.phone}}-{{index}}</span> </nz-tooltip> </ng-template> </simple-table>-->\r\n <nz-radio-group style=\"display: inline\" [(ngModel)]=\"selectId\">\r\n <nz-table style=\"margin-top: 16px\" #nzTable [nzData]=\"data\" [nzShowPagination]=\"false\" [nzFrontPagination]=\"false\" [nzBordered]=\"true\" [nzLoading]=\"resourceService.http.loading\" [nzScroll]=\"{x:'2000px'}\">\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"65px\" nzLeft=\"0px\"></th>\r\n <th nzWidth=\"200px\" nzLeft=\"65px\">\u8D44\u6E90\u540D\u79F0</th>\r\n <!--<th >\u7CFB\u7EDF</th>-->\r\n <th>\u7F16\u7801</th>\r\n <!--<th>\u7EC4\u7EC7\u673A\u6784</th>-->\r\n <th>\u8D44\u6E90\u5206\u7C7B</th>\r\n <th>\u8D44\u6E90\u7C7B\u578B</th>\r\n <th>AppID</th>\r\n <th>URL</th>\r\n <th>URL\u7C7B\u578B</th>\r\n <th>\u8D44\u6E90\u6837\u5F0F</th>\r\n <th>\u6743\u9650\u6807\u5FD7</th>\r\n <th>\u663E\u793A\u5728\u9762\u5305\u5C51</th>\r\n <th>\u662F\u5426\u83DC\u5355\u7EC4</th>\r\n <th>\u6392\u5E8F</th>\r\n <th>\u542F\u7528\u72B6\u6001</th>\r\n <th nzWidth=\"150px\" nzRight=\"0px\">\u64CD\u4F5C</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-template #recursiveList let-data>\r\n <ng-template ngFor let-item [ngForOf]=\"data\">\r\n <tr>\r\n <td nzLeft=\"0px\">\r\n <label nz-radio [nzValue]=\"item.id\"></label>\r\n </td>\r\n <td nzLeft=\"65px\" [nzIndentSize]=\"(item.nodeLevel)*20\" [nzShowExpand]=\"item.children\" [(nzExpand)]=\"item.expand\" (nzExpandChange)=\"collapse(item,$event)\">{{item.rsrcName}}</td>\r\n <!--<td>{{item.appId}}</td>-->\r\n <td>{{item.code}}</td>\r\n <!--<td>{{item.deptId}}</td>-->\r\n <td>{{item.typeSrc | dictLabel : \"typeSrc\" | async}}</td>\r\n <td>{{item.typeNode | dictLabel : \"typeNode\" | async}}</td>\r\n <td>{{item.appId}}</td>\r\n <td>{{item.url}}</td>\r\n <td>{{item.urlTarget}}</td>\r\n <td>{{item.rsrcIcon}}</td>\r\n <td>{{item.permission}}</td>\r\n <td>{{item.flagBreadcrumbText}}</td>\r\n <td>{{item.flagMenuGroupText}}</td>\r\n <td>{{item.sortNm}}</td>\r\n <td>{{item.rsrcStatusText}}</td>\r\n <td nzRight=\"0px\">\r\n <a acl [acl-ability]=\"'resource:add'\" (click)=\"addChild(item.id)\">\u6DFB\u52A0\u5B50\u8282\u70B9</a>\r\n <nz-divider nzType=\"vertical\" acl [acl-ability]=\"'resource:add'\"></nz-divider>\r\n <nz-dropdown [acl]=\"{ ability: ['resource:auth', 'resource:edit', 'resource:remove'], mode: 'oneOf' }\">\r\n <a nz-dropdown>\r\n <i class=\"anticon anticon-down\"></i>\r\n </a>\r\n <ul nz-menu>\r\n <li acl [acl-ability]=\"'resource:auth'\" nz-popconfirm nzTitle=\"\u662F\u5426\u6DFB\u52A0\uFF1A\u67E5\u770B\u3001\u65B0\u589E\u3001\u4FEE\u6539\u3001\u5220\u9664\u9ED8\u8BA4\u6743\u9650\uFF1F\" (nzOnConfirm)=\"addpermission(item)\" nz-menu-item>\r\n <a>\u65B0\u589E\u9ED8\u8BA4\u6743\u9650</a>\r\n </li>\r\n <li acl [acl-ability]=\"'resource:edit'\" (click)=\"edit(item)\" nz-menu-item>\r\n <a>\u7F16\u8F91</a>\r\n </li>\r\n <li acl [acl-ability]=\"'resource:remove'\" nz-popconfirm nzTitle=\"\u786E\u8BA4\u5220\u9664\u5417?\" (nzOnConfirm)=\"delete(item)\" nz-menu-item>\r\n <a>\u5220\u9664</a>\r\n </li>\r\n </ul>\r\n </nz-dropdown>\r\n </td>\r\n </tr>\r\n <ng-container *ngIf=\"item.expand && item.children?.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.children }\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: data }\"></ng-container>\r\n </tbody>\r\n </nz-table>\r\n </nz-radio-group>\r\n</nz-card>\r\n",
styles: [":host ::ng-deep .ant-table-wrapper{margin-top:16px}"]
}] }
];
/** @nocollapse */
SystemResourceComponent.ctorParameters = () => [
{ type: ResourceService },
{ type: AppsService },
{ type: ModalHelper },
{ type: NzMessageService },
{ type: CacheService }
];
SystemResourceComponent.propDecorators = {
nzTable: [{ type: ViewChild, args: ['nzTable',] }]
};
if (false) {
/** @type {?} */
SystemResourceComponent.prototype.searchSchema;
/** @type {?} */
SystemResourceComponent.prototype.nzTable;
/** @type {?} */
SystemResourceComponent.prototype.selectId;
/** @type {?} */
SystemResourceComponent.prototype.data;
/** @type {?} */
SystemResourceComponent.prototype.dataList;
/** @type {?} */
SystemResourceComponent.prototype.appList;
/** @type {?} */
SystemResourceComponent.prototype.appId;
/** @type {?} */
SystemResourceComponent.prototype.resourceService;
/** @type {?} */
SystemResourceComponent.prototype.appsService;
/**
* @type {?}
* @private
*/
SystemResourceComponent.prototype.modal;
/** @type {?} */
SystemResourceComponent.prototype.msgSrv;
/**
* @type {?}
* @private
*/
SystemResourceComponent.prototype.cacheService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVjaXAvc3lzdGVtLyIsInNvdXJjZXMiOlsic3JjL3Jlc291cmNlL3Jlc291cmNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV4RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVEzRCxNQUFNLE9BQU8sdUJBQXVCOzs7Ozs7OztJQW9CbEMsWUFBbUIsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDdkIsS0FBa0IsRUFDbkIsTUFBd0IsRUFDdkIsWUFBMEI7UUFKM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWM7O1FBdEI5QyxpQkFBWSxHQUFhO1lBQ3ZCLFVBQVUsRUFBRTtnQkFDVixFQUFFLEVBQUU7b0JBQ0YsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRjtTQUNGLENBQUM7UUFLRixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtRQUczQyxVQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFPWCxDQUFDOzs7O0lBRUQsUUFBUTtR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dUNBQVU7O0lBQ1YsMkNBQWM7O0lBRWQsMENBQVE7O0lBQ1Isd0NBQVc7O0lBRUMsa0RBQXVDOztJQUN2Qyw4Q0FBK0I7Ozs7O0lBQy9CLHdDQUEwQjs7SUFDMUIseUNBQStCOzs7OztJQUMvQiwrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IF9IdHRwQ2xpZW50LCBNb2RhbEhlbHBlciB9IGZyb20gJ0BkZWxvbi90aGVtZSc7XHJcbmltcG9ydCB7U0ZDb21wb25lbnQsIFNGU2NoZW1hfSBmcm9tICdAZGVsb24vZm9ybSc7XHJcbmltcG9ydCB7U3lzdGVtUmVzb3VyY2VFZGl0Q29tcG9uZW50fSBmcm9tIFwiLi9lZGl0L2VkaXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TnpUYWJsZUNvbXBvbmVudCwgTnpNZXNzYWdlU2VydmljZX0gZnJvbSAnbmctem9ycm8tYW50ZCc7XHJcbmltcG9ydCB7Q2FjaGVTZXJ2aWNlfSBmcm9tICdAZGVsb24vY2FjaGUnO1xyXG5pbXBvcnQge0FwcHNTZXJ2aWNlLCBSZXNvdXJjZVNlcnZpY2V9IGZyb20gXCJAZWNpcC9zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Y3JlYXRlQ29udGVudENoaWxkcmVufSBmcm9tIFwiQGFuZ3VsYXIvY29tcGlsZXIvc3JjL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXN5c3RlbS1yZXNvdXJjZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1SZXNvdXJjZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gdXJsID0gYGFwaS92MS9zeXNyUmVzb3VyY2UvbGlzdGA7XHJcbiAgc2VhcmNoU2NoZW1hOiBTRlNjaGVtYSA9IHtcclxuICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgaWQ6IHtcclxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICB0aXRsZTogJ+e8luWPtydcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgQFZpZXdDaGlsZCgnbnpUYWJsZScpIG56VGFibGU6IE56VGFibGVDb21wb25lbnQ7XHJcblxyXG4gIHNlbGVjdElkO1xyXG5cclxuICBkYXRhID0gW107XHJcbiAgZGF0YUxpc3QgPSB7fTsgLy/miYDmnInoioLngrnnmoRtYXDvvIxrZXnkuLppZO+8jHZhbHVl5Li66IqC54K55a+56LGhXHJcblxyXG4gIGFwcExpc3Q7XHJcbiAgYXBwSWQgPSAtMTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlc291cmNlU2VydmljZTogUmVzb3VyY2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBhcHBzU2VydmljZTogQXBwc1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxIZWxwZXIsXHJcbiAgICAgICAgICAgICAgcHVibGljIG1zZ1NydjogTnpNZXNzYWdlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8qdGhpcy5kYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwYW5kRGF0YUNhY2hlWyBpdGVtLmtleSBdID0gdGhpcy5jb252ZXJ0VHJlZVRvTGlzdChpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5leHBhbmREYXRhQ2FjaGUpKi9cclxuXHJcbiAgICB0aGlzLmFwcHNTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoYXBwTGlzdCA9PiB7XHJcbiAgICAgIHRoaXMuYXBwTGlzdCA9IGFwcExpc3Q7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXBwQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBhcHBDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRMaXN0KHthcHBJZDogdGhpcy5hcHBJZH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5kYXRhID0gcmVzO1xyXG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFMaXN0W2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZENoaWxkKHBhcmVudElkKSB7XHJcbiAgICB0aGlzLnNlbGVjdElkID0gcGFyZW50SWQ7XHJcbiAgICB0aGlzLmFkZChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBhZGQoaXNSb290IDogYm9vbGVhbikge1xyXG4gICAgbGV0IHBhcmVudDtcclxuICAgIGlmICghaXNSb290KSB7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RJZCkge1xyXG4gICAgICAgIHRoaXMubXNnU3J2Lndhcm5pbmcoXCLor7fpgInmi6nniLboioLngrlcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuZGF0YUxpc3RbdGhpcy5zZWxlY3RJZF07XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGFsXHJcbiAgICAgIC5jcmVhdGVTdGF0aWMoU3lzdGVtUmVzb3VyY2VFZGl0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgaToge30gLCBpc1Jvb3Q6IGlzUm9vdCwgcGFyZW50OiBwYXJlbnQsIGFwcElkOiB0aGlzLmFwcElkfSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhTGlzdFtyZXMuaWRdID0gcmVzO1xyXG4gICAgICAgIGlmIChpc1Jvb3QpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKHJlcyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGFyZW50LmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICAgIHBhcmVudC5leHBhbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChyZXMpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZHBlcm1pc3Npb24oaXRlbSkge1xyXG4gICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuYWRkRGVmYXVsdFBlcm1pc3Npb24oaXRlbSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT57XHJcbiAgICAgIGlmICghaXRlbS5jaGlsZHJlbikge1xyXG4gICAgICAgIGl0ZW0uY2hpbGRyZW4gPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXMuZm9yRWFjaChpdCA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5wdXNoKGl0KTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZWRpdChpdGVtKSB7XHJcbiAgICB0aGlzLm1vZGFsXHJcbiAgICAgIC5jcmVhdGVTdGF0aWMoU3lzdGVtUmVzb3VyY2VFZGl0Q29tcG9uZW50LCB7IHJlY29yZDogaXRlbSB9KVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGl0ZW0gPSAgT2JqZWN0LmFzc2lnbihpdGVtLCByZXMucmVzdWx0KTtcclxuICAgICAgICBpZihyZXMuYWRkRmxhZykge1xyXG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0Q2hpbGRyZW4ocmVzLnJlc3VsdC5pZCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICBkYXRhLmZvckVhY2goaXQgPT4ge1xyXG4gICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4ucHVzaChpdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YUxpc3RbcmVzLnJlc3VsdC5pZF0gPSBpdGVtO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShpdGVtKSB7XHJcbiAgICB0aGlzLnJlc291cmNlU2VydmljZS5kZWxldGVCeUlkKGl0ZW0uaWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLm1zZ1Nydi5zdWNjZXNzKCfliKDpmaTmiJDlip8nKTtcclxuICAgICAgLy/moLnoioLngrlcclxuICAgICAgaWYgKCFpdGVtLnBpZCkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoX2l0ZW0gPT4gX2l0ZW0uaWQgIT09IGl0ZW0uaWQpO1xyXG4gICAgICAgIHRoaXMuZGF0YUxpc3RbaXRlbS5pZF0gPSBudWxsO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvL+WtkOiKgueCuVxyXG4gICAgICB0aGlzLmRhdGFMaXN0W2l0ZW0ucGlkXS5jaGlsZHJlbiA9XHJcbiAgICAgICAgdGhpcy5kYXRhTGlzdFtpdGVtLnBpZF0uY2hpbGRyZW4uZmlsdGVyKF9pdGVtID0+IF9pdGVtLmlkICE9PSBpdGVtLmlkKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGNvbGxhcHNlKGRhdGE6IGFueSwgJGV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoISRldmVudCB8fCBkYXRhLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0Q2hpbGRyZW4oZGF0YS5pZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGRhdGEuY2hpbGRyZW4gPSByZXM7XHJcbiAgICAgIGRhdGEuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFMaXN0W2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19