UNPKG

tuain-ng-forms-lib

Version:

Componentes y Clases Angular para la gestión de formularios TUAIN

112 lines 21.2 kB
import { Subject, takeUntil } from 'rxjs'; import { ElementType, HEADER } from './form.constants'; import { FormElement } from './element'; const attrs = { actionCode: { name: '_actionCode', propagate: 'actionCode' }, actionName: { name: '_actionName', propagate: 'actionName' }, iconName: { name: '_iconName', propagate: 'iconName' }, inProgress: { name: '_inProgress', propagate: 'inProgress' }, restrictedOnField: { name: '_restrictedOnField', propagate: 'restrictedOnField' }, restrictedOnOperator: { name: '_restrictedOnOperator', propagate: 'restrictedOnOperator' }, restrictedOnValue: { name: '_restrictedOnValue', propagate: 'restrictedOnValue' }, }; export class FormAction extends FormElement { _actionActivated = new Subject(); _actionCode = ''; _actionName = ''; _iconName = ''; _inProgress = false; _newState; _backend; _restrictedOnField = null; _restrictedOnOperator = null; _restrictedOnValue = null; constructor(actionDefinition, formConfig) { super(actionDefinition, formConfig); this.elementType = ElementType.Action; this.setAttr(attrs.actionCode, actionDefinition.actionCode ? actionDefinition.actionCode.toString() : ''); this.setAttr(attrs.actionName, actionDefinition.actionTitle); this.setAttr(attrs.iconName, actionDefinition.iconName || ''); this.setAttr(attrs.restrictedOnField, actionDefinition.fieldRestrictedCode?.toString() ?? null); if (this._restrictedOnField) { this.setAttr(attrs.restrictedOnOperator, actionDefinition.operatorRestricted || ''); this.setAttr(attrs.restrictedOnValue, actionDefinition.valueRestricted ?? ''); } this._backend = actionDefinition?.serverAction ?? false; this._newState = actionDefinition?.newState; this.setCustomAttribute('location', actionDefinition.position || HEADER); } get actionCode() { return this._actionCode; } get actionName() { return this._actionName; } get iconName() { return this._iconName; } get inProgress() { return this._inProgress; } get newState() { return this._newState; } get backend() { return this._backend; } get restrictedOnField() { return this._restrictedOnField; } get restrictedOnOperator() { return this._restrictedOnOperator; } get restrictedOnValue() { return this._restrictedOnValue; } set actionCode(actionCode) { this.setAttr(attrs.actionCode, actionCode); } set actionName(actionName) { this.setAttr(attrs.actionName, actionName); } set iconName(iconName) { this.setAttr(attrs.iconName, iconName); } set inProgress(inProgress) { this.setAttr(attrs.inProgress, inProgress); } set newState(newState) { this._newState = newState; } set backend(backend) { this._backend = backend; } set restrictedOnField(restrictedOnField) { this.setAttr(attrs.restrictedOnField, restrictedOnField); } set restrictedOnOperator(restrictedOnOperator) { this.setAttr(attrs.restrictedOnOperator, restrictedOnOperator); } set restrictedOnValue(restrictedOnValue) { this.setAttr(attrs.restrictedOnValue, restrictedOnValue); } start() { this.inProgress = true; } stop() { this.inProgress = false; } connectWithParentForm(form, formChangeSubject) { super.connectWithParentForm(form, formChangeSubject); if (this._restrictedOnField) { const relatedField = this._form.fields?.[this._restrictedOnField]; if (relatedField) { relatedField.editionFinish .pipe(takeUntil(this.destroy$)) .subscribe({ next: (event) => this.updateRestrictedVisibility(event), error: (err) => console.error(`Error en restricted visibility subscription: ${err}`) }); relatedField.editionPartial .pipe(takeUntil(this.destroy$)) .subscribe({ next: (event) => this.updateRestrictedVisibility(event), error: (err) => console.error(`Error en restricted visibility subscription: ${err}`) }); } } } updateRestrictedVisibility(event) { const newVisible = this._absoluteVisible && this.viewOnState(this._formState); (this._visible !== newVisible) && this.setVisibility(newVisible); } viewOnState(state) { const actionVisible = (this.visibleStates && state) ? this.visibleStates.includes(state) : false; if (actionVisible && this._form && this._restrictedOnField) { const relatedField = this._form.fields?.[this._restrictedOnField]; if (relatedField) { const fieldValue = relatedField.value; if ((this._restrictedOnOperator === '==' && fieldValue !== this._restrictedOnValue) || (this._restrictedOnOperator === '!=' && fieldValue === this._restrictedOnValue)) { return false; } } } return actionVisible; } get actionActivated() { return this._actionActivated.asObservable(); } notifyActivation() { this._actionActivated.next(this._actionCode); } updateFromServer(receivedAction) { for (const propertyName in receivedAction) { if (propertyName !== 'actionCode' && propertyName !== 'actionId') { try { this[propertyName] = receivedAction[propertyName]; } catch (e) { console.log(`Error actualizando la propiedad ${propertyName} de la acción ${this.actionCode}. ${e}`); } } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVhaW4tbmctZm9ybXMtbGliL3NyYy9saWIvY2xhc3Nlcy9mb3Jtcy9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3hDLE1BQU0sS0FBSyxHQUFHO0lBQ1osVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFO0lBQzVELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRTtJQUM1RCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUU7SUFDdEQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFO0lBQzVELGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRTtJQUNqRixvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUU7SUFDMUYsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFO0NBQ2xGLENBQUE7QUFFRCxNQUFNLE9BQU8sVUFBVyxTQUFRLFdBQVc7SUFDeEIsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUNsRCxXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLFdBQVcsR0FBVyxFQUFFLENB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LENBQUMsWUFBWSxDQUFDLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM3RCxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsWUFBWSxpQkFBaUIsSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlLCBIRUFERVIgfSBmcm9tICcuL2Zvcm0uY29uc3RhbnRzJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IEFjdGlvbkRlZmluaXRpb24sIElGb3JtQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mb3JtLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5jb25zdCBhdHRycyA9IHtcbiAgYWN0aW9uQ29kZTogeyBuYW1lOiAnX2FjdGlvbkNvZGUnLCBwcm9wYWdhdGU6ICdhY3Rpb25Db2RlJyB9LFxuICBhY3Rpb25OYW1lOiB7IG5hbWU6ICdfYWN0aW9uTmFtZScsIHByb3BhZ2F0ZTogJ2FjdGlvbk5hbWUnIH0sXG4gIGljb25OYW1lOiB7IG5hbWU6ICdfaWNvbk5hbWUnLCBwcm9wYWdhdGU6ICdpY29uTmFtZScgfSxcbiAgaW5Qcm9ncmVzczogeyBuYW1lOiAnX2luUHJvZ3Jlc3MnLCBwcm9wYWdhdGU6ICdpblByb2dyZXNzJyB9LFxuICByZXN0cmljdGVkT25GaWVsZDogeyBuYW1lOiAnX3Jlc3RyaWN0ZWRPbkZpZWxkJywgcHJvcGFnYXRlOiAncmVzdHJpY3RlZE9uRmllbGQnIH0sXG4gIHJlc3RyaWN0ZWRPbk9wZXJhdG9yOiB7IG5hbWU6ICdfcmVzdHJpY3RlZE9uT3BlcmF0b3InLCBwcm9wYWdhdGU6ICdyZXN0cmljdGVkT25PcGVyYXRvcicgfSxcbiAgcmVzdHJpY3RlZE9uVmFsdWU6IHsgbmFtZTogJ19yZXN0cmljdGVkT25WYWx1ZScsIHByb3BhZ2F0ZTogJ3Jlc3RyaWN0ZWRPblZhbHVlJyB9LFxufVxuXG5leHBvcnQgY2xhc3MgRm9ybUFjdGlvbiBleHRlbmRzIEZvcm1FbGVtZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aW9uQWN0aXZhdGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIF9hY3Rpb25Db2RlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfYWN0aW9uTmFtZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2ljb25OYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBwcml2YXRlIF9uZXdTdGF0ZTogc3RyaW5nO1xuICBwcml2YXRlIF9iYWNrZW5kOiBib29sZWFuO1xuICBwcml2YXRlIF9yZXN0cmljdGVkT25GaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jlc3RyaWN0ZWRPbk9wZXJhdG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmVzdHJpY3RlZE9uVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGFjdGlvbkRlZmluaXRpb246IEFjdGlvbkRlZmluaXRpb24sIGZvcm1Db25maWc6IElGb3JtQ29uZmlnKSB7XG4gICAgc3VwZXIoYWN0aW9uRGVmaW5pdGlvbiwgZm9ybUNvbmZpZyk7XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9IEVsZW1lbnRUeXBlLkFjdGlvbjtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuYWN0aW9uQ29kZSwgYWN0aW9uRGVmaW5pdGlvbi5hY3Rpb25Db2RlID8gYWN0aW9uRGVmaW5pdGlvbi5hY3Rpb25Db2RlLnRvU3RyaW5nKCkgOiAnJyk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmFjdGlvbk5hbWUsIGFjdGlvbkRlZmluaXRpb24uYWN0aW9uVGl0bGUpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5pY29uTmFtZSwgYWN0aW9uRGVmaW5pdGlvbi5pY29uTmFtZSB8fCAnJyk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnJlc3RyaWN0ZWRPbkZpZWxkLCBhY3Rpb25EZWZpbml0aW9uLmZpZWxkUmVzdHJpY3RlZENvZGU/LnRvU3RyaW5nKCkgPz8gbnVsbCk7XG4gICAgaWYgKHRoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkKSB7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMucmVzdHJpY3RlZE9uT3BlcmF0b3IsIGFjdGlvbkRlZmluaXRpb24ub3BlcmF0b3JSZXN0cmljdGVkIHx8ICcnKTtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5yZXN0cmljdGVkT25WYWx1ZSwgYWN0aW9uRGVmaW5pdGlvbi52YWx1ZVJlc3RyaWN0ZWQgPz8gJycpO1xuICAgIH1cbiAgICB0aGlzLl9iYWNrZW5kID0gYWN0aW9uRGVmaW5pdGlvbj8uc2VydmVyQWN0aW9uID8/IGZhbHNlO1xuICAgIHRoaXMuX25ld1N0YXRlID0gYWN0aW9uRGVmaW5pdGlvbj8ubmV3U3RhdGU7XG4gICAgdGhpcy5zZXRDdXN0b21BdHRyaWJ1dGUoJ2xvY2F0aW9uJywgYWN0aW9uRGVmaW5pdGlvbi5wb3NpdGlvbiB8fCBIRUFERVIpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbkNvZGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2FjdGlvbkNvZGU7IH1cbiAgZ2V0IGFjdGlvbk5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2FjdGlvbk5hbWU7IH1cbiAgZ2V0IGljb25OYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9pY29uTmFtZTsgfVxuICBnZXQgaW5Qcm9ncmVzcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3M7IH1cbiAgZ2V0IG5ld1N0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9uZXdTdGF0ZTsgfVxuICBnZXQgYmFja2VuZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2JhY2tlbmQ7IH1cbiAgZ2V0IHJlc3RyaWN0ZWRPbkZpZWxkKCk6IHN0cmluZyB8IG51bGwgeyByZXR1cm4gdGhpcy5fcmVzdHJpY3RlZE9uRmllbGQ7IH1cbiAgZ2V0IHJlc3RyaWN0ZWRPbk9wZXJhdG9yKCk6IHN0cmluZyB8IG51bGwgeyByZXR1cm4gdGhpcy5fcmVzdHJpY3RlZE9uT3BlcmF0b3I7IH1cbiAgZ2V0IHJlc3RyaWN0ZWRPblZhbHVlKCk6IHN0cmluZyB8IG51bGwgeyByZXR1cm4gdGhpcy5fcmVzdHJpY3RlZE9uVmFsdWU7IH1cblxuICBzZXQgYWN0aW9uQ29kZShhY3Rpb25Db2RlKSB7IHRoaXMuc2V0QXR0cihhdHRycy5hY3Rpb25Db2RlLCBhY3Rpb25Db2RlKTsgfVxuICBzZXQgYWN0aW9uTmFtZShhY3Rpb25OYW1lKSB7IHRoaXMuc2V0QXR0cihhdHRycy5hY3Rpb25OYW1lLCBhY3Rpb25OYW1lKTsgfVxuICBzZXQgaWNvbk5hbWUoaWNvbk5hbWUpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmljb25OYW1lLCBpY29uTmFtZSk7IH1cbiAgc2V0IGluUHJvZ3Jlc3MoaW5Qcm9ncmVzcykgeyB0aGlzLnNldEF0dHIoYXR0cnMuaW5Qcm9ncmVzcywgaW5Qcm9ncmVzcyk7IH1cbiAgc2V0IG5ld1N0YXRlKG5ld1N0YXRlKSB7IHRoaXMuX25ld1N0YXRlID0gbmV3U3RhdGU7IH1cbiAgc2V0IGJhY2tlbmQoYmFja2VuZCkgeyB0aGlzLl9iYWNrZW5kID0gYmFja2VuZDsgfVxuICBzZXQgcmVzdHJpY3RlZE9uRmllbGQocmVzdHJpY3RlZE9uRmllbGQpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLnJlc3RyaWN0ZWRPbkZpZWxkLCByZXN0cmljdGVkT25GaWVsZCk7IH1cbiAgc2V0IHJlc3RyaWN0ZWRPbk9wZXJhdG9yKHJlc3RyaWN0ZWRPbk9wZXJhdG9yKSB7IHRoaXMuc2V0QXR0cihhdHRycy5yZXN0cmljdGVkT25PcGVyYXRvciwgcmVzdHJpY3RlZE9uT3BlcmF0b3IpOyB9XG4gIHNldCByZXN0cmljdGVkT25WYWx1ZShyZXN0cmljdGVkT25WYWx1ZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMucmVzdHJpY3RlZE9uVmFsdWUsIHJlc3RyaWN0ZWRPblZhbHVlKTsgfVxuXG4gIHN0YXJ0KCk6IHZvaWQgeyB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlOyB9XG4gIHN0b3AoKTogdm9pZCB7IHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlOyB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdFdpdGhQYXJlbnRGb3JtKGZvcm06IGFueSwgZm9ybUNoYW5nZVN1YmplY3Q6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RXaXRoUGFyZW50Rm9ybShmb3JtLCBmb3JtQ2hhbmdlU3ViamVjdCk7XG4gICAgaWYgKHRoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkKSB7XG4gICAgICBjb25zdCByZWxhdGVkRmllbGQgPSB0aGlzLl9mb3JtLmZpZWxkcz8uW3RoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkXTtcbiAgICAgIGlmIChyZWxhdGVkRmllbGQpIHtcbiAgICAgICAgcmVsYXRlZEZpZWxkLmVkaXRpb25GaW5pc2hcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy51cGRhdGVSZXN0cmljdGVkVmlzaWJpbGl0eShldmVudCksXG4gICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiBjb25zb2xlLmVycm9yKGBFcnJvciBlbiByZXN0cmljdGVkIHZpc2liaWxpdHkgc3Vic2NyaXB0aW9uOiAke2Vycn1gKVxuICAgICAgICAgIH0pO1xuICAgICAgICByZWxhdGVkRmllbGQuZWRpdGlvblBhcnRpYWxcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy51cGRhdGVSZXN0cmljdGVkVmlzaWJpbGl0eShldmVudCksXG4gICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiBjb25zb2xlLmVycm9yKGBFcnJvciBlbiByZXN0cmljdGVkIHZpc2liaWxpdHkgc3Vic2NyaXB0aW9uOiAke2Vycn1gKVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVJlc3RyaWN0ZWRWaXNpYmlsaXR5KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWaXNpYmxlID0gdGhpcy5fYWJzb2x1dGVWaXNpYmxlICYmIHRoaXMudmlld09uU3RhdGUodGhpcy5fZm9ybVN0YXRlKTtcbiAgICAodGhpcy5fdmlzaWJsZSAhPT0gbmV3VmlzaWJsZSkgJiYgdGhpcy5zZXRWaXNpYmlsaXR5KG5ld1Zpc2libGUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlld09uU3RhdGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFjdGlvblZpc2libGUgPSAodGhpcy52aXNpYmxlU3RhdGVzICYmIHN0YXRlKSA/IHRoaXMudmlzaWJsZVN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkgOiBmYWxzZTtcbiAgICBpZiAoYWN0aW9uVmlzaWJsZSAmJiB0aGlzLl9mb3JtICYmIHRoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkKSB7XG4gICAgICBjb25zdCByZWxhdGVkRmllbGQgPSB0aGlzLl9mb3JtLmZpZWxkcz8uW3RoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkXTtcbiAgICAgIGlmIChyZWxhdGVkRmllbGQpIHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlbGF0ZWRGaWVsZC52YWx1ZTtcbiAgICAgICAgaWYgKCh0aGlzLl9yZXN0cmljdGVkT25PcGVyYXRvciA9PT0gJz09JyAmJiBmaWVsZFZhbHVlICE9PSB0aGlzLl9yZXN0cmljdGVkT25WYWx1ZSlcbiAgICAgICAgICB8fCAodGhpcy5fcmVzdHJpY3RlZE9uT3BlcmF0b3IgPT09ICchPScgJiYgZmllbGRWYWx1ZSA9PT0gdGhpcy5fcmVzdHJpY3RlZE9uVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25WaXNpYmxlO1xuICB9XG5cbiAgZ2V0IGFjdGlvbkFjdGl2YXRlZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4geyByZXR1cm4gdGhpcy5fYWN0aW9uQWN0aXZhdGVkLmFzT2JzZXJ2YWJsZSgpOyB9XG5cbiAgbm90aWZ5QWN0aXZhdGlvbigpOiB2b2lkIHsgdGhpcy5fYWN0aW9uQWN0aXZhdGVkLm5leHQodGhpcy5fYWN0aW9uQ29kZSk7IH1cblxuICB1cGRhdGVGcm9tU2VydmVyKHJlY2VpdmVkQWN0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiByZWNlaXZlZEFjdGlvbikge1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gJ2FjdGlvbkNvZGUnICYmIHByb3BlcnR5TmFtZSAhPT0gJ2FjdGlvbklkJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICh0aGlzIGFzIGFueSlbcHJvcGVydHlOYW1lXSA9IHJlY2VpdmVkQWN0aW9uW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3IgYWN0dWFsaXphbmRvIGxhIHByb3BpZWRhZCAke3Byb3BlcnR5TmFtZX0gZGUgbGEgYWNjacOzbiAke3RoaXMuYWN0aW9uQ29kZX0uICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19