UNPKG

@chatterton/angular2-schema-form

Version:

Angular2 Schema Form (DISCLAIMER: it is not related to angular-schema-form)

78 lines (64 loc) 2 kB
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); } } } }