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