import { BasicBuilder, $GetBuilderValue, $GetBuilderModel } from './basic'; import { FieldArrayModel } from '../models'; import { Maybe, or } from '../maybe'; export class FieldArrayBuilder< ChildBuilder extends BasicBuilder > extends BasicBuilder< readonly $GetBuilderValue[], FieldArrayModel< $GetBuilderValue, $GetBuilderModel > > { private _defaultValue: ReadonlyArray<$GetBuilderValue> = []; constructor(private readonly childBuilder: ChildBuilder) { super(); } defaultValue(defaultValue: ReadonlyArray<$GetBuilderValue>) { this._defaultValue = defaultValue; return this; } build( defaultValue?: Maybe>> ): FieldArrayModel< $GetBuilderValue, $GetBuilderModel > { const model = new FieldArrayModel< $GetBuilderValue, $GetBuilderModel >( this.childBuilder, or(defaultValue, () => this._defaultValue) ); model.validators = this._validators; model.normalizeBeforeSubmit = this._normalizeBeforeSubmit; // Remove readonly modifier temporarily (model.builder as FieldArrayBuilder) = this; return model; } /** * 返回数组 child 的 builder 对象。 */ unwrap() { return this.childBuilder; } }