@ecip/system
Version:
245 lines • 25.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component } from '@angular/core';
import { NzModalRef, NzMessageService } from 'ng-zorro-antd';
import { FormBuilder, Validators } from "@angular/forms";
import { Observable } from "rxjs/index";
import { DictService } from "@ecip/service";
import { CacheService } from "@delon/cache";
export class SystemDictEditComponent {
/**
* @param {?} modal
* @param {?} msgSrv
* @param {?} fb
* @param {?} dictService
* @param {?} cacheService
*/
constructor(modal, msgSrv, fb, dictService, cacheService) {
this.modal = modal;
this.msgSrv = msgSrv;
this.fb = fb;
this.dictService = dictService;
this.cacheService = cacheService;
this.record = {};
this.stateList = this.cacheService.get(`api/dict/type/enableState`);
this.codeAsyncValidator = (/**
* @param {?} control
* @return {?}
*/
(control) => Observable.create((/**
* @param {?} observer
* @return {?}
*/
(observer) => {
if (!control.value) {
observer.next(null);
observer.complete();
return;
}
/** @type {?} */
let parentId = this.parent ? this.parent.id : null;
this.dictService.checkVkey({ id: this.record.id, pid: parentId, vkey: control.value }).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
if (res.valid === true) {
observer.next(null);
}
else {
observer.next({ error: true, duplicated: true });
}
observer.complete();
}));
})));
this.typeAsyncValidator = (/**
* @param {?} control
* @return {?}
*/
(control) => Observable.create((/**
* @param {?} observer
* @return {?}
*/
(observer) => {
if (!control.value) {
observer.next(null);
observer.complete();
return;
}
if (this.isRoot) {
this.dictService.checkDictType({ id: this.record.id, dictType: control.value }).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
if (res.valid === true) {
observer.next(null);
}
else {
observer.next({ error: true, duplicated: true });
}
observer.complete();
}));
}
else {
observer.next(null);
observer.complete();
}
})));
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
let pid = null;
/** @type {?} */
let dictType = '';
if (!this.record.id) {
if (this.isRoot) {
this.ableOperate = true;
}
else {
this.ableOperate = false;
pid = this.parent.id;
dictType = this.parent.dictType;
}
}
this.form = this.fb.group({
pid: [pid, []],
dictType: [dictType, [Validators.required], [this.typeAsyncValidator]],
//SystemDictEditComponent.typeAsyncValidator(this.dictService, this.record)
vkey: ['', [], [this.codeAsyncValidator]],
//SystemDictEditComponent.codeAsyncValidator(this.dictService, this.record, this.parent)
vname: [null, [Validators.required]],
remark: [null, []],
sortNum: [0, [Validators.required]],
rsvn: [null, []],
valid: [1, [Validators.required]],
createTime: [null, []],
updateTime: [null, []],
creator: [null, []],
operator: [null, []],
});
if (!this.record.id) {
return;
}
if (this.isRoot) {
/** @type {?} */
let vkeyCtl = this.form.get("vkey");
vkeyCtl.clearAsyncValidators();
vkeyCtl.updateValueAndValidity();
}
this.dictService.getById(this.record.id).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
this.isRoot = !res.pid;
this.form.patchValue(res);
this.i = res;
}));
}
/**
* @param {?} c1
* @param {?} c2
* @return {?}
*/
compareNumStr(c1, c2) {
return c1 == c2;
}
/**
* @return {?}
*/
submit() {
for (const i in this.form.controls) {
this.form.controls[i].markAsDirty();
this.form.controls[i].updateValueAndValidity();
}
if (this.form.invalid)
return;
if (!this.record.id) {
//新增
this.dictService.post(this.form.value).subscribe((/**
* @param {?} res
* @return {?}
*/
res => {
this.msgSrv.success('保存成功');
this.modal.close(res);
}));
return;
}
//修改
this.dictService.put(this.record.id, this.form.value).subscribe((/**
* @param {?} res
* @return {?}
*/
res => {
this.msgSrv.success('保存成功');
this.modal.close(res);
}));
}
/**
* @return {?}
*/
close() {
this.modal.destroy();
}
}
SystemDictEditComponent.decorators = [
{ type: Component, args: [{
selector: 'app-system-dict-edit',
template: "<div class=\"modal-header\">\r\n <div *ngIf=\"!record.id\" class=\"modal-title\">\u65B0\u589E\u4FE1\u606F</div>\r\n <div *ngIf=\"record.id\" class=\"modal-title\">\u7F16\u8F91 {{ record.account }} \u4FE1\u606F</div>\r\n</div>\r\n<nz-spin *ngIf=\"!i && !record.id\" class=\"modal-spin\"></nz-spin>\r\n<form *ngIf=\"!record.id || record.id && i\" nz-form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngIf=\"!isRoot\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"vkey\">\u7F16\u7801</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"vkey\" required>\r\n <nz-form-explain *ngIf=\"form.get('vkey').dirty && form.get('vkey').errors || form.get('vkey').pending \">\r\n <ng-container *ngIf=\"form.get('vkey').hasError('required')\">\r\n \u8BF7\u8F93\u5165\u7F16\u7801\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('vkey').hasError('duplicated')\">\r\n \u7F16\u7801\u5DF2\u5B58\u5728\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('vkey').pending\">\r\n \u6821\u9A8C\u4E2D...\r\n </ng-container>\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"vname\">\u540D\u79F0</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"vname\">\r\n <nz-form-explain *ngIf=\"form.get('vname').dirty && form.get('vname').errors\">\r\n \u8BF7\u8F93\u5165\u540D\u79F0\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"dictType\">\u5206\u7C7B</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input *ngIf=\"isRoot\" nz-input formControlName=\"dictType\">\r\n <nz-form-text *ngIf=\"!isRoot\">{{form.get('dictType').value}}</nz-form-text>\r\n <nz-form-explain *ngIf=\"form.get('dictType').dirty && form.get('dictType').errors || form.get('dictType').pending \">\r\n <ng-container *ngIf=\"form.get('dictType').hasError('required')\">\r\n \u8BF7\u8F93\u5165\u7C7B\u578B\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('dictType').hasError('duplicated')\">\r\n \u6839\u7C7B\u578B\u5DF2\u5B58\u5728\r\n </ng-container>\r\n <ng-container *ngIf=\"form.get('dictType').pending\">\r\n \u6821\u9A8C\u4E2D...\r\n </ng-container>\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"sortNum\">\u6392\u5E8F</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"sortNum\">\r\n <nz-form-explain *ngIf=\"form.get('sortNum').dirty && form.get('sortNum').errors\">\r\n \u8BF7\u8F93\u5165\u6392\u5E8F\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzFor=\"remark\">\u5907\u6CE8</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\" nzHasFeedback>\r\n <input nz-input formControlName=\"remark\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label nzXs=\"24\" nzSm=\"7\" nzRequired nzFor=\"valid\">\u542F\u7528\u72B6\u6001</nz-form-label>\r\n <nz-form-control nzXs=\"24\" nzSm=\"12\" nzMd=\"10\">\r\n <nz-radio-group formControlName=\"valid\">\r\n <label nz-radio *ngFor=\"let state of stateList | async\" [nzValue]=\"state.value\">{{state.label}}</label>\r\n </nz-radio-group>\r\n <nz-form-explain *ngIf=\"form.get('valid').dirty && form.get('valid').errors\">\r\n \u8BF7\u9009\u62E9\u542F\u7528\u72B6\u6001\r\n </nz-form-explain>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <button nz-button type=\"button\" (click)=\"close()\">\u5173\u95ED</button>\r\n <button nz-button type=\"submit\" [disabled]=\"!form.valid\" nzType=\"primary\" [nzLoading]=\"dictService.http.loading\">\u4FDD\u5B58</button>\r\n </div>\r\n</form>\r\n"
}] }
];
/** @nocollapse */
SystemDictEditComponent.ctorParameters = () => [
{ type: NzModalRef },
{ type: NzMessageService },
{ type: FormBuilder },
{ type: DictService },
{ type: CacheService }
];
if (false) {
/** @type {?} */
SystemDictEditComponent.prototype.record;
/** @type {?} */
SystemDictEditComponent.prototype.i;
/** @type {?} */
SystemDictEditComponent.prototype.isRoot;
/** @type {?} */
SystemDictEditComponent.prototype.form;
/** @type {?} */
SystemDictEditComponent.prototype.parent;
/** @type {?} */
SystemDictEditComponent.prototype.ableOperate;
/** @type {?} */
SystemDictEditComponent.prototype.stateList;
/** @type {?} */
SystemDictEditComponent.prototype.codeAsyncValidator;
/** @type {?} */
SystemDictEditComponent.prototype.typeAsyncValidator;
/**
* @type {?}
* @private
*/
SystemDictEditComponent.prototype.modal;
/** @type {?} */
SystemDictEditComponent.prototype.msgSrv;
/**
* @type {?}
* @private
*/
SystemDictEditComponent.prototype.fb;
/** @type {?} */
SystemDictEditComponent.prototype.dictService;
/**
* @type {?}
* @private
*/
SystemDictEditComponent.prototype.cacheService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZWNpcC9zeXN0ZW0vIiwic291cmNlcyI6WyJzcmMvZGljdC9lZGl0L2VkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBQyxXQUFXLEVBQTRDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyxVQUFVLEVBQVcsTUFBTSxZQUFZLENBQUM7QUFHaEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBTTFDLE1BQU0sT0FBTyx1QkFBdUI7Ozs7Ozs7O0lBVWxDLFlBQ1UsS0FBaUIsRUFDbEIsTUFBd0IsRUFDdkIsRUFBZSxFQUNoQixXQUF3QixFQUN2QixZQUEwQjtRQUoxQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFkcEMsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQU1qQixjQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQThEL0QsdUJBQWtCOzs7O1FBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUUsQ0FDNUMsVUFBVSxDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLFFBQW9DLEVBQUUsRUFBRTtZQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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Ozs7UUFBQyxHQUFHLENBQUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDOzs7WUF6SUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLHFpS0FBb0M7YUFDckM7Ozs7WUFaUSxVQUFVO1lBQUUsZ0JBQWdCO1lBRTdCLFdBQVc7WUFJWCxXQUFXO1lBQ1gsWUFBWTs7OztJQU9sQix5Q0FBaUI7O0lBQ2pCLG9DQUFPOztJQUNQLHlDQUFnQjs7SUFDaEIsdUNBQWdCOztJQUNoQix5Q0FBTzs7SUFDUCw4Q0FBcUI7O0lBQ3JCLDRDQUErRDs7SUE4RC9ELHFEQWdCSzs7SUFFTCxxREFxQks7Ozs7O0lBakdILHdDQUF5Qjs7SUFDekIseUNBQStCOzs7OztJQUMvQixxQ0FBdUI7O0lBQ3ZCLDhDQUErQjs7Ozs7SUFDL0IsK0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOek1vZGFsUmVmLCBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZCc7XHJcbmltcG9ydCB7IFNGU2NoZW1hLCBTRlVJU2NoZW1hIH0gZnJvbSAnQGRlbG9uL2Zvcm0nO1xyXG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JzfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBPYnNlcnZlcn0gZnJvbSBcInJ4anMvaW5kZXhcIjtcclxuaW1wb3J0IHt1bnRpbH0gZnJvbSBcInNlbGVuaXVtLXdlYmRyaXZlclwiO1xyXG5pbXBvcnQgZWxlbWVudElzRGlzYWJsZWQgPSB1bnRpbC5lbGVtZW50SXNEaXNhYmxlZDtcclxuaW1wb3J0IHtEaWN0U2VydmljZX0gZnJvbSBcIkBlY2lwL3NlcnZpY2VcIjtcclxuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gXCJAZGVsb24vY2FjaGVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXN5c3RlbS1kaWN0LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN5c3RlbURpY3RFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICByZWNvcmQ6IGFueSA9IHt9O1xyXG4gIGk6IGFueTtcclxuICBpc1Jvb3Q6IGJvb2xlYW47XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIHBhcmVudDtcclxuICBhYmxlT3BlcmF0ZTogYm9vbGVhbjtcclxuICBzdGF0ZUxpc3QgPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoYGFwaS9kaWN0L3R5cGUvZW5hYmxlU3RhdGVgKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBtb2RhbDogTnpNb2RhbFJlZixcclxuICAgIHB1YmxpYyBtc2dTcnY6IE56TWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHB1YmxpYyBkaWN0U2VydmljZTogRGljdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IHBpZCA9IG51bGw7XHJcbiAgICBsZXQgZGljdFR5cGUgPSAnJztcclxuICAgIGlmICghdGhpcy5yZWNvcmQuaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgICAgdGhpcy5hYmxlT3BlcmF0ZSA9IHRydWU7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLmFibGVPcGVyYXRlID0gZmFsc2U7XHJcbiAgICAgICAgcGlkID0gdGhpcy5wYXJlbnQuaWQ7XHJcbiAgICAgICAgZGljdFR5cGUgPSB0aGlzLnBhcmVudC5kaWN0VHlwZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBwaWQ6IFtwaWQsIFtdXSxcclxuICAgICAgZGljdFR5cGU6IFtkaWN0VHlwZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbdGhpcy50eXBlQXN5bmNWYWxpZGF0b3JdXSwgLy9TeXN0ZW1EaWN0RWRpdENvbXBvbmVudC50eXBlQXN5bmNWYWxpZGF0b3IodGhpcy5kaWN0U2VydmljZSwgdGhpcy5yZWNvcmQpXHJcbiAgICAgIHZrZXk6IFsnJywgW10sIFt0aGlzLmNvZGVBc3luY1ZhbGlkYXRvcl1dLCAvL1N5c3RlbURpY3RFZGl0Q29tcG9uZW50LmNvZGVBc3luY1ZhbGlkYXRvcih0aGlzLmRpY3RTZXJ2aWNlLCB0aGlzLnJlY29yZCwgdGhpcy5wYXJlbnQpXHJcbiAgICAgIHZuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcmVtYXJrOiBbbnVsbCwgW11dLFxyXG4gICAgICBzb3J0TnVtOiBbMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcnN2bjogW251bGwsIFtdXSxcclxuICAgICAgdmFsaWQ6IFsxLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjcmVhdGVUaW1lOiBbbnVsbCwgW11dLFxyXG4gICAgICB1cGRhdGVUaW1lOiBbbnVsbCwgW11dLFxyXG4gICAgICBjcmVhdG9yOiBbbnVsbCwgW11dLFxyXG4gICAgICBvcGVyYXRvcjogW251bGwsIFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5yZWNvcmQuaWQpIHtcclxuICAgICAgcmV0dXJuIDtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmlzUm9vdCl7XHJcbiAgICAgIGxldCB2a2V5Q3RsID0gdGhpcy5mb3JtLmdldChcInZrZXlcIik7XHJcbiAgICAgIHZrZXlDdGwuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgdmtleUN0bC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuZGljdFNlcnZpY2UuZ2V0QnlJZCh0aGlzLnJlY29yZC5pZCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzUm9vdCA9ICFyZXMucGlkO1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlcyk7XHJcbiAgICAgICAgdGhpcy5pID0gcmVzO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVOdW1TdHIoYzE6IGFueSwgYzI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGMxID09IGMyO1xyXG4gIH1cclxuXHJcbiAgY29kZUFzeW5jVmFsaWRhdG9yID0gKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PlxyXG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxWYWxpZGF0aW9uRXJyb3JzPikgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KG51bGwpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBwYXJlbnRJZCA9IHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuaWQgOiBudWxsO1xyXG4gICAgICB0aGlzLmRpY3RTZXJ2aWNlLmNoZWNrVmtleSh7aWQ6IHRoaXMucmVjb3JkLmlkLCBwaWQ6IHBhcmVudElkLCB2a2V5OiBjb250cm9sLnZhbHVlfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMudmFsaWQgPT09IHRydWUpIHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ic2VydmVyLm5leHQoe2Vycm9yOiB0cnVlLCBkdXBsaWNhdGVkOiB0cnVlfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIHR5cGVBc3luY1ZhbGlkYXRvciA9IChjb250cm9sOiBGb3JtQ29udHJvbCkgPT5cclxuICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8VmFsaWRhdGlvbkVycm9ycz4pID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1Jvb3Qpe1xyXG4gICAgICAgIHRoaXMuZGljdFNlcnZpY2UuY2hlY2tEaWN0VHlwZSh7aWQ6IHRoaXMucmVjb3JkLmlkLCBkaWN0VHlwZTogY29udHJvbC52YWx1ZX0pLnN1YnNjcmliZSgocmVzOmFueSk9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnZhbGlkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHsgZXJyb3I6IHRydWUsIGR1cGxpY2F0ZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLmZvcm0uY29udHJvbHMpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2ldLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tpXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5yZWNvcmQuaWQpIHtcclxuICAgICAgLy/mlrDlop5cclxuICAgICAgdGhpcy5kaWN0U2VydmljZS5wb3N0KHRoaXMuZm9ybS52YWx1ZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5tc2dTcnYuc3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7XHJcbiAgICAgICAgdGhpcy5tb2RhbC5jbG9zZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy/kv67mlLlcclxuICAgIHRoaXMuZGljdFNlcnZpY2UucHV0KHRoaXMucmVjb3JkLmlkLCB0aGlzLmZvcm0udmFsdWUpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLm1zZ1Nydi5zdWNjZXNzKCfkv53lrZjmiJDlip8nKTtcclxuICAgICAgdGhpcy5tb2RhbC5jbG9zZShyZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMubW9kYWwuZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG4iXX0=