e5core-angular-ui
Version:
e5 Anywhere Angular UI
176 lines • 18.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ChangeDetectionStrategy, Input, EventEmitter, Output, QueryList, ViewChildren } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Guid } from 'guid-typescript';
import { WorkDocumentFoundationService, WorkAttachmentTypeFoundationService } from 'e5core-angular-services';
import { E5coreUiGenerateDocumentBaseComponent } from './component/e5core-ui-generate-document-base';
import { UiStyleService } from '../../services/ui-style.service';
export class E5coreUiGenerateDocumentComponent {
/**
* @param {?} style
* @param {?} workAttachmentTypeFoundationService
* @param {?} workDocumentFoundationService
*/
constructor(style, workAttachmentTypeFoundationService, workDocumentFoundationService) {
this.style = style;
this.workAttachmentTypeFoundationService = workAttachmentTypeFoundationService;
this.workDocumentFoundationService = workDocumentFoundationService;
this.showGenerateButton = true;
this.readonly = false;
this.generateDocumentEvent = new EventEmitter();
this.selectedDocumentTemplateId = 0;
this.selectedAttachmentTypeId = 0;
}
/**
* @return {?}
*/
ngOnInit() {
if (this.workItem$ == null) {
console.error('e5core-ui-generate-document [workItem$] must have a BehaviorSubject<WorkItemModel>');
return;
}
if (typeof this.workItem$ != 'undefined') {
this.workItem$.subscribe(wim => {
if (wim.workId != null && wim.workId != Guid.EMPTY) {
this.populateDocumentTemplates(wim.workId);
this.populateAttachmentTypes(wim.workId);
}
});
}
}
/**
* @param {?} wid
* @return {?}
*/
populateAttachmentTypes(wid) {
this.workAttachmentTypeFoundationService.get(wid).subscribe(s => {
this.generateDocumentComponents.forEach(element => {
element.attachmentTypes = s;
});
}, error => {
console.error(error);
});
}
/**
* @param {?} wid
* @return {?}
*/
populateDocumentTemplates(wid) {
this.workDocumentFoundationService.getDocumentTemplates(wid, null).subscribe(s => {
this.generateDocumentComponents.forEach(element => {
element.documentTemplates = s;
});
}, error => {
console.error(error);
});
}
/**
* @param {?} event
* @return {?}
*/
onGenerateDocument(event) {
this.generateDocument();
}
/**
* @return {?}
*/
generateDocument() {
if (this.selectedDocumentTemplateId != 0) {
/** @type {?} */
var wid = this.workItem$.getValue().workId;
this.workDocumentFoundationService.create(wid, this.selectedDocumentTemplateId, this.selectedAttachmentTypeId).subscribe(s => {
if (typeof this.workItem$ != "undefined") {
this.workItem$.next(this.workItem$.getValue());
}
if (typeof this.fileUpload$ != "undefined") {
this.fileUpload$.next(this.fileUpload$.getValue());
}
this.generateDocumentEvent.emit({ workId: wid, id: null, name: s.name, fullUrl: s.documentUrl });
}, error => {
console.error(error);
throw error;
});
}
}
/**
* @param {?} event
* @return {?}
*/
onSelectDocumentTemplate(event) {
this.selectedDocumentTemplateId = event.value.id;
}
/**
* @param {?} event
* @return {?}
*/
onSelectAttachmentType(event) {
this.selectedAttachmentTypeId = event.value.id;
}
}
E5coreUiGenerateDocumentComponent.decorators = [
{ type: Component, args: [{
selector: 'e5core-ui-generate-document',
template: `
<span *ngIf="workItem$" [ngSwitch]="style.current()">
<e5core-ui-generate-document-box *ngSwitchCase='0' [showGenerateButton]='showGenerateButton' [readonly]='readonly' (selectDocumentTemplateEvent)='onSelectDocumentTemplate($event)' (selectAttachmentTypeEvent)='onSelectAttachmentType($event)' (generateDocumentEvent)='onGenerateDocument($event)'></e5core-ui-generate-document-box>
<e5core-ui-generate-document-bootstrap *ngSwitchCase='1' [showGenerateButton]='showGenerateButton' [readonly]='readonly' (selectDocumentTemplateEvent)='onSelectDocumentTemplate($event)' (selectAttachmentTypeEvent)='onSelectAttachmentType($event)' (generateDocumentEvent)='onGenerateDocument($event)'></e5core-ui-generate-document-bootstrap>
<e5core-ui-generate-document-material *ngSwitchCase='2' [showGenerateButton]='showGenerateButton' [readonly]='readonly' (selectDocumentTemplateEvent)='onSelectDocumentTemplate($event)' (selectAttachmentTypeEvent)='onSelectAttachmentType($event)' (generateDocumentEvent)='onGenerateDocument($event)'></e5core-ui-generate-document-material>
</span>
<div *ngIf="!(workItem$)" class="e5core-component-error"><e5core-ui-generate-document> [workItem$] must have a BehaviorSubject<WorkItemModel></div>`,
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
E5coreUiGenerateDocumentComponent.ctorParameters = () => [
{ type: UiStyleService },
{ type: WorkAttachmentTypeFoundationService },
{ type: WorkDocumentFoundationService }
];
E5coreUiGenerateDocumentComponent.propDecorators = {
workItem$: [{ type: Input }],
fileUpload$: [{ type: Input }],
showGenerateButton: [{ type: Input }],
readonly: [{ type: Input }],
generateDocumentEvent: [{ type: Output }],
generateDocumentComponents: [{ type: ViewChildren, args: [E5coreUiGenerateDocumentBaseComponent,] }]
};
if (false) {
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.workItem$;
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.fileUpload$;
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.showGenerateButton;
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.readonly;
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.generateDocumentEvent;
/**
* @type {?}
* @private
*/
E5coreUiGenerateDocumentComponent.prototype.selectedDocumentTemplateId;
/**
* @type {?}
* @private
*/
E5coreUiGenerateDocumentComponent.prototype.selectedAttachmentTypeId;
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.generateDocumentComponents;
/** @type {?} */
E5coreUiGenerateDocumentComponent.prototype.style;
/**
* @type {?}
* @private
*/
E5coreUiGenerateDocumentComponent.prototype.workAttachmentTypeFoundationService;
/**
* @type {?}
* @private
*/
E5coreUiGenerateDocumentComponent.prototype.workDocumentFoundationService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2U1Y29yZS1hbmd1bGFyLXVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50L2U1Y29yZS11aS1nZW5lcmF0ZS1kb2N1bWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsdUJBQXVCLEVBQUUsS0FBSyxFQUFpQixZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHdkMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLG1DQUFtQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0csT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBYWpFLE1BQU0sT0FBTyxpQ0FBaUM7Ozs7OztJQWM1QyxZQUNTLEtBQW9CLEVBQ25CLG1DQUF3RSxFQUN4RSw2QkFBNEQ7UUFGN0QsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNuQix3Q0FBbUMsR0FBbkMsbUNBQW1DLENBQXFDO1FBQ3hFLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBK0I7UUFiN0QsdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBQ25DLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDekIsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFckUsK0JBQTBCLEdBQVEsQ0FBQyxDQUFDO1FBQ3BDLDZCQUF3QixHQUFRLENBQUMsQ0FBQztJQVN0QyxDQUFDOzs7O0lBRUwsUUFBUTtRQUNOLElB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QUNELEtBQUssQ0FBQyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQyxDQUNGLENBQUE7U0FDRjtJQUNILENBQUM7Ozs7O0lBRU0sd0JBQXdCLENBQUMsS0FBSztRQUNuQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQzs7Ozs7SUFFTSxzQkFBc0IsQ0FBQyxLQUFLO1FBQ2pDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDOzs7WUEzR0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw2QkFBNkI7Z0JBQ3ZDLFFBQVEsRUFBRTs7Ozs7O2tLQU1zSjtnQkFDaEssZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7Ozs7WUFaUSxjQUFjO1lBSGlCLG1DQUFtQztZQUFsRSw2QkFBNkI7Ozt3QkFrQm5DLEtBQUs7MEJBQ0wsS0FBSztpQ0FDTCxLQUFLO3VCQUNMLEtBQUs7b0NBQ0wsTUFBTTt5Q0FLTixZQUFZLFNBQUMscUNBQXFDOzs7O0lBVG5ELHNEQUFtRDs7SUFDbkQsd0RBQXVEOztJQUN2RCwrREFBNEM7O0lBQzVDLHFEQUFtQzs7SUFDbkMsa0VBQTZFOzs7OztJQUU3RSx1RUFBNEM7Ozs7O0lBQzVDLHFFQUEwQzs7SUFFMUMsdUVBQ29GOztJQUdsRixrREFBMkI7Ozs7O0lBQzNCLGdGQUFnRjs7Ozs7SUFDaEYsMEVBQW9FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgQWZ0ZXJWaWV3SW5pdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEd1aWQgfSBmcm9tICdndWlkLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgV29ya0l0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrLWl0ZW0nO1xuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbGUtdXBsb2FkLm1vZGVsJztcbmltcG9ydCB7IFdvcmtEb2N1bWVudEZvdW5kYXRpb25TZXJ2aWNlLCBXb3JrQXR0YWNobWVudFR5cGVGb3VuZGF0aW9uU2VydmljZSB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcbmltcG9ydCB7IEU1Y29yZVVpR2VuZXJhdGVEb2N1bWVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudC9lNWNvcmUtdWktZ2VuZXJhdGUtZG9jdW1lbnQtYmFzZSc7XG5pbXBvcnQgeyBXb3JrQXR0YWNobWVudEFkZEV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzL3dvcmstYXR0YWNobWVudC1hZGQtZXZlbnQnO1xuaW1wb3J0IHsgVWlTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91aS1zdHlsZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50JyxcbiAgdGVtcGxhdGU6IGBcbiAgPHNwYW4gKm5nSWY9XCJ3b3JrSXRlbSRcIiBbbmdTd2l0Y2hdPVwic3R5bGUuY3VycmVudCgpXCI+XG4gIDxlNWNvcmUtdWktZ2VuZXJhdGUtZG9jdW1lbnQtYm94ICpuZ1N3aXRjaENhc2U9JzAnIFtzaG93R2VuZXJhdGVCdXR0b25dPSdzaG93R2VuZXJhdGVCdXR0b24nIFtyZWFkb25seV09J3JlYWRvbmx5JyAoc2VsZWN0RG9jdW1lbnRUZW1wbGF0ZUV2ZW50KT0nb25TZWxlY3REb2N1bWVudFRlbXBsYXRlKCRldmVudCknIChzZWxlY3RBdHRhY2htZW50VHlwZUV2ZW50KT0nb25TZWxlY3RBdHRhY2htZW50VHlwZSgkZXZlbnQpJyAoZ2VuZXJhdGVEb2N1bWVudEV2ZW50KT0nb25HZW5lcmF0ZURvY3VtZW50KCRldmVudCknPjwvZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50LWJveD5cbiAgPGU1Y29yZS11aS1nZW5lcmF0ZS1kb2N1bWVudC1ib290c3RyYXAgKm5nU3dpdGNoQ2FzZT0nMScgW3Nob3dHZW5lcmF0ZUJ1dHRvbl09J3Nob3dHZW5lcmF0ZUJ1dHRvbicgW3JlYWRvbmx5XT0ncmVhZG9ubHknIChzZWxlY3REb2N1bWVudFRlbXBsYXRlRXZlbnQpPSdvblNlbGVjdERvY3VtZW50VGVtcGxhdGUoJGV2ZW50KScgKHNlbGVjdEF0dGFjaG1lbnRUeXBlRXZlbnQpPSdvblNlbGVjdEF0dGFjaG1lbnRUeXBlKCRldmVudCknIChnZW5lcmF0ZURvY3VtZW50RXZlbnQpPSdvbkdlbmVyYXRlRG9jdW1lbnQoJGV2ZW50KSc+PC9lNWNvcmUtdWktZ2VuZXJhdGUtZG9jdW1lbnQtYm9vdHN0cmFwPlxuICA8ZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50LW1hdGVyaWFsICpuZ1N3aXRjaENhc2U9JzInIFtzaG93R2VuZXJhdGVCdXR0b25dPSdzaG93R2VuZXJhdGVCdXR0b24nIFtyZWFkb25seV09J3JlYWRvbmx5JyAoc2VsZWN0RG9jdW1lbnRUZW1wbGF0ZUV2ZW50KT0nb25TZWxlY3REb2N1bWVudFRlbXBsYXRlKCRldmVudCknIChzZWxlY3RBdHRhY2htZW50VHlwZUV2ZW50KT0nb25TZWxlY3RBdHRhY2htZW50VHlwZSgkZXZlbnQpJyAoZ2VuZXJhdGVEb2N1bWVudEV2ZW50KT0nb25HZW5lcmF0ZURvY3VtZW50KCRldmVudCknPjwvZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50LW1hdGVyaWFsPlxuICA8L3NwYW4+XG4gIDxkaXYgKm5nSWY9XCIhKHdvcmtJdGVtJClcIiBjbGFzcz1cImU1Y29yZS1jb21wb25lbnQtZXJyb3JcIj4mbHQ7ZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50Jmd0OyBbd29ya0l0ZW0kXSBtdXN0IGhhdmUgYSBCZWhhdmlvclN1YmplY3QmbHQ7V29ya0l0ZW1Nb2RlbCZndDs8L2Rpdj5gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBFNWNvcmVVaUdlbmVyYXRlRG9jdW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHdvcmtJdGVtJDogQmVoYXZpb3JTdWJqZWN0PFdvcmtJdGVtTW9kZWw+O1xuICBASW5wdXQoKSBmaWxlVXBsb2FkJDogQmVoYXZpb3JTdWJqZWN0PEZpbGVVcGxvYWRNb2RlbD47XG4gIEBJbnB1dCgpIHNob3dHZW5lcmF0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBnZW5lcmF0ZURvY3VtZW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFdvcmtBdHRhY2htZW50QWRkRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZERvY3VtZW50VGVtcGxhdGVJZDogYW55ID0gMDtcbiAgcHJpdmF0ZSBzZWxlY3RlZEF0dGFjaG1lbnRUeXBlSWQ6IGFueSA9IDA7XG5cbiAgQFZpZXdDaGlsZHJlbihFNWNvcmVVaUdlbmVyYXRlRG9jdW1lbnRCYXNlQ29tcG9uZW50KVxuICBwdWJsaWMgZ2VuZXJhdGVEb2N1bWVudENvbXBvbmVudHM6IFF1ZXJ5TGlzdDxFNWNvcmVVaUdlbmVyYXRlRG9jdW1lbnRCYXNlQ29tcG9uZW50PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3R5bGU6VWlTdHlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3b3JrQXR0YWNobWVudFR5cGVGb3VuZGF0aW9uU2VydmljZTogV29ya0F0dGFjaG1lbnRUeXBlRm91bmRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3b3JrRG9jdW1lbnRGb3VuZGF0aW9uU2VydmljZTogV29ya0RvY3VtZW50Rm91bmRhdGlvblNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy53b3JrSXRlbSQgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcignZTVjb3JlLXVpLWdlbmVyYXRlLWRvY3VtZW50IFt3b3JrSXRlbSRdIG11c3QgaGF2ZSBhIEJlaGF2aW9yU3ViamVjdDxXb3JrSXRlbU1vZGVsPicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy53b3JrSXRlbSQgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMud29ya0l0ZW0kLnN1YnNjcmliZShcbiAgICAgICAgd2ltID0+IHtcbiAgICAgICAgICBpZiAod2ltLndvcmtJZCAhPSBudWxsICYmIHdpbS53b3JrSWQgIT0gR3VpZC5FTVBUWSkge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZURvY3VtZW50VGVtcGxhdGVzKHdpbS53b3JrSWQpO1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUF0dGFjaG1lbnRUeXBlcyh3aW0ud29ya0lkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVBdHRhY2htZW50VHlwZXMod2lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLndvcmtBdHRhY2htZW50VHlwZUZvdW5kYXRpb25TZXJ2aWNlLmdldCh3aWQpLnN1YnNjcmliZShcbiAgICAgIHMgPT4ge1xuICAgICAgICB0aGlzLmdlbmVyYXRlRG9jdW1lbnRDb21wb25lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgZWxlbWVudC5hdHRhY2htZW50VHlwZXMgPSBzO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBwb3B1bGF0ZURvY3VtZW50VGVtcGxhdGVzKHdpZDogc3RyaW5nKSB7XG4gICAgdGhpcy53b3JrRG9jdW1lbnRGb3VuZGF0aW9uU2VydmljZS5nZXREb2N1bWVudFRlbXBsYXRlcyh3aWQsIG51bGwpLnN1YnNjcmliZShcbiAgICAgIHMgPT4ge1xuICAgICAgICB0aGlzLmdlbmVyYXRlRG9jdW1lbnRDb21wb25lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgZWxlbWVudC5kb2N1bWVudFRlbXBsYXRlcyA9IHM7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcHVibGljIG9uR2VuZXJhdGVEb2N1bWVudChldmVudCk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJhdGVEb2N1bWVudCgpO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREb2N1bWVudFRlbXBsYXRlSWQgIT0gMCkge1xuICAgICAgdmFyIHdpZCA9IHRoaXMud29ya0l0ZW0kLmdldFZhbHVlKCkud29ya0lkO1xuXG4gICAgICB0aGlzLndvcmtEb2N1bWVudEZvdW5kYXRpb25TZXJ2aWNlLmNyZWF0ZSh3aWQsIHRoaXMuc2VsZWN0ZWREb2N1bWVudFRlbXBsYXRlSWQsIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50VHlwZUlkKS5zdWJzY3JpYmUoXG4gICAgICAgIHMgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy53b3JrSXRlbSQgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhpcy53b3JrSXRlbSQubmV4dCh0aGlzLndvcmtJdGVtJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbGVVcGxvYWQkICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZCQubmV4dCh0aGlzLmZpbGVVcGxvYWQkLmdldFZhbHVlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdlbmVyYXRlRG9jdW1lbnRFdmVudC5lbWl0KHt3b3JrSWQ6IHdpZCwgaWQ6IG51bGwsIG5hbWU6IHMubmFtZSwgZnVsbFVybDogcy5kb2N1bWVudFVybH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3REb2N1bWVudFRlbXBsYXRlKGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZERvY3VtZW50VGVtcGxhdGVJZCA9IGV2ZW50LnZhbHVlLmlkO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0QXR0YWNobWVudFR5cGUoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudFR5cGVJZCA9IGV2ZW50LnZhbHVlLmlkO1xuICB9XG5cbn1cbiJdfQ==