UNPKG

@nakedobjects/gemini

Version:

Single Page Application client for a Naked Objects application.

166 lines 22.6 kB
import { Component, Input } from '@angular/core'; import { CollectionViewModel, DomainObjectViewModel, ListViewModel, MenuViewModel } from '@nakedobjects/view-models'; import find from 'lodash-es/find'; import forEach from 'lodash-es/forEach'; import { createForm, safeUnsubscribe } from '../helpers-components'; import * as i0 from "@angular/core"; import * as i1 from "@nakedobjects/view-models"; import * as i2 from "@nakedobjects/services"; import * as i3 from "@angular/forms"; export class BaseDialogComponent { viewModelFactory; error; context; formBuilder; constructor(viewModelFactory, error, context, formBuilder) { this.viewModelFactory = viewModelFactory; this.error = error; this.context = context; this.formBuilder = formBuilder; } parentViewModel; parms; formSub; sub; createFormSub; set parent(parent) { this.parentChanged = this.parentViewModel !== parent; this.parentViewModel = parent; } get parent() { return this.parentViewModel; } currentDialogId; parentChanged = false; set selectedDialogId(id) { this.currentDialogId = id; } get selectedDialogId() { return this.currentDialogId; } dialog = null; form; get title() { const dialog = this.dialog; return dialog ? dialog.title : ''; } get message() { const dialog = this.dialog; return dialog ? dialog.getMessage() : ''; } get parameters() { const dialog = this.dialog; return dialog ? dialog.parameters : []; } get tooltip() { const dialog = this.dialog; return dialog ? dialog.tooltip() : ''; } onSubmit(right) { if (this.dialog) { forEach(this.parms, (p, _) => { if (p.isEditable) { const newValue = this.form.value[p.id]; p.setValueFromControl(newValue); } }); this.dialog.doInvoke(right); } } close = () => { if (this.dialog) { this.dialog.doCloseReplaceHistory(); this.dialog = null; } }; createForm(dialog) { safeUnsubscribe(this.formSub); safeUnsubscribe(this.createFormSub); ({ form: this.form, dialog: this.dialog, parms: this.parms, sub: this.createFormSub } = createForm(dialog, this.formBuilder)); this.formSub = this.form.valueChanges.subscribe((_) => this.onValueChanged()); } onValueChanged() { if (this.dialog) { // clear messages if dialog changes this.dialog.resetMessage(); this.context.clearMessages(); this.context.clearWarnings(); } } closeExistingDialog() { if (this.dialog) { if (this.dialog.id !== this.currentDialogId) { this.dialog.doCloseKeepHistory(); } else { this.dialog.doCloseKeepUrl(); } this.dialog = null; } } getDialog() { // if it's the same dialog just return if (this.parent && this.currentDialogId) { if (!this.parentChanged && this.dialog && this.dialog.id === this.currentDialogId) { return; } this.parentChanged = false; const p = this.parent; let action = null; let actionViewModel = null; if (p instanceof MenuViewModel) { action = p.menuRep.actionMember(this.currentDialogId); } if (p instanceof DomainObjectViewModel && p.domainObject.hasActionMember(this.currentDialogId)) { action = p.domainObject.actionMember(this.currentDialogId); } if (p instanceof ListViewModel) { action = p.actionMember(this.currentDialogId); actionViewModel = find(p.actions, a => a.actionRep.actionId() === this.currentDialogId) || null; } if (p instanceof CollectionViewModel && p.hasMatchingLocallyContributedAction(this.currentDialogId)) { action = p.actionMember(this.currentDialogId); actionViewModel = find(p.actions, a => a.actionRep.actionId() === this.currentDialogId) || null; } if (action) { this.context.getInvokableAction(action) .then(details => { // only if we still have a dialog (may have beenn removed while getting invokable action) if (this.currentDialogId) { // must be a change this.closeExistingDialog(); const dialogViewModel = this.viewModelFactory.dialogViewModel(this.parent.routeData, details, actionViewModel, false); this.createForm(dialogViewModel); } }) .catch((reject) => { this.error.handleError(reject); }); } else { this.closeExistingDialog(); } } else { this.closeExistingDialog(); } } ngOnDestroy() { safeUnsubscribe(this.createFormSub); safeUnsubscribe(this.formSub); safeUnsubscribe(this.sub); this.closeExistingDialog(); } ngOnChanges() { this.getDialog(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseDialogComponent, deps: [{ token: i1.ViewModelFactoryService }, { token: i2.ErrorService }, { token: i2.ContextService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: BaseDialogComponent, selector: "ng-component", inputs: { selectedDialogId: "selectedDialogId" }, usesOnChanges: true, ngImport: i0, template: '<div></div>', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BaseDialogComponent, decorators: [{ type: Component, args: [{ template: '<div></div>' }] }], ctorParameters: () => [{ type: i1.ViewModelFactoryService }, { type: i2.ErrorService }, { type: i2.ContextService }, { type: i3.FormBuilder }], propDecorators: { selectedDialogId: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZ2VtaW5pL3NyYy9iYXNlLWRpYWxvZy9iYXNlLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBSXZFLE9BQU8sRUFFSCxtQkFBbUIsRUFFbkIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixhQUFhLEVBR2hCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEMsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFFeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFHcEUsTUFBTSxPQUFPLG1CQUFtQjtJQUdQO0lBQ0E7SUFDQTtJQUNBO0lBSnJCLFlBQ3FCLGdCQUF5QyxFQUN6QyxLQUFtQixFQUNuQixPQUF1QixFQUN2QixXQUF3QjtRQUh4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDN0MsQ0FBQztJQUVPLGVBQWUsQ0FBK0U7SUFDOUYsS0FBSyxDQUFrQztJQUV2QyxPQUFPLENBQWlCO0lBQ3RCLEdBQUcsQ0FBaUI7SUFDdEIsYUFBYSxDQUFpQjtJQUV0QyxJQUFjLE1BQU0sQ0FBQyxNQUFtRjtRQUNwRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLEtBQUssTUFBTSxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFjLE1BQU07UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZSxDQUFVO0lBQ3pCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFOUIsSUFDSSxnQkFBZ0IsQ0FBQyxFQUFzQjtRQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLEdBQTJCLElBQUksQ0FBQztJQUV0QyxJQUFJLENBQWE7SUFFakIsSUFBSSxLQUFLO1FBQ0wsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWU7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFDZCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDTCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUF1QjtRQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM5SCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBRUwsc0NBQXNDO1FBRXRDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ2hGLE9BQU87WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN0QixJQUFJLE1BQU0sR0FBcUQsSUFBSSxDQUFDO1lBQ3BFLElBQUksZUFBZSxHQUEyQixJQUFJLENBQUM7WUFFbkQsSUFBSSxDQUFDLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUM3RixNQUFNLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBRSxDQUFDO2dCQUMvQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDcEcsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDbEcsTUFBTSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBRSxDQUFDO2dCQUMvQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDcEcsQ0FBQztZQUVELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7cUJBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDWix5RkFBeUY7b0JBRXpGLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN2QixtQkFBbUI7d0JBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMzQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3ZILElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3JDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9CLENBQUM7UUFFTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7dUdBOUtRLG1CQUFtQjsyRkFBbkIsbUJBQW1CLDJIQURULGFBQWE7OzJGQUN2QixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBQyxRQUFRLEVBQUcsYUFBYSxFQUFDOzhLQThCN0IsZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBSbyBmcm9tICdAbmFrZWRvYmplY3RzL3Jlc3RmdWwtb2JqZWN0cyc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSwgRXJyb3JTZXJ2aWNlLCBFcnJvcldyYXBwZXIgfSBmcm9tICdAbmFrZWRvYmplY3RzL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gICAgQWN0aW9uVmlld01vZGVsLFxuICAgIENvbGxlY3Rpb25WaWV3TW9kZWwsXG4gICAgRGlhbG9nVmlld01vZGVsLFxuICAgIERvbWFpbk9iamVjdFZpZXdNb2RlbCxcbiAgICBMaXN0Vmlld01vZGVsLFxuICAgIE1lbnVWaWV3TW9kZWwsXG4gICAgUGFyYW1ldGVyVmlld01vZGVsLFxuICAgIFZpZXdNb2RlbEZhY3RvcnlTZXJ2aWNlXG59IGZyb20gJ0BuYWtlZG9iamVjdHMvdmlldy1tb2RlbHMnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZmluZCBmcm9tICdsb2Rhc2gtZXMvZmluZCc7XG5pbXBvcnQgZm9yRWFjaCBmcm9tICdsb2Rhc2gtZXMvZm9yRWFjaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25MaWtlIGFzIElTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZUZvcm0sIHNhZmVVbnN1YnNjcmliZSB9IGZyb20gJy4uL2hlbHBlcnMtY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe3RlbXBsYXRlIDogJzxkaXY+PC9kaXY+J30pXG5leHBvcnQgY2xhc3MgQmFzZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdNb2RlbEZhY3Rvcnk6IFZpZXdNb2RlbEZhY3RvcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yOiBFcnJvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogQ29udGV4dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJlbnRWaWV3TW9kZWw/OiBNZW51Vmlld01vZGVsIHwgRG9tYWluT2JqZWN0Vmlld01vZGVsIHwgTGlzdFZpZXdNb2RlbCB8IENvbGxlY3Rpb25WaWV3TW9kZWw7XG4gICAgcHJpdmF0ZSBwYXJtcz86IERpY3Rpb25hcnk8UGFyYW1ldGVyVmlld01vZGVsPjtcbiAgICBcbiAgICBwcml2YXRlIGZvcm1TdWI/OiBJU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBzdWI/OiBJU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY3JlYXRlRm9ybVN1Yj86IElTdWJzY3JpcHRpb247XG5cbiAgICBwcm90ZWN0ZWQgc2V0IHBhcmVudChwYXJlbnQ6IE1lbnVWaWV3TW9kZWwgfCBEb21haW5PYmplY3RWaWV3TW9kZWwgfCBMaXN0Vmlld01vZGVsIHwgQ29sbGVjdGlvblZpZXdNb2RlbCkge1xuICAgICAgICB0aGlzLnBhcmVudENoYW5nZWQgPSB0aGlzLnBhcmVudFZpZXdNb2RlbCAhPT0gcGFyZW50O1xuICAgICAgICB0aGlzLnBhcmVudFZpZXdNb2RlbCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHBhcmVudCgpOiBNZW51Vmlld01vZGVsIHwgRG9tYWluT2JqZWN0Vmlld01vZGVsIHwgTGlzdFZpZXdNb2RlbCB8IENvbGxlY3Rpb25WaWV3TW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRWaWV3TW9kZWwhO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3VycmVudERpYWxvZ0lkPzogc3RyaW5nO1xuICAgIHByaXZhdGUgcGFyZW50Q2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWREaWFsb2dJZChpZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudERpYWxvZ0lkID0gaWQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkRGlhbG9nSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERpYWxvZ0lkO1xuICAgIH1cblxuICAgIGRpYWxvZzogRGlhbG9nVmlld01vZGVsIHwgbnVsbCA9IG51bGw7XG5cbiAgICBmb3JtPzogRm9ybUdyb3VwO1xuXG4gICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZztcbiAgICAgICAgcmV0dXJuIGRpYWxvZyA/IGRpYWxvZy50aXRsZSA6ICcnO1xuICAgIH1cblxuICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZztcbiAgICAgICAgcmV0dXJuIGRpYWxvZyA/IGRpYWxvZy5nZXRNZXNzYWdlKCkgOiAnJztcbiAgICB9XG5cbiAgICBnZXQgcGFyYW1ldGVycygpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2c7XG4gICAgICAgIHJldHVybiBkaWFsb2cgPyBkaWFsb2cucGFyYW1ldGVycyA6IFtdO1xuICAgIH1cblxuICAgIGdldCB0b29sdGlwKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nO1xuICAgICAgICByZXR1cm4gZGlhbG9nID8gZGlhbG9nLnRvb2x0aXAoKSA6ICcnO1xuICAgIH1cblxuICAgIG9uU3VibWl0KHJpZ2h0PzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kaWFsb2cpIHtcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5wYXJtcyxcbiAgICAgICAgICAgICAgICAocCwgXykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocC5pc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9ybSEudmFsdWVbcC5pZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBwLnNldFZhbHVlRnJvbUNvbnRyb2wobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5kb0ludm9rZShyaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5kb0Nsb3NlUmVwbGFjZUhpc3RvcnkoKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm0oZGlhbG9nOiBEaWFsb2dWaWV3TW9kZWwpIHtcbiAgICAgICAgc2FmZVVuc3Vic2NyaWJlKHRoaXMuZm9ybVN1Yik7XG4gICAgICAgIHNhZmVVbnN1YnNjcmliZSh0aGlzLmNyZWF0ZUZvcm1TdWIpO1xuICAgICAgICAoeyBmb3JtOiB0aGlzLmZvcm0sIGRpYWxvZzogdGhpcy5kaWFsb2csIHBhcm1zOiB0aGlzLnBhcm1zLCBzdWI6IHRoaXMuY3JlYXRlRm9ybVN1YiB9ID0gY3JlYXRlRm9ybShkaWFsb2csIHRoaXMuZm9ybUJ1aWxkZXIpKTtcbiAgICAgICAgdGhpcy5mb3JtU3ViID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKF8pID0+IHRoaXMub25WYWx1ZUNoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZykge1xuICAgICAgICAgICAgLy8gY2xlYXIgbWVzc2FnZXMgaWYgZGlhbG9nIGNoYW5nZXNcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLnJlc2V0TWVzc2FnZSgpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhcldhcm5pbmdzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZUV4aXN0aW5nRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5kaWFsb2cpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZy5pZCAhPT0gdGhpcy5jdXJyZW50RGlhbG9nSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5kb0Nsb3NlS2VlcEhpc3RvcnkoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cuZG9DbG9zZUtlZXBVcmwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlhbG9nID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERpYWxvZygpIHtcblxuICAgICAgICAvLyBpZiBpdCdzIHRoZSBzYW1lIGRpYWxvZyBqdXN0IHJldHVyblxuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLmN1cnJlbnREaWFsb2dJZCkge1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50Q2hhbmdlZCAmJiB0aGlzLmRpYWxvZyAmJiB0aGlzLmRpYWxvZy5pZCA9PT0gdGhpcy5jdXJyZW50RGlhbG9nSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgbGV0IGFjdGlvbjogUm8uQWN0aW9uTWVtYmVyIHwgUm8uQWN0aW9uUmVwcmVzZW50YXRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBhY3Rpb25WaWV3TW9kZWw6IEFjdGlvblZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIE1lbnVWaWV3TW9kZWwpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBwLm1lbnVSZXAuYWN0aW9uTWVtYmVyKHRoaXMuY3VycmVudERpYWxvZ0lkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBEb21haW5PYmplY3RWaWV3TW9kZWwgJiYgcC5kb21haW5PYmplY3QuaGFzQWN0aW9uTWVtYmVyKHRoaXMuY3VycmVudERpYWxvZ0lkKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IHAuZG9tYWluT2JqZWN0LmFjdGlvbk1lbWJlcih0aGlzLmN1cnJlbnREaWFsb2dJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgTGlzdFZpZXdNb2RlbCkge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IHAuYWN0aW9uTWVtYmVyKHRoaXMuY3VycmVudERpYWxvZ0lkKSE7XG4gICAgICAgICAgICAgICAgYWN0aW9uVmlld01vZGVsID0gZmluZChwLmFjdGlvbnMsIGEgPT4gYS5hY3Rpb25SZXAuYWN0aW9uSWQoKSA9PT0gdGhpcy5jdXJyZW50RGlhbG9nSWQpIHx8IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgQ29sbGVjdGlvblZpZXdNb2RlbCAmJiBwLmhhc01hdGNoaW5nTG9jYWxseUNvbnRyaWJ1dGVkQWN0aW9uKHRoaXMuY3VycmVudERpYWxvZ0lkKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IHAuYWN0aW9uTWVtYmVyKHRoaXMuY3VycmVudERpYWxvZ0lkKSE7XG4gICAgICAgICAgICAgICAgYWN0aW9uVmlld01vZGVsID0gZmluZChwLmFjdGlvbnMsIGEgPT4gYS5hY3Rpb25SZXAuYWN0aW9uSWQoKSA9PT0gdGhpcy5jdXJyZW50RGlhbG9nSWQpIHx8IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0SW52b2thYmxlQWN0aW9uKGFjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGV0YWlscyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGlmIHdlIHN0aWxsIGhhdmUgYSBkaWFsb2cgKG1heSBoYXZlIGJlZW5uIHJlbW92ZWQgd2hpbGUgZ2V0dGluZyBpbnZva2FibGUgYWN0aW9uKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50RGlhbG9nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGJlIGEgY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUV4aXN0aW5nRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlhbG9nVmlld01vZGVsID0gdGhpcy52aWV3TW9kZWxGYWN0b3J5LmRpYWxvZ1ZpZXdNb2RlbCh0aGlzLnBhcmVudCEucm91dGVEYXRhLCBkZXRhaWxzLCBhY3Rpb25WaWV3TW9kZWwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm0oZGlhbG9nVmlld01vZGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChyZWplY3Q6IEVycm9yV3JhcHBlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5oYW5kbGVFcnJvcihyZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUV4aXN0aW5nRGlhbG9nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VFeGlzdGluZ0RpYWxvZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHNhZmVVbnN1YnNjcmliZSh0aGlzLmNyZWF0ZUZvcm1TdWIpO1xuICAgICAgICBzYWZlVW5zdWJzY3JpYmUodGhpcy5mb3JtU3ViKTtcbiAgICAgICAgc2FmZVVuc3Vic2NyaWJlKHRoaXMuc3ViKTtcbiAgICAgICAgdGhpcy5jbG9zZUV4aXN0aW5nRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0RGlhbG9nKCk7XG4gICAgfVxufVxuIl19