diff --git a/apps/parent-form/src/app/app.component.ts b/apps/parent-form/src/app/app.component.ts index 8b45865..305f765 100644 --- a/apps/parent-form/src/app/app.component.ts +++ b/apps/parent-form/src/app/app.component.ts @@ -1,42 +1,35 @@ +import { ContactService } from './../../../../libs/contact-model/src/lib/contact.service'; import { Contact } from '@nested-forms/contact-model'; -import { Component } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { FormGroup, FormBuilder } from '@angular/forms'; +import { Subscription } from 'rxjs'; @Component({ selector: 'nested-forms-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) -export class AppComponent { +export class AppComponent implements OnInit, OnDestroy { title = 'parent-form'; - contact: Contact = { - name: { - firstName: 'John', - lastName: 'Public', - middleName: 'Q', - prefix: 'Mr', - suffix: 'III', - }, - addresses: [ - { - line_1: '123 Main Street', - city: 'New York', - state: 'NY', - postalCode: '12345', - }, - { - line_1: '123 South Street', - city: 'Boston', - state: 'MA', - postalCode: '54321', - }, - ], - }; - + contact: Contact; form: FormGroup; - constructor(private fb: FormBuilder) { + private subscription: Subscription + + constructor(private fb: FormBuilder, private service: ContactService) { this.form = this.fb.group({}); } + + public ngOnInit() { + this.subscription = this.service.loadContact().subscribe((data: Contact) => { + this.contact = data; + }); + } + + public ngOnDestroy() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } } diff --git a/libs/contact-model/jest.config.js b/libs/contact-model/jest.config.js index 62d3e50..db6b053 100644 --- a/libs/contact-model/jest.config.js +++ b/libs/contact-model/jest.config.js @@ -5,5 +5,6 @@ module.exports = { '^.+\\.[tj]sx?$': 'ts-jest' }, moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], - coverageDirectory: '../../coverage/libs/contact-model' + coverageDirectory: '../../coverage/libs/contact-model', + setupFilesAfterEnv: ['/src/test-setup.ts'] }; diff --git a/libs/contact-model/src/index.ts b/libs/contact-model/src/index.ts index d56d3be..25a1343 100644 --- a/libs/contact-model/src/index.ts +++ b/libs/contact-model/src/index.ts @@ -1 +1,2 @@ export * from './lib/contact-model'; +export * from './lib/contact.service'; diff --git a/libs/contact-model/src/lib/contact.service.spec.ts b/libs/contact-model/src/lib/contact.service.spec.ts new file mode 100644 index 0000000..17845d4 --- /dev/null +++ b/libs/contact-model/src/lib/contact.service.spec.ts @@ -0,0 +1,22 @@ +import { Contact } from './contact-model'; +import { TestBed, async } from '@angular/core/testing'; + +import { ContactService } from './contact.service'; + +describe('ContactService', () => { + let service: ContactService; + + beforeEach(() => { + service = new ContactService(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return a contact', async(() => { + service.loadContact().subscribe((data: Contact) => { + expect(data).toBeTruthy(); + }); + })); +}); diff --git a/libs/contact-model/src/lib/contact.service.ts b/libs/contact-model/src/lib/contact.service.ts new file mode 100644 index 0000000..88a8515 --- /dev/null +++ b/libs/contact-model/src/lib/contact.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core'; + +import { Contact } from '@nested-forms/contact-model'; +import { Observable, of } from 'rxjs'; + +const contact: Contact = { + name: { + firstName: 'John', + lastName: 'Public', + middleName: 'Q', + prefix: 'Mr', + suffix: 'III', + }, + addresses: [ + { + line_1: '123 Main Street', + city: 'New York', + state: 'NY', + postalCode: '12345', + }, + { + line_1: '123 South Street', + city: 'Boston', + state: 'MA', + postalCode: '54321', + }, + ], +}; + +@Injectable({ + providedIn: 'root' +}) +export class ContactService { + constructor() { } + + public loadContact(): Observable { + return of({...contact}); + } +} diff --git a/libs/contact-model/src/test-setup.ts b/libs/contact-model/src/test-setup.ts new file mode 100644 index 0000000..8d88704 --- /dev/null +++ b/libs/contact-model/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular';