@chatterton/angular2-schema-form
Version:
Angular2 Schema Form (DISCLAIMER: it is not related to angular-schema-form)
78 lines (64 loc) • 2 kB
text/typescript
import { FormProperty, PropertyGroup } from './formproperty';
import { FormPropertyFactory } from './formpropertyfactory';
import { SchemaValidatorFactory } from '../schemavalidatorfactory';
import { ValidatorRegistry } from './validatorregistry';
export class ArrayProperty extends PropertyGroup {
constructor(
private formPropertyFactory: FormPropertyFactory,
schemaValidatorFactory: SchemaValidatorFactory,
validatorRegistry: ValidatorRegistry,
schema: any,
parent: PropertyGroup,
path: string
) {
super(schemaValidatorFactory, validatorRegistry, schema, parent, path);
}
addItem(value: any = null): FormProperty {
let newProperty = this.addProperty();
newProperty.reset(value, false);
return newProperty;
}
private addProperty() {
let newProperty = this.formPropertyFactory.createProperty(this.schema.items, this);
(<FormProperty[]>this.properties).push(newProperty);
return newProperty;
}
removeItem(index: number) {
(<FormProperty[]>this.properties).splice(index, 1);
this.updateValueAndValidity(false, true);
}
setValue(value: any, onlySelf: boolean) {
this.createProperties();
this.resetProperties(value);
this.updateValueAndValidity(onlySelf, true);
}
public _updateValue() {
this.reduceValue();
}
private reduceValue(): void {
let value = [];
this.forEachChild((property, _) => {
if (property.visible) {
value.push(property.value);
}
});
this._value = value;
}
reset(value: any, onlySelf = true) {
value = value || this.schema.default || [];
this.properties = [];
this.resetProperties(value);
this.updateValueAndValidity(onlySelf, true);
}
private createProperties() {
this.properties = [];
}
private resetProperties(value: any) {
for (let idx in value) {
if (value.hasOwnProperty(idx)) {
let property = this.addProperty();
property.reset(value[idx], true);
}
}
}
}