From cd7644a7678a42a8bba290e808a2b80b068b437f Mon Sep 17 00:00:00 2001 From: "Kevin C. Coram" Date: Tue, 31 Dec 2019 13:49:46 -0800 Subject: [PATCH] Refactor createForm() to provide composible factory methods --- .../src/lib/services/contact-form.service.ts | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/libs/contact/src/lib/services/contact-form.service.ts b/libs/contact/src/lib/services/contact-form.service.ts index 7a0d56e..826551a 100644 --- a/libs/contact/src/lib/services/contact-form.service.ts +++ b/libs/contact/src/lib/services/contact-form.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; -import { Contact } from '@nested-forms/contact'; +import { Contact, Name, Address } from '@nested-forms/contact'; @Injectable({ providedIn: 'root', @@ -9,35 +9,41 @@ export class ContactFormService { constructor(private fb: FormBuilder) {} public createForm(model: Contact): FormGroup { - const name = model.name; - - const addresses: FormArray = this.fb.array([]); - - const group = this.fb.group({ - name: this.fb.group({ - firstName: [name ? name.firstName : ''], - lastName: [name ? name.lastName : ''], - middleName: [name ? name.middleName : ''], - prefix: [name ? name.prefix : ''], - suffix: [name ? name.suffix : ''], - }), - addresses: addresses, + return this.fb.group({ + name: this.createContactNameForm(model.name), + addresses: this.createContactAddressListForm(model.addresses), }); + } - if (model.addresses) { - model.addresses.forEach(addr => { - addresses.push( - this.fb.group({ - line1: [addr ? addr.line1 : ''], - line2: [addr ? addr.line2 : ''], - city: [addr ? addr.city : ''], - state: [addr ? addr.state : ''], - postalCode: [addr ? addr.postalCode : ''], - }), - ); + public createContactNameForm(name: Name): FormGroup { + return this.fb.group({ + firstName: [name ? name.firstName : ''], + lastName: [name ? name.lastName : ''], + middleName: [name ? name.middleName : ''], + prefix: [name ? name.prefix : ''], + suffix: [name ? name.suffix : ''], + }) + } + + public createContactAddressListForm(addresses: Address[]): FormArray { + const list: FormArray = this.fb.array([]); + + if (addresses) { + addresses.forEach(addr => { + list.push(this.createContactAddressForm(addr)); }); } - return group; + return list; + } + + public createContactAddressForm(addr: Address): FormGroup { + return this.fb.group({ + line1: [addr ? addr.line1 : ''], + line2: [addr ? addr.line2 : ''], + city: [addr ? addr.city : ''], + state: [addr ? addr.state : ''], + postalCode: [addr ? addr.postalCode : ''], + }); } }