UNPKG

@nuarch/dynamic-forms

Version:

Teradata UI Platform Dynamic Forms Module

295 lines 22.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { Component, Directive, Input, HostBinding, TemplateRef, ChangeDetectorRef, Type } from '@angular/core'; import { ViewChild, ViewContainerRef } from '@angular/core'; import { ComponentFactoryResolver, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms'; import { TemplatePortalDirective } from '@angular/cdk/portal'; import { mixinControlValueAccessor } from '@covalent/core/common'; import { TdDynamicFormsService } from './services/dynamic-forms.service'; export class TdDynamicElementBase { /** * @param {?} _changeDetectorRef */ constructor(_changeDetectorRef) { this._changeDetectorRef = _changeDetectorRef; } } if (false) { /** @type {?} */ TdDynamicElementBase.prototype._changeDetectorRef; } /* tslint:disable-next-line */ /** @type {?} */ export const _TdDynamicElementMixinBase = mixinControlValueAccessor(TdDynamicElementBase); export class TdDynamicFormsErrorTemplate extends TemplatePortalDirective { /** * @param {?} templateRef * @param {?} viewContainerRef */ constructor(templateRef, viewContainerRef) { super(templateRef, viewContainerRef); } } TdDynamicFormsErrorTemplate.decorators = [ { type: Directive, args: [{ selector: '[tdDynamicFormsError]ng-template' },] } ]; /** @nocollapse */ TdDynamicFormsErrorTemplate.ctorParameters = () => [ { type: TemplateRef }, { type: ViewContainerRef } ]; TdDynamicFormsErrorTemplate.propDecorators = { tdDynamicFormsError: [{ type: Input }] }; if (false) { /** @type {?} */ TdDynamicFormsErrorTemplate.prototype.tdDynamicFormsError; } export class TdDynamicElementDirective { /** * @param {?} viewContainer */ constructor(viewContainer) { this.viewContainer = viewContainer; } } TdDynamicElementDirective.decorators = [ { type: Directive, args: [{ selector: '[tdDynamicContainer]', },] } ]; /** @nocollapse */ TdDynamicElementDirective.ctorParameters = () => [ { type: ViewContainerRef } ]; if (false) { /** @type {?} */ TdDynamicElementDirective.prototype.viewContainer; } export class TdDynamicElementComponent extends _TdDynamicElementMixinBase { /** * @param {?} _componentFactoryResolver * @param {?} _dynamicFormsService * @param {?} _changeDetectorRef */ constructor(_componentFactoryResolver, _dynamicFormsService, _changeDetectorRef) { super(_changeDetectorRef); this._componentFactoryResolver = _componentFactoryResolver; this._dynamicFormsService = _dynamicFormsService; /** * Sets label to be displayed. */ this.label = ''; /** * Sets hint to be displayed. */ this.hint = ''; /** * Sets name to be displayed as attribute. */ this.name = ''; /** * Sets type or element of element to be rendered. * Throws error if does not exist or no supported. */ this.type = undefined; /** * Sets required validation checkup (if supported by element). */ this.required = undefined; /** * Sets min validation checkup (if supported by element). */ this.min = undefined; /** * Sets max validation checkup (if supported by element). */ this.max = undefined; /** * Sets minLength validation checkup (if supported by element). */ this.minLength = undefined; /** * Sets maxLength validation checkup (if supported by element). */ this.maxLength = undefined; /** * Sets selections for array elements (if supported by element). */ this.selections = undefined; /** * Sets multiple property for array elements (if supported by element). */ this.multiple = undefined; /** * Sets error message template so it can be injected into dynamic components. */ this.errorMessageTemplate = undefined; } /** * @return {?} */ get maxAttr() { return this.max; } /** * @return {?} */ get minAttr() { return this.min; } /** * @return {?} */ ngOnInit() { /** @type {?} */ let component = (/** @type {?} */ (this.type)) instanceof Type ? this.type : this._dynamicFormsService.getDynamicElement(this.type); /** @type {?} */ let ref = this._componentFactoryResolver. resolveComponentFactory(component) .create(this.childElement.viewContainer.injector); this.childElement.viewContainer.insert(ref.hostView); this._instance = ref.instance; this._instance.control = this.dynamicControl; this._instance.label = this.label; this._instance.hint = this.hint; this._instance.name = this.name; this._instance.type = this.type; this._instance.value = this.value; this._instance.required = this.required; this._instance.min = this.min; this._instance.max = this.max; this._instance.minLength = this.minLength; this._instance.maxLength = this.maxLength; this._instance.selections = this.selections; this._instance.multiple = this.multiple; this._instance.errorMessageTemplate = this.errorMessageTemplate; } /** * Reassign any inputs that have changed * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (this._instance) { for (let prop in changes) { this._instance[prop] = changes[prop].currentValue; } } } } TdDynamicElementComponent.decorators = [ { type: Component, args: [{ providers: [TdDynamicFormsService, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TdDynamicElementComponent), multi: true, }], selector: 'td-dynamic-element', template: '<div tdDynamicContainer></div>' }] } ]; /** @nocollapse */ TdDynamicElementComponent.ctorParameters = () => [ { type: ComponentFactoryResolver }, { type: TdDynamicFormsService }, { type: ChangeDetectorRef } ]; TdDynamicElementComponent.propDecorators = { dynamicControl: [{ type: Input }], label: [{ type: Input }], hint: [{ type: Input }], name: [{ type: Input }], type: [{ type: Input }], required: [{ type: Input }], min: [{ type: Input }], max: [{ type: Input }], minLength: [{ type: Input }], maxLength: [{ type: Input }], selections: [{ type: Input }], multiple: [{ type: Input }], errorMessageTemplate: [{ type: Input }], childElement: [{ type: ViewChild, args: [TdDynamicElementDirective,] }], maxAttr: [{ type: HostBinding, args: ['attr.max',] }], minAttr: [{ type: HostBinding, args: ['attr.min',] }] }; if (false) { /** @type {?} */ TdDynamicElementComponent.prototype._instance; /** * Sets form control of the element. * @type {?} */ TdDynamicElementComponent.prototype.dynamicControl; /** * Sets label to be displayed. * @type {?} */ TdDynamicElementComponent.prototype.label; /** * Sets hint to be displayed. * @type {?} */ TdDynamicElementComponent.prototype.hint; /** * Sets name to be displayed as attribute. * @type {?} */ TdDynamicElementComponent.prototype.name; /** * Sets type or element of element to be rendered. * Throws error if does not exist or no supported. * @type {?} */ TdDynamicElementComponent.prototype.type; /** * Sets required validation checkup (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.required; /** * Sets min validation checkup (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.min; /** * Sets max validation checkup (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.max; /** * Sets minLength validation checkup (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.minLength; /** * Sets maxLength validation checkup (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.maxLength; /** * Sets selections for array elements (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.selections; /** * Sets multiple property for array elements (if supported by element). * @type {?} */ TdDynamicElementComponent.prototype.multiple; /** * Sets error message template so it can be injected into dynamic components. * @type {?} */ TdDynamicElementComponent.prototype.errorMessageTemplate; /** @type {?} */ TdDynamicElementComponent.prototype.childElement; /** @type {?} */ TdDynamicElementComponent.prototype._componentFactoryResolver; /** @type {?} */ TdDynamicElementComponent.prototype._dynamicFormsService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1lbGVtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BudWFyY2gvZHluYW1pYy1mb3Jtcy8iLCJzb3VyY2VzIjpbImR5bmFtaWMtZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQW9DLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakosT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBRSx5QkFBeUIsRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RixPQUFPLEVBQW1DLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFMUcsTUFBTSxPQUFPLG9CQUFvQjs7OztJQUMvQixZQUFtQixrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtJQUFHLENBQUM7Q0FDN0Q7OztJQURhLGtEQUE0Qzs7OztBQUkxRCxNQUFNLE9BQU8sMEJBQTBCLEdBQUcseUJBQXlCLENBQUMsb0JBQW9CLENBQUM7QUFHekYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHVCQUF1Qjs7Ozs7SUFHdEUsWUFBWSxXQUE2QixFQUFFLGdCQUFrQztRQUMzRSxLQUFLLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdkMsQ0FBQzs7O1lBTkYsU0FBUyxTQUFDLEVBQUMsUUFBUSxFQUFFLGtDQUFrQyxFQUFDOzs7O1lB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c0JBRW5DLFdBQVcsU0FBQyxVQUFVO3NCQUt0QixXQUFXLFNBQUMsVUFBVTs7OztJQTNFdkIsOENBQXVCOzs7OztJQUt2QixtREFBcUM7Ozs7O0lBS3JDLDBDQUE0Qjs7Ozs7SUFLNUIseUNBQTJCOzs7OztJQUszQix5Q0FBMkI7Ozs7OztJQU0zQix5Q0FBNEQ7Ozs7O0lBSzVELDZDQUF1Qzs7Ozs7SUFLdkMsd0NBQWlDOzs7OztJQUtqQyx3Q0FBaUM7Ozs7O0lBS2pDLDhDQUF1Qzs7Ozs7SUFLdkMsOENBQXVDOzs7OztJQUt2QywrQ0FBdUM7Ozs7O0lBS3ZDLDZDQUF1Qzs7Ozs7SUFLdkMseURBQTREOztJQUU1RCxpREFBOEU7O0lBWWxFLDhEQUEyRDs7SUFDM0QseURBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEaXJlY3RpdmUsIElucHV0LCBIb3N0QmluZGluZywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIFRlbXBsYXRlUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWxEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuXHJcbmltcG9ydCB7IG1peGluQ29udHJvbFZhbHVlQWNjZXNzb3IsIElDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBUZER5bmFtaWNFbGVtZW50LCBUZER5bmFtaWNUeXBlLCBUZER5bmFtaWNGb3Jtc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2R5bmFtaWMtZm9ybXMuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgVGREeW5hbWljRWxlbWVudEJhc2Uge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG59XHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cclxuZXhwb3J0IGNvbnN0IF9UZER5bmFtaWNFbGVtZW50TWl4aW5CYXNlID0gbWl4aW5Db250cm9sVmFsdWVBY2Nlc3NvcihUZER5bmFtaWNFbGVtZW50QmFzZSk7XHJcblxyXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1t0ZER5bmFtaWNGb3Jtc0Vycm9yXW5nLXRlbXBsYXRlJ30pXHJcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNGb3Jtc0Vycm9yVGVtcGxhdGUgZXh0ZW5kcyBUZW1wbGF0ZVBvcnRhbERpcmVjdGl2ZSB7XHJcblxyXG4gIEBJbnB1dCgpIHRkRHluYW1pY0Zvcm1zRXJyb3I6IHN0cmluZztcclxuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgc3VwZXIodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXJSZWYpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbdGREeW5hbWljQ29udGFpbmVyXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNFbGVtZW50RGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikgeyB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHByb3ZpZGVyczogW1RkRHluYW1pY0Zvcm1zU2VydmljZSwge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZER5bmFtaWNFbGVtZW50Q29tcG9uZW50KSxcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gIH1dLFxyXG4gIHNlbGVjdG9yOiAndGQtZHluYW1pYy1lbGVtZW50JyxcclxuICB0ZW1wbGF0ZTogJzxkaXYgdGREeW5hbWljQ29udGFpbmVyPjwvZGl2PicsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZER5bmFtaWNFbGVtZW50Q29tcG9uZW50IGV4dGVuZHMgX1RkRHluYW1pY0VsZW1lbnRNaXhpbkJhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50cyBJQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmb3JtIGNvbnRyb2wgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZHluYW1pY0NvbnRyb2w6IEZvcm1Db250cm9sO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGxhYmVsIHRvIGJlIGRpc3BsYXllZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgaGludCB0byBiZSBkaXNwbGF5ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGludDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbmFtZSB0byBiZSBkaXNwbGF5ZWQgYXMgYXR0cmlidXRlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHR5cGUgb3IgZWxlbWVudCBvZiBlbGVtZW50IHRvIGJlIHJlbmRlcmVkLlxyXG4gICAqIFRocm93cyBlcnJvciBpZiBkb2VzIG5vdCBleGlzdCBvciBubyBzdXBwb3J0ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdHlwZTogVGREeW5hbWljRWxlbWVudCB8IFRkRHluYW1pY1R5cGUgPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgcmVxdWlyZWQgdmFsaWRhdGlvbiBjaGVja3VwIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbWluIHZhbGlkYXRpb24gY2hlY2t1cCAoaWYgc3VwcG9ydGVkIGJ5IGVsZW1lbnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1pbjogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIG1heCB2YWxpZGF0aW9uIGNoZWNrdXAgKGlmIHN1cHBvcnRlZCBieSBlbGVtZW50KS5cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBtaW5MZW5ndGggdmFsaWRhdGlvbiBjaGVja3VwIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgbWluTGVuZ3RoOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbWF4TGVuZ3RoIHZhbGlkYXRpb24gY2hlY2t1cCAoaWYgc3VwcG9ydGVkIGJ5IGVsZW1lbnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heExlbmd0aDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHNlbGVjdGlvbnMgZm9yIGFycmF5IGVsZW1lbnRzIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uczogYW55W10gPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbXVsdGlwbGUgcHJvcGVydHkgZm9yIGFycmF5IGVsZW1lbnRzIChpZiBzdXBwb3J0ZWQgYnkgZWxlbWVudCkuXHJcbiAgICovXHJcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZSBzbyBpdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBkeW5hbWljIGNvbXBvbmVudHMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVGREeW5hbWljRWxlbWVudERpcmVjdGl2ZSkgY2hpbGRFbGVtZW50OiBUZER5bmFtaWNFbGVtZW50RGlyZWN0aXZlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIubWF4JylcclxuICBnZXQgbWF4QXR0cigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWF4O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLm1pbicpXHJcbiAgZ2V0IG1pbkF0dHIoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1pbjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2R5bmFtaWNGb3Jtc1NlcnZpY2U6IFRkRHluYW1pY0Zvcm1zU2VydmljZSxcclxuICAgICAgICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgY29tcG9uZW50OiBhbnkgPSA8YW55PnRoaXMudHlwZSBpbnN0YW5jZW9mIFR5cGUgPyB0aGlzLnR5cGUgOiB0aGlzLl9keW5hbWljRm9ybXNTZXJ2aWNlLmdldER5bmFtaWNFbGVtZW50KHRoaXMudHlwZSk7XHJcbiAgICBsZXQgcmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5cclxuICAgICAgcmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KVxyXG4gICAgICAuY3JlYXRlKHRoaXMuY2hpbGRFbGVtZW50LnZpZXdDb250YWluZXIuaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5jaGlsZEVsZW1lbnQudmlld0NvbnRhaW5lci5pbnNlcnQocmVmLmhvc3RWaWV3KTtcclxuICAgIHRoaXMuX2luc3RhbmNlID0gcmVmLmluc3RhbmNlO1xyXG4gICAgdGhpcy5faW5zdGFuY2UuY29udHJvbCA9IHRoaXMuZHluYW1pY0NvbnRyb2w7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5sYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5oaW50ID0gdGhpcy5oaW50O1xyXG4gICAgdGhpcy5faW5zdGFuY2UubmFtZSA9IHRoaXMubmFtZTtcclxuICAgIHRoaXMuX2luc3RhbmNlLnR5cGUgPSB0aGlzLnR5cGU7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5taW4gPSB0aGlzLm1pbjtcclxuICAgIHRoaXMuX2luc3RhbmNlLm1heCA9IHRoaXMubWF4O1xyXG4gICAgdGhpcy5faW5zdGFuY2UubWluTGVuZ3RoID0gdGhpcy5taW5MZW5ndGg7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5tYXhMZW5ndGggPSB0aGlzLm1heExlbmd0aDtcclxuICAgIHRoaXMuX2luc3RhbmNlLnNlbGVjdGlvbnMgPSB0aGlzLnNlbGVjdGlvbnM7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XHJcbiAgICB0aGlzLl9pbnN0YW5jZS5lcnJvck1lc3NhZ2VUZW1wbGF0ZSA9IHRoaXMuZXJyb3JNZXNzYWdlVGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFzc2lnbiBhbnkgaW5wdXRzIHRoYXQgaGF2ZSBjaGFuZ2VkXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2luc3RhbmNlKSB7XHJcbiAgICAgIGZvciAobGV0IHByb3AgaW4gY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXMuX2luc3RhbmNlW3Byb3BdID0gY2hhbmdlc1twcm9wXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19