diff --git a/package-lock.json b/package-lock.json index 70f487b..bbe0fa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@angular-devkit/build-optimizer": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.36.tgz", - "integrity": "sha512-EFFF7hBbVoTOzYfXuSlGhcDr8neafmwuBAIkzAekEjzik7OaTLq7LPG7As+ebed9ll+3DAGypnrpdIE1Tp/H/A==", + "version": "0.0.38", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.38.tgz", + "integrity": "sha512-P3jcXLIHlxfX5TNDr/tZ1tARB7tZ7jLNtjRb66O4EMspnO0n6ke8SGwB7wcNIdr+VRH9jDQUyGAj9nUjlqn00A==", "dev": true, "requires": { "loader-utils": "1.1.0", @@ -25,23 +25,25 @@ } }, "@angular-devkit/core": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.22.tgz", - "integrity": "sha512-zxrNtTiv60liye/GGeRMnnGgLgAWoqlMTfPLMW0D1qJ4bbrPHtme010mpxS3QL4edcDtQseyXSFCnEkuo2MrRw==", + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.25.tgz", + "integrity": "sha512-2JPlfs23nl01aZ/VBwjfWGZ/gug1crx93im4p6+WKwL8B/9Ec9Yv619beWYRRWpe3CpaWHTJMNlBfyduYMEb1g==", "dev": true, "requires": { + "ajv": "5.5.2", + "chokidar": "1.7.0", "source-map": "0.5.7" } }, "@angular-devkit/schematics": { - "version": "0.0.42", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.42.tgz", - "integrity": "sha512-elTiNL0Nx9oin2pfZTvMBU/d9sgutXaZe8n3xm2p7jfqQZry5MYYFES4hq+WIJjtV/X9gAniafncEpxuF7ikYw==", + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.48.tgz", + "integrity": "sha512-bV8OdJRotOJqz/MHDGnBodpo6LjHpmcqKFTi+bdi30Y1cEnPQFghj9BXJWNITvBkbwKdia2qK3rFTG7uNuCv8A==", "dev": true, "requires": { - "@angular-devkit/core": "0.0.22", + "@angular-devkit/core": "0.0.25", "@ngtools/json-schema": "1.1.0", - "@schematics/schematics": "0.0.11", + "@schematics/schematics": "0.0.13", "minimist": "1.2.0", "rxjs": "5.5.6" } @@ -60,14 +62,14 @@ "integrity": "sha512-Qc6AD37ASJjhbYkDgWQOniEl+XDLWDydqPOZ0kPQhbrJk49PoM1HNZfCD1FmIZFTT/eFEVsaexc/rKw0KckvSA==", "dev": true, "requires": { - "@angular-devkit/build-optimizer": "0.0.36", - "@angular-devkit/schematics": "0.0.42", + "@angular-devkit/build-optimizer": "0.0.38", + "@angular-devkit/schematics": "0.0.48", "@ngtools/json-schema": "1.1.0", "@ngtools/webpack": "1.9.2", - "@schematics/angular": "0.1.11", + "@schematics/angular": "0.1.13", "autoprefixer": "6.7.7", "chalk": "2.2.2", - "circular-dependency-plugin": "4.3.0", + "circular-dependency-plugin": "4.4.0", "common-tags": "1.7.2", "copy-webpack-plugin": "4.3.1", "core-object": "3.1.5", @@ -224,18 +226,18 @@ } }, "@schematics/angular": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.1.11.tgz", - "integrity": "sha512-jYTantZjdYeDjxh9ZLYvGbDI0VeUxgSrcBjHvnHqMNe+YGJenY988ifWCwzjmOowj57maLrQQGrdoO7oUeNdyw==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.1.13.tgz", + "integrity": "sha512-2+cU/u/shDwJhRXr+guXw3GKnnqZtjv7qhQVwZgmgrlS5IV1aC+NxvYNkh2S8yrg2+gtJwuPOw7jIV9p2W6Abg==", "dev": true, "requires": { - "@angular-devkit/core": "0.0.22" + "@angular-devkit/core": "0.0.25" } }, "@schematics/schematics": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@schematics/schematics/-/schematics-0.0.11.tgz", - "integrity": "sha512-HAXgAIuuAGjiIKohGlRUkmUTWYtNmclR12KHlQQxT9pHFdEb2OrpHjUp2YoV32jiU6jIZm4pf3ODwlPA0VbwnA==", + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@schematics/schematics/-/schematics-0.0.13.tgz", + "integrity": "sha512-2svx/ttST8NKtJlzTSDrBjxt+EWfKv6eggBcnsMArPy7FctvbTXWaJu9igTko1jra24cbY3ps1e+02euhkbaIw==", "dev": true }, "@types/jasmine": { @@ -381,6 +383,11 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "angular-in-memory-web-api": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/angular-in-memory-web-api/-/angular-in-memory-web-api-0.5.2.tgz", + "integrity": "sha1-/y6mZqv9BN19FslT7JcuExigmCQ=" + }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -602,7 +609,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000790", + "caniuse-db": "1.0.30000792", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -1012,7 +1019,7 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000790", + "caniuse-db": "1.0.30000792", "electron-to-chromium": "1.3.30" } }, @@ -1117,15 +1124,15 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000790", + "caniuse-db": "1.0.30000792", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" } }, "caniuse-db": { - "version": "1.0.30000790", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000790.tgz", - "integrity": "sha1-qAI+brn+nA7z1gtEJ84QTqh9OBw=", + "version": "1.0.30000792", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000792.tgz", + "integrity": "sha1-p9rG3J9RgbZ1/Wnlywb++1IxV/g=", "dev": true }, "caseless": { @@ -1214,9 +1221,9 @@ } }, "circular-dependency-plugin": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.3.0.tgz", - "integrity": "sha512-L3W9L1S0wC64rq+QSaZzmWnJW7cVBgimxI2lNEFEX5biwlRG8EHRM68JFi+CX5ZkCGUWJHIpnhdVs181Zlq3wA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", + "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", "dev": true }, "clap": { @@ -1881,7 +1888,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.37" + "es5-ext": "0.10.38" } }, "dashdash": { @@ -2085,9 +2092,9 @@ "dev": true }, "dns-packet": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.0.tgz", - "integrity": "sha512-uyOFFZ3elFVDZ7mq8bfl2PkgIbFr7+29RDyarF1maUuPNHNvBrlgcNkJaEYQh3KouqAyKzVLYvWRT3CWLSbNMA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { "ip": "1.1.5", @@ -2437,9 +2444,9 @@ } }, "es5-ext": { - "version": "0.10.37", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", - "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "version": "0.10.38", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", + "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", "dev": true, "requires": { "es6-iterator": "2.0.3", @@ -2453,7 +2460,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.38", "es6-symbol": "3.1.1" } }, @@ -2464,7 +2471,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.38", "es6-iterator": "2.0.3", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -2478,7 +2485,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.38", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -2491,7 +2498,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37" + "es5-ext": "0.10.38" } }, "es6-weak-map": { @@ -2501,7 +2508,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.38", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -2571,7 +2578,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37" + "es5-ext": "0.10.38" } }, "eventemitter3": { @@ -4410,7 +4417,7 @@ "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.3.5" + "uglify-js": "3.3.7" } }, "html-webpack-plugin": { @@ -6013,7 +6020,7 @@ "integrity": "sha512-uV3/ckdsffHx9IrGQrx613mturMdMqQ06WTq+C09NsStJ9iNG6RcUWgPKs1Rfjy+idZT6tfQoXEusGNnEZhT3w==", "dev": true, "requires": { - "dns-packet": "1.3.0", + "dns-packet": "1.3.1", "thunky": "0.1.0" } }, @@ -6123,7 +6130,7 @@ "querystring-es3": "0.2.1", "readable-stream": "2.3.3", "stream-browserify": "2.0.1", - "stream-http": "2.7.2", + "stream-http": "2.8.0", "string_decoder": "1.0.3", "timers-browserify": "2.0.4", "tty-browserify": "0.0.0", @@ -8982,9 +8989,9 @@ } }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", + "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", "dev": true, "requires": { "builtin-status-codes": "3.0.0", @@ -9431,15 +9438,21 @@ "dev": true }, "uglify-js": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.5.tgz", - "integrity": "sha512-ZebM2kgBL/UI9rKeAbsS2J0UPPv7SBy5hJNZml/YxB1zC6JK8IztcPs+cxilE4pu0li6vadVSFqiO7xFTKuSrg==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.7.tgz", + "integrity": "sha512-esJIpNQIC44EFSrbeFPhiXHy2HJ+dTcnn0Zdkn+5meuLsvoV0mFJffKlyezNIIHNfhF0NpgbifygCfEyAogIhQ==", "dev": true, "requires": { - "commander": "2.12.2", + "commander": "2.13.0", "source-map": "0.6.1" }, "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9466,11 +9479,17 @@ "schema-utils": "0.4.3", "serialize-javascript": "1.4.0", "source-map": "0.6.1", - "uglify-es": "3.3.5", + "uglify-es": "3.3.7", "webpack-sources": "1.1.0", "worker-farm": "1.5.2" }, "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, "schema-utils": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz", @@ -9488,12 +9507,12 @@ "dev": true }, "uglify-es": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.5.tgz", - "integrity": "sha512-7IvaFuYtfbcXm0fGb13mmRYVQdzQDXETAtvYHbCDPt2V88Y8l2HaULOyW6ueoYA0JhGIcLK7dtHkDcBWySqnBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.7.tgz", + "integrity": "sha512-fGMnE6SsDRsCjxm78C+lv7MuXsse/dtF7QuTUT43BYf4jlxPjd+XTnGB8YjaCQJ3sv2LT4zk0mwpp9+QJocU6g==", "dev": true, "requires": { - "commander": "2.12.2", + "commander": "2.13.0", "source-map": "0.6.1" } } diff --git a/package.json b/package.json index bff13a0..049fcce 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@angular/platform-browser": "^5.0.0", "@angular/platform-browser-dynamic": "^5.0.0", "@angular/router": "^5.0.0", + "angular-in-memory-web-api": "^0.5.2", "core-js": "^2.4.1", "rxjs": "^5.5.2", "zone.js": "^0.8.14" diff --git a/src/app/adress.ts b/src/app/adress.ts new file mode 100644 index 0000000..d128a0c --- /dev/null +++ b/src/app/adress.ts @@ -0,0 +1,14 @@ +export class Adress { + public lineOne: string; + public lineTwo: string; + public city: string; + public country: string; + public zipCode?: number; + constructor() { + this.lineOne = ''; + this.lineTwo = ''; + this.city = ''; + this.country = ''; + this.zipCode = 0; + } +} diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 7b0f672..26cc54f 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; +import { ContactService } from './services/contact.service'; @Component({ selector: 'app-root', diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 9a9dc69..92893fd 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,12 +1,18 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; +import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api'; +import { InMemoryDataService } from './in-memory-data.service'; import { AppComponent } from './app.component'; import { ContactFormComponent } from './components/contact-form/contact-form.component'; import { HeaderComponent } from './components/blocks/header/header.component'; import { ToDosComponent } from './components/blocks/to-dos/to-dos.component'; import { DocComponent } from './components/blocks/doc/doc.component'; +import { AdressComponent } from './components/adress/adress.component'; + +import { ContactService } from './services/contact.service'; @NgModule({ @@ -15,13 +21,22 @@ import { DocComponent } from './components/blocks/doc/doc.component'; ContactFormComponent, HeaderComponent, ToDosComponent, - DocComponent + DocComponent, + AdressComponent, ], imports: [ BrowserModule, - FormsModule + FormsModule, + HttpClientModule, + + // The HttpClientInMemoryWebApiModule module intercepts HTTP requests + // and returns simulated server responses. + // Remove it when a real server is ready to receive requests. + HttpClientInMemoryWebApiModule.forRoot( + InMemoryDataService, { dataEncapsulation: false } + ) ], - providers: [], + providers: [ ContactService ], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/src/app/components/adress/adress.component.css b/src/app/components/adress/adress.component.css new file mode 100644 index 0000000..4735c1f --- /dev/null +++ b/src/app/components/adress/adress.component.css @@ -0,0 +1,10 @@ +.ng-valid[required], +.ng-valid.required { + border-left: 5px solid #42A948; + /* green */ +} + +.ng-invalid:not(form) { + border-left: 5px solid #a94442; + /* red */ +} diff --git a/src/app/components/adress/adress.component.html b/src/app/components/adress/adress.component.html new file mode 100644 index 0000000..6011b88 --- /dev/null +++ b/src/app/components/adress/adress.component.html @@ -0,0 +1,41 @@ +