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

135 lines (134 loc) 13.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, ContentChildren, QueryList, SimpleChange, Input } from '@angular/core'; import { merge } from 'rxjs'; import { filter } from 'rxjs/operators'; import { FormComponent } from '../form/form.component'; import { ActionRegistry } from '../model/actionregistry'; import { ValidatorRegistry } from '../model/validatorregistry'; import { SchemaPropertyType } from '../schema'; import { TemplateSchemaService } from './template-schema.service'; import { FieldComponent } from './field/field.component'; import { ButtonComponent } from './button/button.component'; import { FieldParent } from './field/field-parent'; import { TemplateSchemaElementRegistry } from '../template-schema/template-schema-element-registry'; var TemplateSchemaDirective = /** @class */ (function (_super) { tslib_1.__extends(TemplateSchemaDirective, _super); function TemplateSchemaDirective(formComponent, templateSchemaService, actionRegistry, validatorRegistry, templateRegistry) { var _this = _super.call(this) || this; _this.formComponent = formComponent; _this.templateSchemaService = templateSchemaService; _this.actionRegistry = actionRegistry; _this.validatorRegistry = validatorRegistry; _this.templateRegistry = templateRegistry; return _this; } /** * @param {?} fields * @return {?} */ TemplateSchemaDirective.prototype.setFormDocumentSchema = /** * @param {?} fields * @return {?} */ function (fields) { var _this = this; this.actionRegistry.clear(); this.validatorRegistry.clear(); /** @type {?} */ var schema = this.getFieldsSchema(fields); this.templateRegistry.clear(); // register fields recursively fields.forEach(function (field) { field.register(); }); /** @type {?} */ var _validators = this.getFieldsValidators(fields); _validators.forEach(function (_a) { var path = _a.path, validators = _a.validators; _this.validatorRegistry.register(path, validators); }); /** @type {?} */ var previousSchema = this.formComponent.schema; this.formComponent.schema = { type: SchemaPropertyType.Object, properties: schema.properties }; if (this.fieldsets) { this.formComponent.schema.fieldsets = this.fieldsets; } if (schema.required && schema.required.length > 0) { this.formComponent.schema.required = schema.required; } /** @type {?} */ var buttons = this.getButtons(); if (buttons.length > 0) { this.formComponent.schema.buttons = buttons; } this.formComponent.ngOnChanges({ schema: new SimpleChange(previousSchema, this.formComponent.schema, Boolean(previousSchema)) }); }; /** * @return {?} */ TemplateSchemaDirective.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; if (this.childFields.length > 0) { this.setFormDocumentSchema(this.childFields.toArray()); } merge(this.childFields.changes, this.childButtons.changes, this.templateSchemaService.changes) .pipe(filter(function (value) { return Boolean(value); })) .subscribe(function () { _this.setFormDocumentSchema(_this.childFields.toArray()); }); }; TemplateSchemaDirective.decorators = [ { type: Directive, args: [{ selector: 'sf-form[templateSchema]', providers: [ TemplateSchemaService ] },] } ]; /** @nocollapse */ TemplateSchemaDirective.ctorParameters = function () { return [ { type: FormComponent }, { type: TemplateSchemaService }, { type: ActionRegistry }, { type: ValidatorRegistry }, { type: TemplateSchemaElementRegistry } ]; }; TemplateSchemaDirective.propDecorators = { childFields: [{ type: ContentChildren, args: [FieldComponent,] }], childButtons: [{ type: ContentChildren, args: [ButtonComponent,] }], fieldsets: [{ type: Input }] }; return TemplateSchemaDirective; }(FieldParent)); export { TemplateSchemaDirective }; if (false) { /** @type {?} */ TemplateSchemaDirective.prototype.childFields; /** @type {?} */ TemplateSchemaDirective.prototype.childButtons; /** @type {?} */ TemplateSchemaDirective.prototype.fieldsets; /** @type {?} */ TemplateSchemaDirective.prototype.formComponent; /** @type {?} */ TemplateSchemaDirective.prototype.templateSchemaService; /** @type {?} */ TemplateSchemaDirective.prototype.actionRegistry; /** @type {?} */ TemplateSchemaDirective.prototype.validatorRegistry; /** @type {?} */ TemplateSchemaDirective.prototype.templateRegistry; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtc2NoZW1hLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY2hlbWEtZm9ybXMvIiwic291cmNlcyI6WyJsaWIvdGVtcGxhdGUtc2NoZW1hL3RlbXBsYXRlLXNjaGVtYS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBR1QsWUFBWSxFQUVaLEtBQUssRUFDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUNMLDZCQUE2QixFQUM5QixNQUFNLHFEQUFxRCxDQUFDOztJQVNoQixtREFBVztJQVl0RCxpQ0FDVSxlQUNBLHVCQUNFLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxnQkFBK0M7UUFMM0QsWUFPRSxpQkFBTyxTQUNSO1FBUFMsbUJBQWEsR0FBYixhQUFhO1FBQ2IsMkJBQXFCLEdBQXJCLHFCQUFxQjtRQUNuQixvQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsdUJBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxzQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQStCOztLQUcxRDs7Ozs7SUFFRCx1REFBcUI7Ozs7SUFBckIsVUFBc0IsTUFBd0I7UUFBOUMsaUJBNENDO1FBM0NDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDOztRQUUvQixJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7UUFFOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQUs7WUFDbkIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xCLENBQUMsQ0FBQzs7UUFFSCxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQW9CO2dCQUFsQixjQUFJLEVBQUUsMEJBQVU7WUFDckMsS0FBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkQsQ0FBQyxDQUFDOztRQUVILElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHO1lBQzFCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO1lBQy9CLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDO1FBRUYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdEQ7UUFFRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDdEQ7O1FBRUQsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDN0IsTUFBTSxFQUFFLElBQUksWUFBWSxDQUN0QixjQUFjLEVBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQ3pCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDeEI7U0FDRixDQUFDLENBQUM7S0FFSjs7OztJQUdELG9EQUFrQjs7O0lBQWxCO1FBQUEsaUJBcUJDO1FBbkJDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN4RDtRQUVELEtBQUssQ0FDSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQ3pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQ25DO2FBQ0EsSUFBSSxDQUNILE1BQU0sQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBZCxDQUFjLENBQUMsQ0FJbEM7YUFDQSxTQUFTLENBQUM7WUFDVCxLQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3hELENBQUMsQ0FBQztLQUVKOztnQkFoR0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFNBQVMsRUFBRTt3QkFDVCxxQkFBcUI7cUJBQ3RCO2lCQUNGOzs7O2dCQXBCUSxhQUFhO2dCQUtiLHFCQUFxQjtnQkFKckIsY0FBYztnQkFDZCxpQkFBaUI7Z0JBU3hCLDZCQUE2Qjs7OzhCQWE1QixlQUFlLFNBQUMsY0FBYzsrQkFHOUIsZUFBZSxTQUFDLGVBQWU7NEJBRy9CLEtBQUs7O2tDQTNDUjtFQWtDNkMsV0FBVztTQUEzQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBIb3N0QmluZGluZyxcbiAgU2ltcGxlQ2hhbmdlLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uUmVnaXN0cnkgfSBmcm9tICcuLi9tb2RlbC9hY3Rpb25yZWdpc3RyeSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JSZWdpc3RyeSB9IGZyb20gJy4uL21vZGVsL3ZhbGlkYXRvcnJlZ2lzdHJ5JztcbmltcG9ydCB7IFNjaGVtYVByb3BlcnR5VHlwZSB9IGZyb20gJy4uL3NjaGVtYSc7XG5cbmltcG9ydCB7IFRlbXBsYXRlU2NoZW1hU2VydmljZSB9IGZyb20gJy4vdGVtcGxhdGUtc2NoZW1hLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkL2ZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4vZmllbGQvZmllbGQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWVsZFBhcmVudCB9IGZyb20gJy4vZmllbGQvZmllbGQtcGFyZW50JztcbmltcG9ydCB7XG4gIFRlbXBsYXRlU2NoZW1hRWxlbWVudFJlZ2lzdHJ5XG59IGZyb20gJy4uL3RlbXBsYXRlLXNjaGVtYS90ZW1wbGF0ZS1zY2hlbWEtZWxlbWVudC1yZWdpc3RyeSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnc2YtZm9ybVt0ZW1wbGF0ZVNjaGVtYV0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBUZW1wbGF0ZVNjaGVtYVNlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVNjaGVtYURpcmVjdGl2ZSBleHRlbmRzIEZpZWxkUGFyZW50XG5pbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oRmllbGRDb21wb25lbnQpXG4gIGNoaWxkRmllbGRzOiBRdWVyeUxpc3Q8RmllbGRDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQnV0dG9uQ29tcG9uZW50KVxuICBjaGlsZEJ1dHRvbnM6IFF1ZXJ5TGlzdDxCdXR0b25Db21wb25lbnQ+O1xuXG4gIEBJbnB1dCgpXG4gIGZpZWxkc2V0czogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUNvbXBvbmVudDogRm9ybUNvbXBvbmVudCxcbiAgICBwcml2YXRlIHRlbXBsYXRlU2NoZW1hU2VydmljZTogVGVtcGxhdGVTY2hlbWFTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY3Rpb25SZWdpc3RyeTogQWN0aW9uUmVnaXN0cnksXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvclJlZ2lzdHJ5OiBWYWxpZGF0b3JSZWdpc3RyeSxcbiAgICBwcm90ZWN0ZWQgdGVtcGxhdGVSZWdpc3RyeTogVGVtcGxhdGVTY2hlbWFFbGVtZW50UmVnaXN0cnksXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBzZXRGb3JtRG9jdW1lbnRTY2hlbWEoZmllbGRzOiBGaWVsZENvbXBvbmVudFtdKSB7XG4gICAgdGhpcy5hY3Rpb25SZWdpc3RyeS5jbGVhcigpO1xuICAgIHRoaXMudmFsaWRhdG9yUmVnaXN0cnkuY2xlYXIoKTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0RmllbGRzU2NoZW1hKGZpZWxkcyk7XG5cbiAgICB0aGlzLnRlbXBsYXRlUmVnaXN0cnkuY2xlYXIoKTtcbiAgICAvLyByZWdpc3RlciBmaWVsZHMgcmVjdXJzaXZlbHlcbiAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGZpZWxkLnJlZ2lzdGVyKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBfdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RmllbGRzVmFsaWRhdG9ycyhmaWVsZHMpO1xuICAgIF92YWxpZGF0b3JzLmZvckVhY2goKHsgcGF0aCwgdmFsaWRhdG9ycyB9KSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRvclJlZ2lzdHJ5LnJlZ2lzdGVyKHBhdGgsIHZhbGlkYXRvcnMpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJldmlvdXNTY2hlbWEgPSB0aGlzLmZvcm1Db21wb25lbnQuc2NoZW1hO1xuICAgIHRoaXMuZm9ybUNvbXBvbmVudC5zY2hlbWEgPSB7XG4gICAgICB0eXBlOiBTY2hlbWFQcm9wZXJ0eVR5cGUuT2JqZWN0LFxuICAgICAgcHJvcGVydGllczogc2NoZW1hLnByb3BlcnRpZXNcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZmllbGRzZXRzKSB7XG4gICAgICB0aGlzLmZvcm1Db21wb25lbnQuc2NoZW1hLmZpZWxkc2V0cyA9IHRoaXMuZmllbGRzZXRzO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEucmVxdWlyZWQgJiYgc2NoZW1hLnJlcXVpcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5zY2hlbWEucmVxdWlyZWQgPSBzY2hlbWEucmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0QnV0dG9ucygpO1xuICAgIGlmIChidXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5zY2hlbWEuYnV0dG9ucyA9IGJ1dHRvbnM7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtQ29tcG9uZW50Lm5nT25DaGFuZ2VzKHtcbiAgICAgIHNjaGVtYTogbmV3IFNpbXBsZUNoYW5nZShcbiAgICAgICAgcHJldmlvdXNTY2hlbWEsXG4gICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5zY2hlbWEsXG4gICAgICAgIEJvb2xlYW4ocHJldmlvdXNTY2hlbWEpXG4gICAgICApXG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuXG4gICAgaWYgKHRoaXMuY2hpbGRGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRGb3JtRG9jdW1lbnRTY2hlbWEodGhpcy5jaGlsZEZpZWxkcy50b0FycmF5KCkpO1xuICAgIH1cblxuICAgIG1lcmdlKFxuICAgICAgdGhpcy5jaGlsZEZpZWxkcy5jaGFuZ2VzLFxuICAgICAgdGhpcy5jaGlsZEJ1dHRvbnMuY2hhbmdlcyxcbiAgICAgIHRoaXMudGVtcGxhdGVTY2hlbWFTZXJ2aWNlLmNoYW5nZXNcbiAgICApXG4gICAgLnBpcGUoXG4gICAgICBmaWx0ZXIoKHZhbHVlKSA9PiBCb29sZWFuKHZhbHVlKSksXG4gICAgICAvLyBidWlsZGluZyB0aGUganNvbiBzY2hlbWEgaXMgYSBoZWF2eSB0YXNrLCBhdm9pZCB1bm5lY2Vzc2FyeSBidWlsZHNcbiAgICAgIC8vIFRPRE8gdXNlIHRoaXNcbiAgICAgIC8vIGRlYm91bmNlVGltZSg1MClcbiAgICApXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldEZvcm1Eb2N1bWVudFNjaGVtYSh0aGlzLmNoaWxkRmllbGRzLnRvQXJyYXkoKSk7XG4gICAgfSk7XG5cbiAgfVxuXG59XG4iXX0=