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

96 lines (95 loc) 9.38 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { FormGroup } from '@angular/forms'; import { FormPropertyErrors } from './form-property-errors'; import { ControlProperty } from './control-property'; export class ObjectProperty extends ControlProperty(FormGroup) { /** * @param {?} path * @param {?} schema */ constructor(path, schema) { super({}); this.path = path; this.schema = schema; } /** * @return {?} */ _updateValue() { // to avoid ts complaints super['_updateValue'](); this.nonEmptyValue = this['_reduceChildren']({}, (result, control, name) => { if (control.nonEmptyValue === undefined) { return result; } if (control.enabled || this.disabled) { result[name] = control.nonEmptyValue; } return result; }); } /** * @return {?} */ getErrors() { /** @type {?} */ const aggregatedErrors = Object.keys(this.controls) .reduce((errors, key) => { /** @type {?} */ const property = /** @type {?} */ (this.controls[key]); /** @type {?} */ const propertyErrors = property.getErrors(); if (!propertyErrors) { return errors; } return Object.assign(errors, propertyErrors.errors); }, {}); if (this.errors) { aggregatedErrors[this.path] = this.errors; } if (!Object.keys(aggregatedErrors).length) { return null; } return new FormPropertyErrors(aggregatedErrors); } /** * @return {?} */ bindVisibility() { super.bindVisibility(); for (const key in this.controls) { if (this.controls.hasOwnProperty(key)) { (/** @type {?} */ (this.controls[key])).bindVisibility(); } } } /** * @param {?} fn * @param {?=} opts * @return {?} */ forEach(fn, opts = { includeSelf: true }) { if (opts.includeSelf) { fn(this); } for (const key in this.controls) { if (this.controls.hasOwnProperty(key)) { /** @type {?} */ const property = (/** @type {?} */ (this.controls[key])); if (property.forEach instanceof Function) { property.forEach(fn, { includeSelf: true }); continue; } fn(property); } } } } if (false) { /** @type {?} */ ObjectProperty.prototype.fieldsetWidgetInstance; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXByb3BlcnR5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXNjaGVtYS1mb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbC9vYmplY3QtcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFJN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3JELE1BQU0scUJBQXNCLFNBQVEsZUFBZSxDQUFDLFNBQVMsQ0FBQzs7Ozs7SUFJNUQsWUFBWSxJQUFZLEVBQUUsTUFBYztRQUN0QyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUN0Qjs7OztJQUVELFlBQVk7O1FBRVYsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDMUMsRUFBRSxFQUNGLENBQ0UsTUFBcUMsRUFDckMsT0FBcUIsRUFDckIsSUFBWSxFQUNaLEVBQUU7WUFDRixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZjtZQUNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ3RDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNmLENBQ0YsQ0FBQztLQUVIOzs7O0lBRUQsU0FBUzs7UUFFUCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNoRCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBVyxFQUFFLEVBQUU7O1lBQzlCLE1BQU0sUUFBUSxxQkFBaUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQzs7WUFFbEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNmO1lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyRCxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDM0M7UUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDakQ7Ozs7SUFFRCxjQUFjO1FBQ1osS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsbUJBQWUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3JEO1NBQ0Y7S0FDRjs7Ozs7O0lBRUQsT0FBTyxDQUFDLEVBQW9DLEVBQUUsSUFBSSxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtRQUV4RSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNyQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDVjtRQUVELEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBQ3RDLE1BQU0sUUFBUSxHQUFHLG1CQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUM7Z0JBRXJELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDekMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsUUFBUSxDQUFDO2lCQUNWO2dCQUVELEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNkO1NBQ0Y7S0FDRjtDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWEnO1xuaW1wb3J0IHsgRm9ybVByb3BlcnR5IH0gZnJvbSAnLi9mb3JtLXByb3BlcnR5JztcbmltcG9ydCB7IEZvcm1Qcm9wZXJ0eUVycm9ycyB9IGZyb20gJy4vZm9ybS1wcm9wZXJ0eS1lcnJvcnMnO1xuaW1wb3J0IHsgRm9ybVByb3BlcnR5RmFjdG9yeSB9IGZyb20gJy4vZm9ybS1wcm9wZXJ0eS1mYWN0b3J5JztcbmltcG9ydCB7IENvbnRyb2xQcm9wZXJ0eSB9IGZyb20gJy4vY29udHJvbC1wcm9wZXJ0eSc7XG5pbXBvcnQgeyBHcm91cFByb3BlcnR5IH0gZnJvbSAnLi9ncm91cC1wcm9wZXJ0eSc7XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RQcm9wZXJ0eSBleHRlbmRzIENvbnRyb2xQcm9wZXJ0eShGb3JtR3JvdXApIGltcGxlbWVudHMgR3JvdXBQcm9wZXJ0eSB7XG5cbiAgZmllbGRzZXRXaWRnZXRJbnN0YW5jZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHBhdGg6IHN0cmluZywgc2NoZW1hOiBTY2hlbWEpIHtcbiAgICBzdXBlcih7fSk7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgfVxuXG4gIF91cGRhdGVWYWx1ZSgpIHtcbiAgICAvLyB0byBhdm9pZCB0cyBjb21wbGFpbnRzXG4gICAgc3VwZXJbJ191cGRhdGVWYWx1ZSddKCk7XG4gICAgdGhpcy5ub25FbXB0eVZhbHVlID0gdGhpc1snX3JlZHVjZUNoaWxkcmVuJ10oXG4gICAgICB7fSxcbiAgICAgIChcbiAgICAgICAgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogRm9ybVByb3BlcnR5fSxcbiAgICAgICAgY29udHJvbDogRm9ybVByb3BlcnR5LFxuICAgICAgICBuYW1lOiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoY29udHJvbC5ub25FbXB0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sLmVuYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGNvbnRyb2wubm9uRW1wdHlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICk7XG5cbiAgfVxuXG4gIGdldEVycm9ycygpOiBGb3JtUHJvcGVydHlFcnJvcnMgfCBudWxsIHtcblxuICAgIGNvbnN0IGFnZ3JlZ2F0ZWRFcnJvcnMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKVxuICAgICAgLnJlZHVjZSgoZXJyb3JzLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IDxGb3JtUHJvcGVydHk+dGhpcy5jb250cm9sc1trZXldO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnR5RXJyb3JzID0gcHJvcGVydHkuZ2V0RXJyb3JzKCk7XG4gICAgICAgIGlmICghcHJvcGVydHlFcnJvcnMpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBwcm9wZXJ0eUVycm9ycy5lcnJvcnMpO1xuICAgICAgfSwge30pO1xuXG4gICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICBhZ2dyZWdhdGVkRXJyb3JzW3RoaXMucGF0aF0gPSB0aGlzLmVycm9ycztcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGFnZ3JlZ2F0ZWRFcnJvcnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtUHJvcGVydHlFcnJvcnMoYWdncmVnYXRlZEVycm9ycyk7XG4gIH1cblxuICBiaW5kVmlzaWJpbGl0eSgpIHtcbiAgICBzdXBlci5iaW5kVmlzaWJpbGl0eSgpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb250cm9scykge1xuICAgICAgaWYgKHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAoPEZvcm1Qcm9wZXJ0eT50aGlzLmNvbnRyb2xzW2tleV0pLmJpbmRWaXNpYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yRWFjaChmbjogKHByb3BlcnR5OiBGb3JtUHJvcGVydHkpID0+IHZvaWQsIG9wdHMgPSB7IGluY2x1ZGVTZWxmOiB0cnVlIH0pIHtcblxuICAgIGlmIChvcHRzLmluY2x1ZGVTZWxmKSB7XG4gICAgICBmbih0aGlzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbnRyb2xzKSB7XG4gICAgICBpZiAodGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gKDxHcm91cFByb3BlcnR5PnRoaXMuY29udHJvbHNba2V5XSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5LmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgIHByb3BlcnR5LmZvckVhY2goZm4sIHsgaW5jbHVkZVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmbihwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuXG4iXX0=