appreportformutil
Version:
reactive form util
78 lines (65 loc) • 2.19 kB
text/typescript
/*
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;
}
}