import {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection'; import {isPresent} from 'angular2/src/facade/lang'; import * as modelModule from './model'; export class FormBuilder { group(controlsConfig, extra = null):modelModule.ControlGroup { var controls = this._reduceControls(controlsConfig); var optionals = isPresent(extra) ? StringMapWrapper.get(extra, "optionals") : null; var validator = isPresent(extra) ? StringMapWrapper.get(extra, "validator") : null; if (isPresent(validator)) { return new modelModule.ControlGroup(controls, optionals, validator); } else { return new modelModule.ControlGroup(controls, optionals); } } control(value, validator:Function = null):modelModule.Control { if (isPresent(validator)) { return new modelModule.Control(value, validator); } else { return new modelModule.Control(value); } } _reduceControls(controlsConfig) { var controls = {}; StringMapWrapper.forEach(controlsConfig, (controlConfig, controlName) => { controls[controlName] = this._createControl(controlConfig); }); return controls; } _createControl(controlConfig) { if (controlConfig instanceof modelModule.Control || controlConfig instanceof modelModule.ControlGroup) { return controlConfig; } else if (ListWrapper.isList(controlConfig)) { var value = ListWrapper.get(controlConfig, 0); var validator = controlConfig.length > 1 ? controlConfig[1] : null; return this.control(value, validator); } else { return this.control(controlConfig); } } }