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

129 lines (128 loc) 11.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { FormArray } from '@angular/forms'; import { FormPropertyErrors } from './form-property-errors'; import { ControlProperty } from './control-property'; export class ArrayProperty extends ControlProperty(FormArray) { /** * @param {?} formPropertyFactory * @param {?} path * @param {?} schema */ constructor(formPropertyFactory, path, schema) { super([]); this.formPropertyFactory = formPropertyFactory; this.path = path; this.schema = schema; } /** * @return {?} */ _updateValue() { // to avoid ts complaints super['_updateValue'](); this.nonEmptyValue = this.controls .filter((control) => { /** @type {?} */ const enabled = control.enabled || this.disabled; return control.nonEmptyValue !== undefined && enabled; }) .map((control) => control.value); } /** * @return {?} */ getErrors() { /** @type {?} */ const aggregatedErrors = this.controls .reduce((errors, property) => { /** @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); } /** * @param {?} value * @param {?=} options * @return {?} */ patchValue(value, options = {}) { value.forEach((newValue, index) => { this.addPropertyAt(index); if (this.at(index)) { this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent }); } }); this.updateValueAndValidity(options); } /** * @return {?} */ addProperty() { /** @type {?} */ const property = this.getPropertyFromSchemaItems(); super.push(property); property.bindVisibility(); } /** * @param {?} index * @return {?} */ addPropertyAt(index) { /** @type {?} */ const property = this.getPropertyFromSchemaItems(); this.insert(index, property); property.bindVisibility(); } /** * @return {?} */ bindVisibility() { super.bindVisibility(); this.controls.forEach((control) => { control.bindVisibility(); }); } /** * @param {?} fn * @param {?=} opts * @return {?} */ forEach(fn, opts = { includeSelf: true }) { if (opts.includeSelf) { fn(this); } for (const control of this.controls) { /** @type {?} */ const property = /** @type {?} */ (control); if (property.forEach instanceof Function) { property.forEach(fn, { includeSelf: true }); continue; } fn(property); } } /** * @return {?} */ getPropertyFromSchemaItems() { return this.formPropertyFactory.createProperty(this.schema["items"], this); } } if (false) { /** @type {?} */ ArrayProperty.prototype.formPropertyFactory; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktcHJvcGVydHkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc2NoZW1hLWZvcm1zLyIsInNvdXJjZXMiOlsibGliL21vZGVsL2FycmF5LXByb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBSTdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUlyRCxNQUFNLG9CQUFxQixTQUFRLGVBQWUsQ0FBQyxTQUFTLENBQUM7Ozs7OztJQUUzRCxZQUNVLHFCQUNSLElBQVksRUFDWixNQUFjO1FBRWQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBSkYsd0JBQW1CLEdBQW5CLG1CQUFtQjtRQUszQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUN0Qjs7OztJQUVELFlBQVk7O1FBRVYsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUTthQUMvQixNQUFNLENBQUMsQ0FBQyxPQUFxQixFQUFFLEVBQUU7O1lBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqRCxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDO1NBQ3ZELENBQUM7YUFDRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwQzs7OztJQUVELFNBQVM7O1FBRVAsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNuQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUs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QUFRLENBQUMsQ0FBQztTQUNkO0tBQ0Y7Ozs7SUFFTywwQkFBMEI7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQzVDLElBQUksQ0FBQyxNQUFNLFdBQ1gsSUFBSSxDQUNMLENBQUM7O0NBR0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQXJyYXksIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYSc7XG5pbXBvcnQgeyBGb3JtUHJvcGVydHkgfSBmcm9tICcuL2Zvcm0tcHJvcGVydHknO1xuaW1wb3J0IHsgRm9ybVByb3BlcnR5RXJyb3JzIH0gZnJvbSAnLi9mb3JtLXByb3BlcnR5LWVycm9ycyc7XG5pbXBvcnQgeyBGb3JtUHJvcGVydHlGYWN0b3J5IH0gZnJvbSAnLi9mb3JtLXByb3BlcnR5LWZhY3RvcnknO1xuaW1wb3J0IHsgQ29udHJvbFByb3BlcnR5IH0gZnJvbSAnLi9jb250cm9sLXByb3BlcnR5JztcbmltcG9ydCB7IEdyb3VwUHJvcGVydHkgfSBmcm9tICcuL2dyb3VwLXByb3BlcnR5JztcblxuXG5leHBvcnQgY2xhc3MgQXJyYXlQcm9wZXJ0eSBleHRlbmRzIENvbnRyb2xQcm9wZXJ0eShGb3JtQXJyYXkpIGltcGxlbWVudHMgR3JvdXBQcm9wZXJ0eSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtUHJvcGVydHlGYWN0b3J5OiBGb3JtUHJvcGVydHlGYWN0b3J5LFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBzY2hlbWE6IFNjaGVtYVxuICApIHtcbiAgICBzdXBlcihbXSk7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgfVxuXG4gIF91cGRhdGVWYWx1ZSgpIHtcbiAgICAvLyB0byBhdm9pZCB0cyBjb21wbGFpbnRzXG4gICAgc3VwZXJbJ191cGRhdGVWYWx1ZSddKCk7XG5cbiAgICB0aGlzLm5vbkVtcHR5VmFsdWUgPSB0aGlzLmNvbnRyb2xzXG4gICAgICAuZmlsdGVyKChjb250cm9sOiBGb3JtUHJvcGVydHkpID0+IHtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IGNvbnRyb2wuZW5hYmxlZCB8fCB0aGlzLmRpc2FibGVkO1xuICAgICAgICByZXR1cm4gY29udHJvbC5ub25FbXB0eVZhbHVlICE9PSB1bmRlZmluZWQgJiYgZW5hYmxlZDtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlKTtcbiAgfVxuXG4gIGdldEVycm9ycygpOiBGb3JtUHJvcGVydHlFcnJvcnMgfCBudWxsIHtcblxuICAgIGNvbnN0IGFnZ3JlZ2F0ZWRFcnJvcnMgPSB0aGlzLmNvbnRyb2xzXG4gICAgICAucmVkdWNlKChlcnJvcnMsIHByb3BlcnR5OiBGb3JtUHJvcGVydHkpID0+IHtcblxuICAgICAgICBjb25zdCBwcm9wZXJ0eUVycm9ycyA9IHByb3BlcnR5LmdldEVycm9ycygpO1xuICAgICAgICBpZiAoIXByb3BlcnR5RXJyb3JzKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGVycm9ycywgcHJvcGVydHlFcnJvcnMuZXJyb3JzKTtcblxuICAgICAgfSwge30pO1xuXG4gICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICBhZ2dyZWdhdGVkRXJyb3JzW3RoaXMucGF0aF0gPSB0aGlzLmVycm9ycztcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGFnZ3JlZ2F0ZWRFcnJvcnMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtUHJvcGVydHlFcnJvcnMoYWdncmVnYXRlZEVycm9ycyk7XG4gIH1cblxuICBwYXRjaFZhbHVlKFxuICAgIHZhbHVlOiBhbnlbXSxcbiAgICBvcHRpb25zOiB7b25seVNlbGY/OiBib29sZWFuLCBlbWl0RXZlbnQ/OiBib29sZWFufSA9IHt9XG4gICkge1xuICAgIHZhbHVlLmZvckVhY2goKG5ld1ZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcblxuICAgICAgdGhpcy5hZGRQcm9wZXJ0eUF0KGluZGV4KTtcblxuICAgICAgaWYgKHRoaXMuYXQoaW5kZXgpKSB7XG4gICAgICAgIHRoaXMuYXQoaW5kZXgpLnBhdGNoVmFsdWUoXG4gICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBvcHRpb25zLmVtaXRFdmVudCB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkUHJvcGVydHkoKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5RnJvbVNjaGVtYUl0ZW1zKCk7XG4gICAgc3VwZXIucHVzaChwcm9wZXJ0eSk7XG4gICAgcHJvcGVydHkuYmluZFZpc2liaWxpdHkoKTtcbiAgfVxuXG4gIGFkZFByb3BlcnR5QXQoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eUZyb21TY2hlbWFJdGVtcygpO1xuICAgIHRoaXMuaW5zZXJ0KGluZGV4LCBwcm9wZXJ0eSk7XG4gICAgcHJvcGVydHkuYmluZFZpc2liaWxpdHkoKTtcbiAgfVxuXG4gIGJpbmRWaXNpYmlsaXR5KCkge1xuICAgIHN1cGVyLmJpbmRWaXNpYmlsaXR5KCk7XG5cbiAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEZvcm1Qcm9wZXJ0eSkgPT4ge1xuICAgICAgY29udHJvbC5iaW5kVmlzaWJpbGl0eSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChmbjogKHByb3BlcnR5OiBGb3JtUHJvcGVydHkpID0+IHZvaWQsIG9wdHMgPSB7IGluY2x1ZGVTZWxmOiB0cnVlIH0pIHtcblxuICAgIGlmIChvcHRzLmluY2x1ZGVTZWxmKSB7XG4gICAgICBmbih0aGlzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5jb250cm9scykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSA8R3JvdXBQcm9wZXJ0eT5jb250cm9sO1xuICAgICAgaWYgKHByb3BlcnR5LmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICBwcm9wZXJ0eS5mb3JFYWNoKGZuLCB7IGluY2x1ZGVTZWxmOiB0cnVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm4ocHJvcGVydHkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvcGVydHlGcm9tU2NoZW1hSXRlbXMoKTogRm9ybVByb3BlcnR5IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtUHJvcGVydHlGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgdGhpcy5zY2hlbWEuaXRlbXMsXG4gICAgICB0aGlzXG4gICAgKTtcbiAgfVxuXG59XG5cblxuIl19