UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

113 lines (112 loc) 4.8 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { Injectable } from 'angular2/core'; import { StringMapWrapper } from 'angular2/src/facade/collection'; import { isPresent, isArray } from 'angular2/src/facade/lang'; import * as modelModule from './model'; /** * Creates a form object from a user-specified configuration. * * ### Example ([live demo](http://plnkr.co/edit/ENgZo8EuIECZNensZCVr?p=preview)) * * ```typescript * @Component({ * selector: 'my-app', * viewBindings: [FORM_BINDINGS] * template: ` * <form [ngFormModel]="loginForm"> * <p>Login <input ngControl="login"></p> * <div ngControlGroup="passwordRetry"> * <p>Password <input type="password" ngControl="password"></p> * <p>Confirm password <input type="password" ngControl="passwordConfirmation"></p> * </div> * </form> * <h3>Form value:</h3> * <pre>{{value}}</pre> * `, * directives: [FORM_DIRECTIVES] * }) * export class App { * loginForm: ControlGroup; * * constructor(builder: FormBuilder) { * this.loginForm = builder.group({ * login: ["", Validators.required], * passwordRetry: builder.group({ * password: ["", Validators.required], * passwordConfirmation: ["", Validators.required, asyncValidator] * }) * }); * } * * get value(): string { * return JSON.stringify(this.loginForm.value, null, 2); * } * } * ``` */ export let FormBuilder = class FormBuilder { /** * Construct a new {@link ControlGroup} with the given map of configuration. * Valid keys for the `extra` parameter map are `optionals` and `validator`. * * See the {@link ControlGroup} constructor for more details. */ group(controlsConfig, extra = null) { var controls = this._reduceControls(controlsConfig); var optionals = (isPresent(extra) ? StringMapWrapper.get(extra, "optionals") : null); var validator = isPresent(extra) ? StringMapWrapper.get(extra, "validator") : null; var asyncValidator = isPresent(extra) ? StringMapWrapper.get(extra, "asyncValidator") : null; return new modelModule.ControlGroup(controls, optionals, validator, asyncValidator); } /** * Construct a new {@link Control} with the given `value`,`validator`, and `asyncValidator`. */ control(value, validator = null, asyncValidator = null) { return new modelModule.Control(value, validator, asyncValidator); } /** * Construct an array of {@link Control}s from the given `controlsConfig` array of * configuration, with the given optional `validator` and `asyncValidator`. */ array(controlsConfig, validator = null, asyncValidator = null) { var controls = controlsConfig.map(c => this._createControl(c)); return new modelModule.ControlArray(controls, validator, asyncValidator); } /** @internal */ _reduceControls(controlsConfig) { var controls = {}; StringMapWrapper.forEach(controlsConfig, (controlConfig, controlName) => { controls[controlName] = this._createControl(controlConfig); }); return controls; } /** @internal */ _createControl(controlConfig) { if (controlConfig instanceof modelModule.Control || controlConfig instanceof modelModule.ControlGroup || controlConfig instanceof modelModule.ControlArray) { return controlConfig; } else if (isArray(controlConfig)) { var value = controlConfig[0]; var validator = controlConfig.length > 1 ? controlConfig[1] : null; var asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null; return this.control(value, validator, asyncValidator); } else { return this.control(controlConfig); } } }; FormBuilder = __decorate([ Injectable(), __metadata('design:paramtypes', []) ], FormBuilder);