UNPKG

ngx-schema-forms

Version:

New features: - Ajv schema validator. - Angular forms compatible: Property tree is created using FormGroup, FormArray and FormControl classes. - Array now properly loads initial data from model. - WidgetTyep: WidgetRegistry now supports WidgetType, now wo

140 lines (139 loc) 14.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, Input, ViewContainerRef } from '@angular/core'; import { filter, startWith, distinctUntilChanged } from 'rxjs/operators'; import { Unsubscriber } from '../unsubscriber'; import { WidgetFactory } from '../widgetfactory'; import { GenericProperty } from '../model/generic-property'; import { TemplateSchemaElementRegistry } from '../template-schema/template-schema-element-registry'; var FormPropertyWidgetChooserDirective = /** @class */ (function () { function FormPropertyWidgetChooserDirective(viewContainerRef, widgetFactory, templateRegistry) { this.viewContainerRef = viewContainerRef; this.widgetFactory = widgetFactory; this.templateRegistry = templateRegistry; } /** * @return {?} */ FormPropertyWidgetChooserDirective.prototype.isWidgetRequired = /** * @return {?} */ function () { /** @type {?} */ var parent = /** @type {?} */ ((/** @type {?} */ (this.formProperty.parent))); if (!parent || !parent.schema["required"]) { return false; } return parent.schema["required"].includes(this.formProperty.name); }; /** * @return {?} */ FormPropertyWidgetChooserDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; // TODO break into functions this.componentRef = this.widgetFactory.createWidget(this.viewContainerRef, this.formProperty.schema["widget"].id); /** @type {?} */ var component = this.componentRef.instance; component.formProperty = this.formProperty; component.schema = this.formProperty.schema; component.id = this.formProperty.id; /** @type {?} */ var element = this.templateRegistry.getElement(this.formProperty.path); if (element) { this.subs = element.changes.subscribe(function (schema) { component.schema = Object.assign(_this.formProperty.schema, schema); _this.componentRef.changeDetectorRef.detectChanges(); }); } component.required = this.isWidgetRequired(); // widget instance in formProperty this.formProperty.widgetInstance = component; // error messages if (this.formProperty instanceof GenericProperty) { this.subs = this.formProperty.statusChanges .pipe( // initial, to add error messages from schema validator startWith('INVALID'), filter(function (status) { /** @type {?} */ var errorMessages = component.errorMessages; /** @type {?} */ var hasErrorMessages = errorMessages && errorMessages.length > 0; // it's valid, but error messages need to be cleared if (status === 'VALID' && hasErrorMessages) { return true; } return status === 'INVALID'; }), distinctUntilChanged()) .subscribe(function () { /** @type {?} */ var propertyErrors = _this.formProperty.getErrors(); if (!propertyErrors) { // clear errors emssages // clear errors emssages _this.componentRef.instance.errorMessages = []; return; } /** @type {?} */ var errorMessages = propertyErrors.getMessages(); _this.componentRef.instance.errorMessages = errorMessages; _this.componentRef.changeDetectorRef.detectChanges(); }); } }; /** * @return {?} */ FormPropertyWidgetChooserDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.componentRef) { this.componentRef.destroy(); } if (this.viewContainerRef) { this.viewContainerRef.clear(); } }; FormPropertyWidgetChooserDirective.decorators = [ { type: Directive, args: [{ selector: '[sfFormPropertyWidgetChooser]', },] } ]; /** @nocollapse */ FormPropertyWidgetChooserDirective.ctorParameters = function () { return [ { type: ViewContainerRef }, { type: WidgetFactory }, { type: TemplateSchemaElementRegistry } ]; }; FormPropertyWidgetChooserDirective.propDecorators = { formProperty: [{ type: Input }] }; tslib_1.__decorate([ Unsubscriber(), tslib_1.__metadata("design:type", Object) ], FormPropertyWidgetChooserDirective.prototype, "subs", void 0); return FormPropertyWidgetChooserDirective; }()); export { FormPropertyWidgetChooserDirective }; if (false) { /** @type {?} */ FormPropertyWidgetChooserDirective.prototype.formProperty; /** @type {?} */ FormPropertyWidgetChooserDirective.prototype.componentRef; /** @type {?} */ FormPropertyWidgetChooserDirective.prototype.subs; /** @type {?} */ FormPropertyWidgetChooserDirective.prototype.viewContainerRef; /** @type {?} */ FormPropertyWidgetChooserDirective.prototype.widgetFactory; /** @type {?} */ FormPropertyWidgetChooserDirective.prototype.templateRegistry; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1wcm9wZXJ0eS13aWRnZXQtY2hvb3Nlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc2NoZW1hLWZvcm1zLyIsInNvdXJjZXMiOlsibGliL2Zvcm0vZm9ybS1wcm9wZXJ0eS13aWRnZXQtY2hvb3Nlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxnQkFBZ0IsRUFHakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1Qsb0JBQW9CLEVBR3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUNMLDZCQUE2QixFQUM5QixNQUFNLHFEQUFxRCxDQUFDOztJQWlCM0QsNENBQ1Usa0JBQ0EsZUFDRSxnQkFBK0M7UUFGakQscUJBQWdCLEdBQWhCLGdCQUFnQjtRQUNoQixrQkFBYSxHQUFiLGFBQWE7UUFDWCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQStCO0tBQ3REOzs7O0lBRUwsNkRBQWdCOzs7SUFBaEI7O1FBQ0UsSUFBTSxNQUFNLHFCQUFHLG1CQUFrQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBaUIsRUFBQztRQUMzRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFlBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNkO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGFBQVUsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEU7Ozs7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QjtRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQy9CO0tBQ0Y7O2dCQW5HRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtpQkFDMUM7Ozs7Z0JBM0JDLGdCQUFnQjtnQkFnQlQsYUFBYTtnQkFJcEIsNkJBQTZCOzs7K0JBVTVCLEtBQUs7OztRQUtMLFlBQVksRUFBRTs7OzZDQXZDakI7O1NBZ0NhLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgQ29tcG9uZW50UmVmLFxuICBJbnB1dCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgc3RhcnRXaXRoLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVW5zdWJzY3JpYmVyIH0gZnJvbSAnLi4vdW5zdWJzY3JpYmVyJztcbmltcG9ydCB7IFByb3BlcnR5V2lkZ2V0IH0gZnJvbSAnLi4vd2lkZ2V0cy9iYXNlL3dpZGdldCc7XG5pbXBvcnQgeyBXaWRnZXRGYWN0b3J5IH0gZnJvbSAnLi4vd2lkZ2V0ZmFjdG9yeSc7XG5pbXBvcnQgeyBGb3JtUHJvcGVydHkgfSBmcm9tICcuLi9tb2RlbC9mb3JtLXByb3BlcnR5JztcbmltcG9ydCB7IEdlbmVyaWNQcm9wZXJ0eSB9IGZyb20gJy4uL21vZGVsL2dlbmVyaWMtcHJvcGVydHknO1xuaW1wb3J0IHtcbiAgVGVtcGxhdGVTY2hlbWFFbGVtZW50UmVnaXN0cnlcbn0gZnJvbSAnLi4vdGVtcGxhdGUtc2NoZW1hL3RlbXBsYXRlLXNjaGVtYS1lbGVtZW50LXJlZ2lzdHJ5JztcblxuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzZkZvcm1Qcm9wZXJ0eVdpZGdldENob29zZXJdJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVByb3BlcnR5V2lkZ2V0Q2hvb3NlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBmb3JtUHJvcGVydHk6IEZvcm1Qcm9wZXJ0eTtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgQFVuc3Vic2NyaWJlcigpXG4gIHByaXZhdGUgc3VicztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB3aWRnZXRGYWN0b3J5OiBXaWRnZXRGYWN0b3J5LFxuICAgIHByb3RlY3RlZCB0ZW1wbGF0ZVJlZ2lzdHJ5OiBUZW1wbGF0ZVNjaGVtYUVsZW1lbnRSZWdpc3RyeSxcbiAgKSB7IH1cblxuICBpc1dpZGdldFJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhcmVudCA9ICg8QWJzdHJhY3RDb250cm9sPnRoaXMuZm9ybVByb3BlcnR5LnBhcmVudCkgYXMgRm9ybVByb3BlcnR5O1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuc2NoZW1hLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudC5zY2hlbWEucmVxdWlyZWQuaW5jbHVkZXModGhpcy5mb3JtUHJvcGVydHkubmFtZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIC8vIFRPRE8gYnJlYWsgaW50byBmdW5jdGlvbnNcblxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy53aWRnZXRGYWN0b3J5LmNyZWF0ZVdpZGdldDxQcm9wZXJ0eVdpZGdldD4oXG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0eS5zY2hlbWEud2lkZ2V0LmlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIGNvbXBvbmVudC5mb3JtUHJvcGVydHkgPSB0aGlzLmZvcm1Qcm9wZXJ0eTtcbiAgICBjb21wb25lbnQuc2NoZW1hID0gdGhpcy5mb3JtUHJvcGVydHkuc2NoZW1hO1xuICAgIGNvbXBvbmVudC5pZCA9IHRoaXMuZm9ybVByb3BlcnR5LmlkO1xuXG4gICAgLy8gdGVtcGxhdGVTY2hlbWEgZmllbGQgdXBkYXRlc1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRlbXBsYXRlUmVnaXN0cnkuZ2V0RWxlbWVudCh0aGlzLmZvcm1Qcm9wZXJ0eS5wYXRoKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdGhpcy5zdWJzID0gZWxlbWVudC5jaGFuZ2VzLnN1YnNjcmliZSgoc2NoZW1hKSA9PiB7XG4gICAgICAgIGNvbXBvbmVudC5zY2hlbWEgPSBPYmplY3QuYXNzaWduKHRoaXMuZm9ybVByb3BlcnR5LnNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50LnJlcXVpcmVkID0gdGhpcy5pc1dpZGdldFJlcXVpcmVkKCk7XG5cbiAgICAvLyB3aWRnZXQgaW5zdGFuY2UgaW4gZm9ybVByb3BlcnR5XG4gICAgdGhpcy5mb3JtUHJvcGVydHkud2lkZ2V0SW5zdGFuY2UgPSBjb21wb25lbnQ7XG5cbiAgICAvLyBlcnJvciBtZXNzYWdlc1xuICAgIGlmICh0aGlzLmZvcm1Qcm9wZXJ0eSBpbnN0YW5jZW9mIEdlbmVyaWNQcm9wZXJ0eSkge1xuICAgICAgdGhpcy5zdWJzID0gdGhpcy5mb3JtUHJvcGVydHkuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBpbml0aWFsLCB0byBhZGQgZXJyb3IgbWVzc2FnZXMgZnJvbSBzY2hlbWEgdmFsaWRhdG9yXG4gICAgICAgICAgc3RhcnRXaXRoKCdJTlZBTElEJyksXG4gICAgICAgICAgZmlsdGVyKChzdGF0dXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGNvbXBvbmVudC5lcnJvck1lc3NhZ2VzO1xuICAgICAgICAgICAgY29uc3QgaGFzRXJyb3JNZXNzYWdlcyA9IGVycm9yTWVzc2FnZXMgJiYgZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICAvLyBpdCdzIHZhbGlkLCBidXQgZXJyb3IgbWVzc2FnZXMgbmVlZCB0byBiZSBjbGVhcmVkXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnICYmIGhhc0Vycm9yTWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0dXMgPT09ICdJTlZBTElEJztcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHlFcnJvcnMgPSB0aGlzLmZvcm1Qcm9wZXJ0eS5nZXRFcnJvcnMoKTtcblxuICAgICAgICAgIGlmICghcHJvcGVydHlFcnJvcnMpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGVycm9ycyBlbXNzYWdlc1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBwcm9wZXJ0eUVycm9ycy5nZXRNZXNzYWdlcygpO1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVycm9yTWVzc2FnZXMgPSBlcnJvck1lc3NhZ2VzO1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmlld0NvbnRhaW5lclJlZikge1xuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgfVxuICB9XG59XG4iXX0=