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

127 lines (126 loc) 13.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ 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'; export class TemplateSchemaDirective extends FieldParent { /** * @param {?} formComponent * @param {?} templateSchemaService * @param {?} actionRegistry * @param {?} validatorRegistry * @param {?} templateRegistry */ constructor(formComponent, templateSchemaService, actionRegistry, validatorRegistry, templateRegistry) { super(); this.formComponent = formComponent; this.templateSchemaService = templateSchemaService; this.actionRegistry = actionRegistry; this.validatorRegistry = validatorRegistry; this.templateRegistry = templateRegistry; } /** * @param {?} fields * @return {?} */ setFormDocumentSchema(fields) { this.actionRegistry.clear(); this.validatorRegistry.clear(); /** @type {?} */ const schema = this.getFieldsSchema(fields); this.templateRegistry.clear(); // register fields recursively fields.forEach((field) => { field.register(); }); /** @type {?} */ const _validators = this.getFieldsValidators(fields); _validators.forEach(({ path, validators }) => { this.validatorRegistry.register(path, validators); }); /** @type {?} */ const 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 {?} */ const 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 {?} */ ngAfterContentInit() { if (this.childFields.length > 0) { this.setFormDocumentSchema(this.childFields.toArray()); } merge(this.childFields.changes, this.childButtons.changes, this.templateSchemaService.changes) .pipe(filter((value) => Boolean(value))) .subscribe(() => { this.setFormDocumentSchema(this.childFields.toArray()); }); } } TemplateSchemaDirective.decorators = [ { type: Directive, args: [{ selector: 'sf-form[templateSchema]', providers: [ TemplateSchemaService ] },] } ]; /** @nocollapse */ TemplateSchemaDirective.ctorParameters = () => [ { 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtc2NoZW1hLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zY2hlbWEtZm9ybXMvIiwic291cmNlcyI6WyJsaWIvdGVtcGxhdGUtc2NoZW1hL3RlbXBsYXRlLXNjaGVtYS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFHVCxZQUFZLEVBRVosS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzlCLE1BQU0scURBQXFELENBQUM7QUFTN0QsTUFBTSw4QkFBK0IsU0FBUSxXQUFXOzs7Ozs7OztJQVl0RCxZQUNVLGVBQ0EsdUJBQ0UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLGdCQUErQztRQUV6RCxLQUFLLEVBQUUsQ0FBQztRQU5BLGtCQUFhLEdBQWIsYUFBYTtRQUNiLDBCQUFxQixHQUFyQixxQkFBcUI7UUFDbkIs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RSxDQUFDLENBQUM7U0FDeEQsQ0FBQyxDQUFDO0tBRUo7OztZQWhHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsU0FBUyxFQUFFO29CQUNULHFCQUFxQjtpQkFDdEI7YUFDRjs7OztZQXBCUSxhQUFhO1lBS2IscUJBQXFCO1lBSnJCLGNBQWM7WUFDZCxpQkFBaUI7WUFTeEIsNkJBQTZCOzs7MEJBYTVCLGVBQWUsU0FBQyxjQUFjOzJCQUc5QixlQUFlLFNBQUMsZUFBZTt3QkFHL0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEhvc3RCaW5kaW5nLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIElucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4uL21vZGVsL2FjdGlvbnJlZ2lzdHJ5JztcbmltcG9ydCB7IFZhbGlkYXRvclJlZ2lzdHJ5IH0gZnJvbSAnLi4vbW9kZWwvdmFsaWRhdG9ycmVnaXN0cnknO1xuaW1wb3J0IHsgU2NoZW1hUHJvcGVydHlUeXBlIH0gZnJvbSAnLi4vc2NoZW1hJztcblxuaW1wb3J0IHsgVGVtcGxhdGVTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi90ZW1wbGF0ZS1zY2hlbWEuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZmllbGQvZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAnLi9maWVsZC9maWVsZCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZpZWxkUGFyZW50IH0gZnJvbSAnLi9maWVsZC9maWVsZC1wYXJlbnQnO1xuaW1wb3J0IHtcbiAgVGVtcGxhdGVTY2hlbWFFbGVtZW50UmVnaXN0cnlcbn0gZnJvbSAnLi4vdGVtcGxhdGUtc2NoZW1hL3RlbXBsYXRlLXNjaGVtYS1lbGVtZW50LXJlZ2lzdHJ5JztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdzZi1mb3JtW3RlbXBsYXRlU2NoZW1hXScsXG4gIHByb3ZpZGVyczogW1xuICAgIFRlbXBsYXRlU2NoZW1hU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlU2NoZW1hRGlyZWN0aXZlIGV4dGVuZHMgRmllbGRQYXJlbnRcbmltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihGaWVsZENvbXBvbmVudClcbiAgY2hpbGRGaWVsZHM6IFF1ZXJ5TGlzdDxGaWVsZENvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihCdXR0b25Db21wb25lbnQpXG4gIGNoaWxkQnV0dG9uczogUXVlcnlMaXN0PEJ1dHRvbkNvbXBvbmVudD47XG5cbiAgQElucHV0KClcbiAgZmllbGRzZXRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQ29tcG9uZW50OiBGb3JtQ29tcG9uZW50LFxuICAgIHByaXZhdGUgdGVtcGxhdGVTY2hlbWFTZXJ2aWNlOiBUZW1wbGF0ZVNjaGVtYVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjdGlvblJlZ2lzdHJ5OiBBY3Rpb25SZWdpc3RyeSxcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yUmVnaXN0cnk6IFZhbGlkYXRvclJlZ2lzdHJ5LFxuICAgIHByb3RlY3RlZCB0ZW1wbGF0ZVJlZ2lzdHJ5OiBUZW1wbGF0ZVNjaGVtYUVsZW1lbnRSZWdpc3RyeSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHNldEZvcm1Eb2N1bWVudFNjaGVtYShmaWVsZHM6IEZpZWxkQ29tcG9uZW50W10pIHtcbiAgICB0aGlzLmFjdGlvblJlZ2lzdHJ5LmNsZWFyKCk7XG4gICAgdGhpcy52YWxpZGF0b3JSZWdpc3RyeS5jbGVhcigpO1xuXG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXRGaWVsZHNTY2hlbWEoZmllbGRzKTtcblxuICAgIHRoaXMudGVtcGxhdGVSZWdpc3RyeS5jbGVhcigpO1xuICAgIC8vIHJlZ2lzdGVyIGZpZWxkcyByZWN1cnNpdmVseVxuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgZmllbGQucmVnaXN0ZXIoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IF92YWxpZGF0b3JzID0gdGhpcy5nZXRGaWVsZHNWYWxpZGF0b3JzKGZpZWxkcyk7XG4gICAgX3ZhbGlkYXRvcnMuZm9yRWFjaCgoeyBwYXRoLCB2YWxpZGF0b3JzIH0pID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdG9yUmVnaXN0cnkucmVnaXN0ZXIocGF0aCwgdmFsaWRhdG9ycyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmV2aW91c1NjaGVtYSA9IHRoaXMuZm9ybUNvbXBvbmVudC5zY2hlbWE7XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LnNjaGVtYSA9IHtcbiAgICAgIHR5cGU6IFNjaGVtYVByb3BlcnR5VHlwZS5PYmplY3QsXG4gICAgICBwcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllc1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5maWVsZHNldHMpIHtcbiAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5zY2hlbWEuZmllbGRzZXRzID0gdGhpcy5maWVsZHNldHM7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LnNjaGVtYS5yZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZDtcbiAgICB9XG5cbiAgICBjb25zdCBidXR0b25zID0gdGhpcy5nZXRCdXR0b25zKCk7XG4gICAgaWYgKGJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LnNjaGVtYS5idXR0b25zID0gYnV0dG9ucztcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Db21wb25lbnQubmdPbkNoYW5nZXMoe1xuICAgICAgc2NoZW1hOiBuZXcgU2ltcGxlQ2hhbmdlKFxuICAgICAgICBwcmV2aW91c1NjaGVtYSxcbiAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LnNjaGVtYSxcbiAgICAgICAgQm9vbGVhbihwcmV2aW91c1NjaGVtYSlcbiAgICAgIClcbiAgICB9KTtcblxuICB9XG5cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cbiAgICBpZiAodGhpcy5jaGlsZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNldEZvcm1Eb2N1bWVudFNjaGVtYSh0aGlzLmNoaWxkRmllbGRzLnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLmNoaWxkRmllbGRzLmNoYW5nZXMsXG4gICAgICB0aGlzLmNoaWxkQnV0dG9ucy5jaGFuZ2VzLFxuICAgICAgdGhpcy50ZW1wbGF0ZVNjaGVtYVNlcnZpY2UuY2hhbmdlc1xuICAgIClcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigodmFsdWUpID0+IEJvb2xlYW4odmFsdWUpKSxcbiAgICAgIC8vIGJ1aWxkaW5nIHRoZSBqc29uIHNjaGVtYSBpcyBhIGhlYXZ5IHRhc2ssIGF2b2lkIHVubmVjZXNzYXJ5IGJ1aWxkc1xuICAgICAgLy8gVE9ETyB1c2UgdGhpc1xuICAgICAgLy8gZGVib3VuY2VUaW1lKDUwKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0Rm9ybURvY3VtZW50U2NoZW1hKHRoaXMuY2hpbGRGaWVsZHMudG9BcnJheSgpKTtcbiAgICB9KTtcblxuICB9XG5cbn1cbiJdfQ==