diff --git a/Project-2-soapui-project.xml b/Project-2-soapui-project.xml deleted file mode 100644 index de7ea51..0000000 --- a/Project-2-soapui-project.xml +++ /dev/null @@ -1,162 +0,0 @@ - -Response 1SEQUENCE/* -// Script dispatcher is used to select a response based on the incoming request. -// Here are few examples showing how to match based on path, query param, header and body - -// Match based on path -def requestPath = mockRequest.getPath() -log.info "Path: "+ requestPath - -if( requestPath.contains("json") ) -{ - // return the name of the response you want to dispatch - return "JSON Response" -} - - -// Match based on query parameter -def queryString = mockRequest.getRequest().getQueryString() -log.info "QueryString: " + queryString - -if( queryString.contains("stockholm") ) -{ - // return the name of the response you want to dispatch - return "Response Stockholm" -} -else if( queryString.contains("london") ) -{ - // return the name of the response you want to dispatch - return "Response London" -} - - -// Match based on header -def acceptEncodingHeaderList = mockRequest.getRequestHeaders().get("Accept-Encoding") -log.info "AcceptEncoding Header List: " + acceptEncodingHeaderList - -if( acceptEncodingHeaderList.contains("gzip,deflate") ) -{ - // return the name of the response you want to dispatch - return "GZiped Response" -} - - -// Match based on body -def requestBody = mockRequest.getRequestContent() -log.info "Request body: " + requestBody - -if( requestBody.contains("some data") ) -{ - // return the name of the response you want to dispatch - return "Response N" -} -*/ -{ - "name":"fm0009", - "id":12, - "age":30 -}SEQUENCE/* -// Script dispatcher is used to select a response based on the incoming request. -// Here are few examples showing how to match based on path, query param, header and body - -// Match based on path -def requestPath = mockRequest.getPath() -log.info "Path: "+ requestPath - -if( requestPath.contains("json") ) -{ - // return the name of the response you want to dispatch - return "JSON Response" -} - - -// Match based on query parameter -def queryString = mockRequest.getRequest().getQueryString() -log.info "QueryString: " + queryString - -if( queryString.contains("stockholm") ) -{ - // return the name of the response you want to dispatch - return "Response Stockholm" -} -else if( queryString.contains("london") ) -{ - // return the name of the response you want to dispatch - return "Response London" -} - - -// Match based on header -def acceptEncodingHeaderList = mockRequest.getRequestHeaders().get("Accept-Encoding") -log.info "AcceptEncoding Header List: " + acceptEncodingHeaderList - -if( acceptEncodingHeaderList.contains("gzip,deflate") ) -{ - // return the name of the response you want to dispatch - return "GZiped Response" -} - - -// Match based on body -def requestBody = mockRequest.getRequestContent() -log.info "Request body: " + requestBody - -if( requestBody.contains("some data") ) -{ - // return the name of the response you want to dispatch - return "Response N" -} -*/ -SEQUENCE/* -// Script dispatcher is used to select a response based on the incoming request. -// Here are few examples showing how to match based on path, query param, header and body - -// Match based on path -def requestPath = mockRequest.getPath() -log.info "Path: "+ requestPath - -if( requestPath.contains("json") ) -{ - // return the name of the response you want to dispatch - return "JSON Response" -} - - -// Match based on query parameter -def queryString = mockRequest.getRequest().getQueryString() -log.info "QueryString: " + queryString - -if( queryString.contains("stockholm") ) -{ - // return the name of the response you want to dispatch - return "Response Stockholm" -} -else if( queryString.contains("london") ) -{ - // return the name of the response you want to dispatch - return "Response London" -} - - -// Match based on header -def acceptEncodingHeaderList = mockRequest.getRequestHeaders().get("Accept-Encoding") -log.info "AcceptEncoding Header List: " + acceptEncodingHeaderList - -if( acceptEncodingHeaderList.contains("gzip,deflate") ) -{ - // return the name of the response you want to dispatch - return "GZiped Response" -} - - -// Match based on body -def requestBody = mockRequest.getRequestContent() -log.info "Request body: " + requestBody - -if( requestBody.contains("some data") ) -{ - // return the name of the response you want to dispatch - return "Response N" -} -*/ - \ No newline at end of file diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts deleted file mode 100644 index b391ad8..0000000 --- a/e2e/app.e2e-spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { APage } from './app.po'; - -describe('a App', () => { - let page: APage; - - beforeEach(() => { - page = new APage(); - }); - - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getParagraphText()).toEqual('Welcome to app!'); - }); -}); diff --git a/e2e/app.po.ts b/e2e/app.po.ts deleted file mode 100644 index 191d2cc..0000000 --- a/e2e/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class APage { - navigateTo() { - return browser.get('/'); - } - - getParagraphText() { - return element(by.css('app-root h1')).getText(); - } -} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json deleted file mode 100644 index 1d9e5ed..0000000 --- a/e2e/tsconfig.e2e.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "baseUrl": "./", - "module": "commonjs", - "target": "es5", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] - } -} diff --git a/package-lock.json b/package-lock.json index b8a79f8..82efffa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,19 +13,18 @@ } }, "@angular/cli": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.2.7.tgz", - "integrity": "sha512-RW9VM2TCus3nullXsCKvT5AXoaBzHzjZEY58jw1lhqntQooUAPiUikYu54MSWOZG9IfgMbAp7fXgiC/48Y0Hxw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.2.1.tgz", + "integrity": "sha512-Y3AqcyvWcy9c4KuQAKHzXp2oO51bNY3o/90wfpcwct3Bt4znDMXuoQdgf+VhffcbIgc/b2yyPlOatXLRJ7531A==", "dev": true, "requires": { "@ngtools/json-schema": "1.1.0", - "@ngtools/webpack": "1.5.5", + "@ngtools/webpack": "1.5.1", "autoprefixer": "6.7.7", - "chalk": "2.1.0", - "circular-dependency-plugin": "3.0.0", + "chalk": "1.1.3", "common-tags": "1.4.0", "core-object": "3.1.4", - "css-loader": "0.28.4", + "css-loader": "0.28.5", "cssnano": "3.10.0", "denodeify": "1.2.1", "diff": "3.3.0", @@ -34,17 +33,17 @@ "exports-loader": "0.6.4", "extract-text-webpack-plugin": "2.1.2", "file-loader": "0.10.1", - "fs-extra": "4.0.1", + "fs-extra": "3.0.1", "get-caller-file": "1.0.2", "glob": "7.1.2", "heimdalljs": "0.2.5", "heimdalljs-logger": "0.1.9", "html-webpack-plugin": "2.30.1", "inflection": "1.12.0", - "inquirer": "3.2.1", + "inquirer": "3.2.2", "isbinaryfile": "3.0.2", "istanbul-instrumenter-loader": "2.0.0", - "karma-source-map-support": "1.2.0", + "json-loader": "0.5.7", "less": "2.7.2", "less-loader": "4.0.5", "license-webpack-plugin": "0.4.3", @@ -54,7 +53,7 @@ "node-modules-path": "1.0.1", "node-sass": "4.5.3", "nopt": "4.0.1", - "opn": "5.1.0", + "opn": "4.0.2", "portfinder": "1.0.13", "postcss-loader": "1.3.3", "postcss-url": "5.1.2", @@ -67,7 +66,6 @@ "semver": "5.4.1", "silent-error": "1.1.0", "source-map-loader": "0.2.1", - "source-map-support": "0.4.15", "style-loader": "0.13.2", "stylus": "0.54.5", "stylus-loader": "3.0.1", @@ -180,6 +178,21 @@ "tsickle": "0.21.6" } }, + "@ngrx/effects": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-4.0.5.tgz", + "integrity": "sha1-EiR2OABiG3MF+bGLwX7gmyXIYdE=" + }, + "@ngrx/store": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-4.0.3.tgz", + "integrity": "sha1-Nqus36Gb+4UG5A3oC64GBQoeFek=" + }, + "@ngrx/store-devtools": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-4.0.0.tgz", + "integrity": "sha1-t5wkdzIX33/Zc1rSH5y/JTPJbgQ=" + }, "@ngtools/json-schema": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", @@ -187,13 +200,14 @@ "dev": true }, "@ngtools/webpack": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.5.5.tgz", - "integrity": "sha1-1uKpMxhAFWU9474z04Q3/dgQCec=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.5.1.tgz", + "integrity": "sha512-zGe9JQ3nTpKd2EnYKvC4+zrf/aOLUr2ZhLmSv8bAWMPu59v7fqo3oFs4n3JAbu8albQJmiktGVeY7Y2fFEsS7A==", "dev": true, "requires": { + "enhanced-resolve": "3.4.1", "loader-utils": "1.1.0", - "magic-string": "0.22.4", + "magic-string": "0.19.1", "source-map": "0.5.6" } }, @@ -734,7 +748,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000713", + "caniuse-db": "1.0.30000717", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.17", @@ -1139,7 +1153,7 @@ "buffer-xor": "1.0.3", "cipher-base": "1.0.4", "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", + "evp_bytestokey": "1.0.2", "inherits": "2.0.3" } }, @@ -1151,7 +1165,7 @@ "requires": { "browserify-aes": "1.0.6", "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.0" + "evp_bytestokey": "1.0.2" } }, "browserify-des": { @@ -1205,8 +1219,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000713", - "electron-to-chromium": "1.3.17" + "caniuse-db": "1.0.30000717", + "electron-to-chromium": "1.3.18" } }, "buffer": { @@ -1297,15 +1311,15 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000713", + "caniuse-db": "1.0.30000717", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" } }, "caniuse-db": { - "version": "1.0.30000713", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000713.tgz", - "integrity": "sha1-6gF2GEC18Uj6+U7F800KodMhlm8=", + "version": "1.0.30000717", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000717.tgz", + "integrity": "sha1-J931/szdM4yZpiyXiMJpT5n2ftc=", "dev": true }, "caseless": { @@ -1342,39 +1356,23 @@ } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "2.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "has-flag": { + "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true - }, - "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, @@ -1404,12 +1402,6 @@ "safe-buffer": "5.1.1" } }, - "circular-dependency-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-3.0.0.tgz", - "integrity": "sha1-m2hpLjWw41EJmNAWS2rlARvqV2A=", - "dev": true - }, "clap": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", @@ -1417,27 +1409,6 @@ "dev": true, "requires": { "chalk": "1.1.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } } }, "clean-css": { @@ -1764,6 +1735,43 @@ "dev": true, "requires": { "chalk": "2.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } }, "core-util-is": { @@ -1876,9 +1884,9 @@ "dev": true }, "css-loader": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz", - "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.5.tgz", + "integrity": "sha512-/FJmsDD8e6xZOBHMFShN/BCjnrEybq0spYaTZ1QoZ10/jhUa1LDDojQELu/JJ1ykZZjt0nSwkYrb2Mfx3bZx3Q==", "dev": true, "requires": { "babel-code-frame": "6.22.0", @@ -1894,7 +1902,7 @@ "postcss-modules-scope": "1.1.0", "postcss-modules-values": "1.3.0", "postcss-value-parser": "3.3.0", - "source-list-map": "0.1.8" + "source-list-map": "2.0.0" } }, "css-parse": { @@ -2283,12 +2291,6 @@ } } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", @@ -2337,9 +2339,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.17", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.17.tgz", - "integrity": "sha1-QcE0V8xxZsXBXnZ65h2GqMrN7l0=", + "version": "1.3.18", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz", + "integrity": "sha1-PcyZ2j5rZl9qu8ccKK1Ros1zGpw=", "dev": true }, "elliptic": { @@ -2581,12 +2583,13 @@ } }, "evp_bytestokey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", - "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz", + "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==", "dev": true, "requires": { - "create-hash": "1.1.3" + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" } }, "exit": { @@ -2931,9 +2934,9 @@ } }, "fs-extra": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", - "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -3075,24 +3078,6 @@ "is-glob": "2.0.1" } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } - } - }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -3419,7 +3404,7 @@ "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.0.27" + "uglify-js": "3.0.28" } }, "html-webpack-plugin": { @@ -3582,9 +3567,29 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.8" + "postcss": "6.0.9" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -3592,9 +3597,9 @@ "dev": true }, "postcss": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", - "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz", + "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==", "dev": true, "requires": { "chalk": "2.1.0", @@ -3692,9 +3697,9 @@ "dev": true }, "inquirer": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz", - "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz", + "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==", "dev": true, "requires": { "ansi-escapes": "2.0.0", @@ -3719,6 +3724,32 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3727,6 +3758,15 @@ "requires": { "ansi-regex": "3.0.0" } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } } } }, @@ -3946,12 +3986,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -4456,15 +4490,6 @@ "karma-jasmine": "1.1.0" } }, - "karma-source-map-support": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", - "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", - "dev": true, - "requires": { - "source-map-support": "0.4.15" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4732,9 +4757,9 @@ "dev": true }, "magic-string": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", - "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz", + "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=", "dev": true, "requires": { "vlq": "0.2.2" @@ -4767,6 +4792,28 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4911,15 +4958,6 @@ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", "dev": true }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "0.1.1" - } - }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", @@ -5120,7 +5158,7 @@ "stream-browserify": "2.0.1", "stream-http": "2.7.2", "string_decoder": "0.10.31", - "timers-browserify": "2.0.3", + "timers-browserify": "2.0.4", "tty-browserify": "0.0.0", "url": "0.11.0", "util": "0.10.3", @@ -5192,29 +5230,6 @@ "request": "2.81.0", "sass-graph": "2.2.4", "stdout-stream": "1.4.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - } } }, "nopt": { @@ -5384,12 +5399,13 @@ } }, "opn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", - "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", "dev": true, "requires": { - "is-wsl": "1.1.0" + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" } }, "optimist": { @@ -5489,7 +5505,7 @@ "asn1.js": "4.9.1", "browserify-aes": "1.0.6", "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", + "evp_bytestokey": "1.0.2", "pbkdf2": "3.0.13" } }, @@ -5666,29 +5682,6 @@ "js-base64": "2.1.9", "source-map": "0.5.6", "supports-color": "3.2.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - } } }, "postcss-calc": { @@ -5913,9 +5906,29 @@ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", "dev": true, "requires": { - "postcss": "6.0.8" + "postcss": "6.0.9" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -5923,9 +5936,9 @@ "dev": true }, "postcss": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", - "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz", + "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==", "dev": true, "requires": { "chalk": "2.1.0", @@ -5951,9 +5964,29 @@ "dev": true, "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.8" + "postcss": "6.0.9" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -5961,9 +5994,9 @@ "dev": true }, "postcss": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", - "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz", + "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==", "dev": true, "requires": { "chalk": "2.1.0", @@ -5989,9 +6022,29 @@ "dev": true, "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.8" + "postcss": "6.0.9" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -5999,9 +6052,9 @@ "dev": true }, "postcss": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", - "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz", + "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==", "dev": true, "requires": { "chalk": "2.1.0", @@ -6027,9 +6080,29 @@ "dev": true, "requires": { "icss-replace-symbols": "1.1.0", - "postcss": "6.0.8" + "postcss": "6.0.9" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -6037,9 +6110,9 @@ "dev": true }, "postcss": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", - "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz", + "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==", "dev": true, "requires": { "chalk": "2.1.0", @@ -7344,9 +7417,9 @@ } }, "source-list-map": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", - "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", "dev": true }, "source-map": { @@ -7936,12 +8009,11 @@ "dev": true }, "timers-browserify": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.3.tgz", - "integrity": "sha512-+JAqyNgg+M8+gXIrq2EeUr4kZqRz47Ysco7X5QKRGScRE9HIHckyHD1asozSFGeqx2nmPCgA8T5tIGVO0ML7/w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", "dev": true, "requires": { - "global": "4.3.2", "setimmediate": "1.0.5" } }, @@ -8190,9 +8262,9 @@ "dev": true }, "uglify-js": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.27.tgz", - "integrity": "sha512-HD8CmxPXUI62v5tweiulMcP/apAtx1DXGcNZkhKQZyC+MTrTsoCBb8yPAwVrbvpgw3EpRU76bRe6axjIiCYcQg==", + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz", + "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==", "dev": true, "requires": { "commander": "2.11.0", @@ -8769,16 +8841,6 @@ "number-is-nan": "1.0.1" } }, - "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -8839,14 +8901,6 @@ "requires": { "source-list-map": "2.0.0", "source-map": "0.5.6" - }, - "dependencies": { - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - } } }, "websocket-driver": { diff --git a/package.json b/package.json index 26c4103..5682b2c 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,9 @@ "@angular/platform-browser": "^4.0.0", "@angular/platform-browser-dynamic": "^4.0.0", "@angular/router": "^4.0.0", + "@ngrx/effects": "^4.0.5", + "@ngrx/store": "^4.0.3", + "@ngrx/store-devtools": "^4.0.0", "core-js": "^2.4.1", "rxjs": "^5.4.1", "zone.js": "^0.8.14" diff --git a/src/actions/index.ts b/src/actions/index.ts new file mode 100644 index 0000000..4999991 --- /dev/null +++ b/src/actions/index.ts @@ -0,0 +1,24 @@ +import { Action } from '@ngrx/store' + + +export class ReceiveUser implements Action { + readonly type: string = RECEIVE_USER + payload: any +} + + +export class UpdateName implements Action { + readonly type: string = UPDATE_NAME + payload: string +} + +export class UpdateAge implements Action { + readonly type: string = UPDATE_AGE + payload: number +} + +export type Actions = ReceiveUser | UpdateName | UpdateAge + +export const RECEIVE_USER = 'RECEIVE_USER' +export const UPDATE_NAME = 'UPDATE_NAME' +export const UPDATE_AGE = 'UPDATE_AGE' diff --git a/src/app/app.component.html b/src/app/app.component.html index 5778f1e..05f97a8 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -3,4 +3,3 @@ Gallery - diff --git a/src/app/app.component.ts b/src/app/app.component.ts index f49fabe..597e441 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,5 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; + @Component({ selector: 'app-root', @@ -6,5 +7,8 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.css'] }) export class AppComponent { - title = 'Angular POC'; + + constructor() { } + + OnInit() { } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 644551d..10e872a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -10,6 +10,11 @@ import { EditProfileComponent } from './profile/profile.component'; import { NotFoundComponent } from './not-found/not-found.component'; import {ViewProfileComponent} from './profile/view-profile.component'; import { LoginComponent } from './login/login.component'; +import { StoreModule } from '@ngrx/store'; +import { reducers } from '../reducers'; +import { StoreDevtoolsModule } from '@ngrx/store-devtools'; +import { EffectsModule } from '@ngrx/effects'; +import { ProfileService } from './profile/profile.service'; const appRoutes: Routes = [ {path: 'profile', component: ViewProfileComponent}, @@ -30,7 +35,10 @@ const appRoutes: Routes = [ BrowserModule, HttpModule, FormsModule, - AppRoutingModule + AppRoutingModule, + StoreModule.forRoot(reducers), + StoreDevtoolsModule.instrument(), + EffectsModule.forRoot([ProfileService]) // RouterModule.forRoot(appRoutes) ], providers: [], diff --git a/src/app/authentication.guard.ts b/src/app/authentication.guard.ts index 5457e4f..262167d 100644 --- a/src/app/authentication.guard.ts +++ b/src/app/authentication.guard.ts @@ -18,7 +18,6 @@ export class AuthenticationGuard implements CanActivate { }); } canActivate() { - console.log(this.token); if (localStorage.getItem('token')) { return true; } diff --git a/src/app/profile/profile.component.ts b/src/app/profile/profile.component.ts index 415fc14..ab13b0b 100644 --- a/src/app/profile/profile.component.ts +++ b/src/app/profile/profile.component.ts @@ -1,7 +1,10 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { ProfileService } from './profile.service'; -import {UserProfile } from './user-profile'; -import {Router} from '@angular/router'; +import { UserProfile } from '../user-profile'; +import { Router } from '@angular/router'; +import { Store } from '@ngrx/store'; +import { State } from '../../reducers' + @Component({ selector: 'app-profile', @@ -10,17 +13,20 @@ import {Router} from '@angular/router'; providers: [ProfileService] }) export class EditProfileComponent implements OnInit { - private userProfile: UserProfile; + public userProfile: UserProfile; - constructor(private profileService: ProfileService, private router: Router) { + constructor(private profileService: ProfileService, private store: Store) { this.userProfile = new UserProfile(); + store + .select('userProfile') + .subscribe((userProfile: UserProfile) => this.userProfile = userProfile) } - ngOnInit() { - this.profileService.getProfile('0').then(user => this.userProfile = user); + ngOnInit() { + this.store.dispatch({ type: 'FETCH_USER' }) } submit() { - this.profileService.postProfile('0', this.userProfile).then(userProfile => this.userProfile = userProfile); + this.store.dispatch({ type: 'POST_USER', payload: { name: this.userProfile.name, age: this.userProfile.age }}) } } diff --git a/src/app/profile/profile.service.ts b/src/app/profile/profile.service.ts index 822c4e7..31e2190 100644 --- a/src/app/profile/profile.service.ts +++ b/src/app/profile/profile.service.ts @@ -1,29 +1,35 @@ -import { UserProfile } from './user-profile'; +import { UserProfile } from '../user-profile'; import { Injectable } from '@angular/core'; import { Http, RequestOptions, Headers} from '@angular/http'; -import 'rxjs/add/operator/toPromise'; +import { Action } from '@ngrx/store'; +import { Actions, Effect, toPayload } from '@ngrx/effects'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/mergeMap'; @Injectable() export class ProfileService { - constructor(private http: Http) { } + constructor(private http: Http, private actions$: Actions) { } - getProfile(id: String): Promise { - const headers = new Headers({ 'Authorization': 'Bearer ' + localStorage.getItem('token') }); - const options = new RequestOptions({ headers: headers }); - return this.http.get(`http://localhost:3000/user/${id}`, options) - .toPromise() - .then(response => response.json()) - .catch(err => console.log(err)); - } + @Effect() fetchUser$: Observable = this.actions$.ofType('FETCH_USER') + .map(toPayload) + .mergeMap(payload => { + const headers = new Headers({ 'Authorization': `Bearer ${localStorage.getItem('token')}` }); + const options = new RequestOptions({ headers: headers }); + return this.http.get(`http://localhost:3000/user/0`, options) + .map(response => response.json()) + .map(data => ({ type: 'RECEIVE_USER', payload: data })) + }) - postProfile(id: String, profile: UserProfile): Promise { - const headers = new Headers({ 'Authorization': 'Bearer ' + localStorage.getItem('token') }); - const options = new RequestOptions({ headers: headers }); - return this.http.post(`http://localhost:3000/user/${id}`, {...profile}, options) - .toPromise() - .then(response => response.json()) - .catch(err => console.log(err)); - } + @Effect() postUser$: Observable = this.actions$.ofType('POST_USER') + .map(toPayload) + .mergeMap(payload => { + const headers = new Headers({ 'Authorization': `Bearer ${localStorage.getItem('token')}` }); + const options = new RequestOptions({ headers: headers }); + return this.http.post(`http://localhost:3000/user/0`, payload, options) + .map(response => response.json()) + .map(data => ({ type: 'RECEIVE_USER', payload: data })) + }) -} +} \ No newline at end of file diff --git a/src/app/profile/view-profile.component.ts b/src/app/profile/view-profile.component.ts index 9890203..6f87c16 100644 --- a/src/app/profile/view-profile.component.ts +++ b/src/app/profile/view-profile.component.ts @@ -1,8 +1,11 @@ import { AuthenticationGuard } from './../authentication.guard'; import { Component, OnInit } from '@angular/core'; import { ProfileService } from './profile.service'; -import {UserProfile } from './user-profile'; +import {UserProfile } from '../user-profile'; import {Router} from '@angular/router'; +import { Store } from '@ngrx/store'; +import { State } from '../../reducers' + @Component({ selector: 'app-view-profile', @@ -13,12 +16,15 @@ export class ViewProfileComponent implements OnInit { private userProfile: UserProfile; title = 'Profile'; - constructor(private profileService: ProfileService, private authenticationGuard: AuthenticationGuard, private router: Router) { + constructor(private profileService: ProfileService, private authenticationGuard: AuthenticationGuard, private router: Router, private store: Store) { this.userProfile = new UserProfile(); + store + .select('userProfile') + .subscribe((userProfile: UserProfile) => this.userProfile = userProfile) } ngOnInit() { - this.profileService.getProfile('0').then(user => this.userProfile = user); + this.store.dispatch({ type: 'FETCH_USER' }) } diff --git a/src/app/profile/user-profile.ts b/src/app/user-profile.ts similarity index 100% rename from src/app/profile/user-profile.ts rename to src/app/user-profile.ts diff --git a/src/reducers/index.ts b/src/reducers/index.ts new file mode 100644 index 0000000..8afaaf7 --- /dev/null +++ b/src/reducers/index.ts @@ -0,0 +1,11 @@ +import { ActionReducerMap } from '@ngrx/store' +import * as userProfile from './userProfileReducer' + + +export interface State { + userProfile: userProfile.State; +} + +export const reducers: ActionReducerMap = { + userProfile: userProfile.reducer +} \ No newline at end of file diff --git a/src/reducers/userProfileReducer.ts b/src/reducers/userProfileReducer.ts new file mode 100644 index 0000000..e58d95e --- /dev/null +++ b/src/reducers/userProfileReducer.ts @@ -0,0 +1,23 @@ +import { RECEIVE_USER, UPDATE_NAME, UPDATE_AGE, Actions } from '../actions' + + +export interface State { + id: number + name: string + age: number +} + +const initalState = { id: 0, name: '', age: 0} + +export function reducer(state: State = initalState, action: Actions): State { + switch (action.type) { + case RECEIVE_USER: + return action.payload + case UPDATE_NAME: + return Object.assign({}, state, { name: action.payload }) + case UPDATE_AGE: + return Object.assign({}, state, { age: action.payload }) + default: + return state + } +} \ No newline at end of file