UNPKG

appreportformutil

Version:

reactive form util

78 lines (65 loc) 2.19 kB
/* Purpose : Handle form data binding // create non-binding form // // set value // // keep original value // // if save => return the changed value // if cancel => return original value // */ import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms'; import { formArrayNameProvider } from '@angular/forms/src/directives/reactive_directives/form_group_name'; export class FormUtil<T> { _model : any; _originalModel : T; _form : FormGroup; _formValidators : any; // pass in a model constructor(model : any, formValidators : any) { if (model && Object.keys(model).length > 0) { this._originalModel = {...model}; this._model = {...model}; } else throw "Unable to handle object type"; if (formValidators) this._formValidators = formValidators; } createForm(blankForm : boolean):FormGroup { let model = { ...this._model}; if (model) { this.setFormWithModelValue(model, blankForm); } return this._form; } private setFormWithModelValue(model : T, blankForm? : boolean) { this._form = new FormGroup({ randomUniqueId: new FormControl() }); for (let objPropValue of Object.entries(model)) { let key = objPropValue[0]; let value = objPropValue[1]; if (blankForm) this._form.addControl(key, new FormControl('')); else { let controlValidators = this._formValidators[key]; if (controlValidators) this._form.addControl(key, new FormControl(value, controlValidators)); } } } commit():T { return this._form.value as T; } rollback():T { this._model = this._originalModel; this.setFormWithModelValue(this._originalModel, false); return this._originalModel; } }