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
JavaScript
/**
* @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=