From a83b518a7a16d93f207bab8ec5c54c14c9493e23 Mon Sep 17 00:00:00 2001 From: transtrike Date: Sun, 20 Dec 2020 10:44:58 +0200 Subject: Removed Razor, added Angular --- src/DevHive.Angular/package.json | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/DevHive.Angular/package.json (limited to 'src/DevHive.Angular/package.json') diff --git a/src/DevHive.Angular/package.json b/src/DevHive.Angular/package.json new file mode 100644 index 0000000..97aa53a --- /dev/null +++ b/src/DevHive.Angular/package.json @@ -0,0 +1,45 @@ +{ + "name": "angular", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "~11.0.5", + "@angular/common": "~11.0.5", + "@angular/compiler": "~11.0.5", + "@angular/core": "~11.0.5", + "@angular/forms": "~11.0.5", + "@angular/platform-browser": "~11.0.5", + "@angular/platform-browser-dynamic": "~11.0.5", + "@angular/router": "~11.0.5", + "rxjs": "~6.6.0", + "tslib": "^2.0.0", + "zone.js": "~0.10.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1100.5", + "@angular/cli": "~11.0.5", + "@angular/compiler-cli": "~11.0.5", + "@types/jasmine": "~3.6.0", + "@types/node": "^12.11.1", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.6.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~5.1.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.0.3", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.5.0", + "protractor": "~7.0.0", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "~4.0.2" + } +} -- cgit v1.2.3 From 5c89f9eeb0fabce0510dc7824e37649b731e162f Mon Sep 17 00:00:00 2001 From: transtrike Date: Thu, 7 Jan 2021 23:07:48 +0200 Subject: Trying to implement create-user model --- src/DevHive.Angular/package-lock.json | 59 ++++++++++++---------- src/DevHive.Angular/package.json | 19 +++---- src/DevHive.Angular/src/app/app.component.html | 2 +- .../src/app/login/login.component.html | 38 ++++++-------- src/DevHive.Angular/src/index.html | 5 +- .../src/models/identity/register-user.ts | 37 ++++++++++++++ src/DevHive.Angular/src/models/identity/user.ts | 15 ++++++ src/DevHive.code-workspace | 3 ++ 8 files changed, 116 insertions(+), 62 deletions(-) create mode 100644 src/DevHive.Angular/src/models/identity/register-user.ts create mode 100644 src/DevHive.Angular/src/models/identity/user.ts (limited to 'src/DevHive.Angular/package.json') diff --git a/src/DevHive.Angular/package-lock.json b/src/DevHive.Angular/package-lock.json index 130dad8..3c9f354 100644 --- a/src/DevHive.Angular/package-lock.json +++ b/src/DevHive.Angular/package-lock.json @@ -140,9 +140,9 @@ } }, "@angular/animations": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.0.5.tgz", - "integrity": "sha512-ghE/xDTYuEWkKNZtioH9JBrSlux0MLHzWoE7tNP+XMaplt80lCm979vWsEBO3/xpQLRmRlGPul6RacCAoeqogg==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.0.6.tgz", + "integrity": "sha512-PRlb2JogxrFJTySO5eBUGe2Oy+I7AW/1XynumH1JeBtCzYRizGxtj8Ekb9wRAT5ijWAcbOzW7rT4HFUNsVwh2g==", "requires": { "tslib": "^2.0.0" } @@ -203,25 +203,25 @@ } }, "@angular/common": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.5.tgz", - "integrity": "sha512-aoXdTkoni65LWhrPKNsAiOnO70XFaTaisO+K8ZYMpciMTTAxHx3hFCF9sj4a+Bo3M1a5UDjpsFDYMeGgJOkmFA==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.6.tgz", + "integrity": "sha512-zFuqCEn9UGQbMKPbBhCyo8McJs21EIlYsqXgQo62SQkIGVBlzfWnkkJuAXv8DNWN70yb1QHarZWW+6Y1CKFDGw==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.5.tgz", - "integrity": "sha512-japxEn07P9z9FnW8ii+M5DIfgRAGNxl6QNQWKBkNo5ytN6iCAB7pVbJI0vn1AUT9TByV3+xDW/FNuoSuzsnX3w==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.6.tgz", + "integrity": "sha512-Scfaowc13HrFr37O05ZwUU6xk25D7DUgzwLTCTCCEM++HMkoWMV44xVzCkx3nBojGN9CgXaOSe0tBkYnDl8WOA==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.5.tgz", - "integrity": "sha512-1EbnDdK2Em9xpnbLCjw+9w2F0I6gl5AS6QAn03ztYX9ZooNzCeC6sT8qghzrNTFTV89nyIoAqyMtgcLS6udVkg==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.6.tgz", + "integrity": "sha512-2rozDjBsHA1DGdwgdqo/cFFg+Rvuy99HaUjE060uqxlZ9QZLwxOJR1RxrScsebuEwPfqrOHzc9tK6lGOzBC0Sw==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -329,41 +329,41 @@ } }, "@angular/core": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.5.tgz", - "integrity": "sha512-XAXWQi7R3ucZXQwx9QK5jSKJeQyRJ53u2dQDpr7R5stzeCy1a5hrNOkZLg9zOTTPcth/6+FrOrRZP9SMdxtw3w==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.6.tgz", + "integrity": "sha512-npPTnFDldcxuDKFg5fJaFOsWvP4DjCRU2pOk83ck8XTzLwvkD3jfn4zPTpvYSFFyxvXHb2IPTMjx8Jy0AZoVvA==", "requires": { "tslib": "^2.0.0" } }, "@angular/forms": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.5.tgz", - "integrity": "sha512-2zB1IuqYNJrjh7Og9J8f/AtjX3NHc3VVbt0rPw35ghqIU3aQLpOichdQ1y5QvMWic1UzZ7SjWXDU7RpKbm4iUA==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.6.tgz", + "integrity": "sha512-fKKAZgmmNA6GGwx39v1mPqifg6JmlrZdAg5JzOw1G7YWKUoDJcZEWwkI+bK7DsnWnDQ5Bu0ZH9HTJJvKt7ZG1Q==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.5.tgz", - "integrity": "sha512-173JZHF3QS78hEscBxFZ/kX8KLjdaDhfAYi4Sh8daIKNUcDcyhqEy7wpAjWmCwdspL1QUtWKCrhZqrEVNGTpvA==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.6.tgz", + "integrity": "sha512-A4b+l0k01Axf6aAEFsHteJ4HUbJHF6q0gZjjpyCe2+YUuEuqXLkls+Ba452Z0L88bzUclsYqju1lkDGBnykFXg==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.5.tgz", - "integrity": "sha512-MFjpQcqkHOu8iTUMKVG6vfuOHwrRlgPBvkNucEbtXhTTYNlsw2mprxfUODYEu26EBUAh+FGttu8ZjclUGw4bVg==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.6.tgz", + "integrity": "sha512-w3UK0OG0xdDbzZH2WMewNBYiVtjsRdPLjzmRxPe6Ymx9ltAYB7QLZN0qXC2QzmsQEjtbDw/QbI2DSWTc6ergag==", "requires": { "tslib": "^2.0.0" } }, "@angular/router": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.5.tgz", - "integrity": "sha512-mSD4tbzuFH4uBb9vxPQHBUbkIMoWAfVUb7r9gtn3/deOxQbVh08f2gk2iWDN3OQLAa5mNHswuLByAYSw2rPbMA==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.6.tgz", + "integrity": "sha512-MOf0+gGzkBamh3GlTLWoUE7l9QQGHRFB7R7Mpr/NGI3fRd+XK3OTw3aXj0pVxZ0MX90+Cfuf0n2PInn9NN0sRQ==", "requires": { "tslib": "^2.0.0" } @@ -5267,6 +5267,11 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, + "guid-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", + "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", diff --git a/src/DevHive.Angular/package.json b/src/DevHive.Angular/package.json index 97aa53a..3a5d30e 100644 --- a/src/DevHive.Angular/package.json +++ b/src/DevHive.Angular/package.json @@ -11,14 +11,15 @@ }, "private": true, "dependencies": { - "@angular/animations": "~11.0.5", - "@angular/common": "~11.0.5", - "@angular/compiler": "~11.0.5", - "@angular/core": "~11.0.5", - "@angular/forms": "~11.0.5", - "@angular/platform-browser": "~11.0.5", - "@angular/platform-browser-dynamic": "~11.0.5", - "@angular/router": "~11.0.5", + "@angular/animations": "~11.0.6", + "@angular/common": "~11.0.6", + "@angular/compiler": "~11.0.6", + "@angular/core": "~11.0.6", + "@angular/forms": "~11.0.6", + "@angular/platform-browser": "~11.0.6", + "@angular/platform-browser-dynamic": "~11.0.6", + "@angular/router": "~11.0.6", + "guid-typescript": "^1.0.9", "rxjs": "~6.6.0", "tslib": "^2.0.0", "zone.js": "~0.10.2" @@ -26,7 +27,7 @@ "devDependencies": { "@angular-devkit/build-angular": "~0.1100.5", "@angular/cli": "~11.0.5", - "@angular/compiler-cli": "~11.0.5", + "@angular/compiler-cli": "~11.0.6", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "codelyzer": "^6.0.0", diff --git a/src/DevHive.Angular/src/app/app.component.html b/src/DevHive.Angular/src/app/app.component.html index eedbbc8..ea11f83 100644 --- a/src/DevHive.Angular/src/app/app.component.html +++ b/src/DevHive.Angular/src/app/app.component.html @@ -2,4 +2,4 @@ - + diff --git a/src/DevHive.Angular/src/app/login/login.component.html b/src/DevHive.Angular/src/app/login/login.component.html index bb383e3..5fd3c3c 100644 --- a/src/DevHive.Angular/src/app/login/login.component.html +++ b/src/DevHive.Angular/src/app/login/login.component.html @@ -1,23 +1,15 @@ - - - - - - DevHive - Login - - -
-
- Login -
-
- - -
-
- Continue - -
-
- - +
+
+ Login +
+
+
+ + +
+
+
+ Continue + +
+
\ No newline at end of file diff --git a/src/DevHive.Angular/src/index.html b/src/DevHive.Angular/src/index.html index aa06306..f41ff62 100644 --- a/src/DevHive.Angular/src/index.html +++ b/src/DevHive.Angular/src/index.html @@ -2,12 +2,13 @@ - Angular + - + + \ No newline at end of file diff --git a/src/DevHive.Angular/src/models/identity/register-user.ts b/src/DevHive.Angular/src/models/identity/register-user.ts new file mode 100644 index 0000000..f96b8bb --- /dev/null +++ b/src/DevHive.Angular/src/models/identity/register-user.ts @@ -0,0 +1,37 @@ +export class RegisterUser +{ + private _userName: string; + private _password: string; + + // constructor(userName: string, password: string) + // { + // this.userName = userName; + // this.password = password; + // } + + public get userName() + { + return this._userName; + } + + public set userName(userName: string) + { + if (userName.length <= 3) + throw new Error('Username cannot be less than 3 characters long!'); + + this._userName = userName; + } + + public get password() + { + return this._password; + } + + public set password(pass: string) + { + if (pass.length <= 5) + throw Error("Password too short!"); + + this._password = pass; + } +} diff --git a/src/DevHive.Angular/src/models/identity/user.ts b/src/DevHive.Angular/src/models/identity/user.ts new file mode 100644 index 0000000..7fcda42 --- /dev/null +++ b/src/DevHive.Angular/src/models/identity/user.ts @@ -0,0 +1,15 @@ +import { Guid } from "guid-typescript"; + +export class User { + private id: Guid; + private userName: string; + private firstName: string; + private lastName: string; + + constructor(id: Guid, userName: string, firstName: string, lastName: string) { + this.id = id; + this.userName = userName; + this.firstName = firstName; + this.lastName = lastName; + } +} diff --git a/src/DevHive.code-workspace b/src/DevHive.code-workspace index 9ee0259..08b1262 100644 --- a/src/DevHive.code-workspace +++ b/src/DevHive.code-workspace @@ -28,6 +28,9 @@ "**/obj": true, ".gitignore" : true, + + "**/node_modules" : true, + "e2e" : true, }, "code-runner.fileDirectoryAsCwd": true, "compile-hero.disable-compile-files-on-did-save-code": true -- cgit v1.2.3 From 514ea5a52bbe25bc9162929865a6dcd0b8e601a6 Mon Sep 17 00:00:00 2001 From: transtrike Date: Fri, 8 Jan 2021 21:36:10 +0200 Subject: Register component done with Angular-Material --- src/DevHive.Angular/angular.json | 2 + src/DevHive.Angular/package-lock.json | 303 ++++++++++++--------- src/DevHive.Angular/package.json | 30 +- src/DevHive.Angular/src/app/app.component.css | 2 +- src/DevHive.Angular/src/app/app.component.html | 4 +- src/DevHive.Angular/src/app/app.module.ts | 10 +- .../app/components/login/login.component.spec.ts | 25 -- .../app/components/register/register.component.css | 66 ++--- .../components/register/register.component.html | 53 +++- .../components/register/register.component.spec.ts | 25 -- .../app/components/register/register.component.ts | 22 +- src/DevHive.Angular/src/index.html | 4 +- src/DevHive.Angular/src/reset.css | 25 +- src/DevHive.Angular/src/styles.css | 1 + 14 files changed, 308 insertions(+), 264 deletions(-) delete mode 100644 src/DevHive.Angular/src/app/components/login/login.component.spec.ts delete mode 100644 src/DevHive.Angular/src/app/components/register/register.component.spec.ts (limited to 'src/DevHive.Angular/package.json') diff --git a/src/DevHive.Angular/angular.json b/src/DevHive.Angular/angular.json index 346be6f..c4b2bf6 100644 --- a/src/DevHive.Angular/angular.json +++ b/src/DevHive.Angular/angular.json @@ -28,6 +28,7 @@ "src/assets" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [] @@ -91,6 +92,7 @@ "src/assets" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [] diff --git a/src/DevHive.Angular/package-lock.json b/src/DevHive.Angular/package-lock.json index 3c9f354..10b35ce 100644 --- a/src/DevHive.Angular/package-lock.json +++ b/src/DevHive.Angular/package-lock.json @@ -5,25 +5,25 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.1100.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1100.5.tgz", - "integrity": "sha512-yOYfucNouc1doTbcGbCNMXGMSc36+j97XpdNoeGyzFQ7GwezLAro0a9gxc5PdOxndfelkND7J1JuOjxdW5O17A==", + "version": "0.1100.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1100.6.tgz", + "integrity": "sha512-4O+cg3AimI2bNAxxdu5NrqSf4Oa8r8xL0+G2Ycd3jLoFv0h0ecJiNKEG5F6IpTprb4aexZD6pcxBJCqQ8MmzWQ==", "dev": true, "requires": { - "@angular-devkit/core": "11.0.5", + "@angular-devkit/core": "11.0.6", "rxjs": "6.6.3" } }, "@angular-devkit/build-angular": { - "version": "0.1100.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1100.5.tgz", - "integrity": "sha512-lJYsnBImBAqUAIVC2qGY64UaC2uWOPZEpSWjYUxkRZA/c4IVCJj3M12CgONBjtcKYzFVXc1eojhrScukGIJJcg==", + "version": "0.1100.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1100.6.tgz", + "integrity": "sha512-HcqsWiSIUxExGg3HRQScLOmF+ckVkCKolfpPcNOCCpBYxH/i8n4wDGLBP5Rtxky+0Qz+3nnAaFIpNb9p9aUmbg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1100.5", - "@angular-devkit/build-optimizer": "0.1100.5", - "@angular-devkit/build-webpack": "0.1100.5", - "@angular-devkit/core": "11.0.5", + "@angular-devkit/architect": "0.1100.6", + "@angular-devkit/build-optimizer": "0.1100.6", + "@angular-devkit/build-webpack": "0.1100.6", + "@angular-devkit/core": "11.0.6", "@babel/core": "7.12.3", "@babel/generator": "7.12.1", "@babel/plugin-transform-runtime": "7.12.1", @@ -31,7 +31,7 @@ "@babel/runtime": "7.12.1", "@babel/template": "7.10.4", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "11.0.5", + "@ngtools/webpack": "11.0.6", "ansi-colors": "4.1.1", "autoprefixer": "9.8.6", "babel-loader": "8.1.0", @@ -92,9 +92,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.1100.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.5.tgz", - "integrity": "sha512-aKITFuiydR681eS1z84EIdOtqdxP/V5xGZuF3xjGmg5Ddwv36PweAHaCVJEB4btHSWH6uxMvW2hLXg2RTWbRNg==", + "version": "0.1100.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.6.tgz", + "integrity": "sha512-Qkq7n6510N+nXmfZqpqpI0I6Td+b+06RRNmS7KftSNJntU1z5QYh4FggwlthZ5P0QUT92cnBQsnT8OgYqGnwbg==", "dev": true, "requires": { "loader-utils": "2.0.0", @@ -102,23 +102,31 @@ "tslib": "2.0.3", "typescript": "4.0.5", "webpack-sources": "2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + } } }, "@angular-devkit/build-webpack": { - "version": "0.1100.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1100.5.tgz", - "integrity": "sha512-oD5t2oCfyiCyyeZckrqBnQco94zIMkRnRGzy3lFDH7KMiL0DG9l7x3nxn9H0YunYWr55LsGWwXGoR7l03Kl+jw==", + "version": "0.1100.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1100.6.tgz", + "integrity": "sha512-kK0FlpYJHP25o1yzIGHQqIvO5kp+p6V5OwGpD2GGRZLlJqd3WdjY5DxnyZoX3/IofO6KsTnmm76fzTRqc62z/Q==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1100.5", - "@angular-devkit/core": "11.0.5", + "@angular-devkit/architect": "0.1100.6", + "@angular-devkit/core": "11.0.6", "rxjs": "6.6.3" } }, "@angular-devkit/core": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.5.tgz", - "integrity": "sha512-hwV8fjF8JNPJkiVWw8MNzeIfDo01aD/OAOlC4L5rQnVHn+i2EiU3brSDmFqyeHPPV3h/QjuBkS3tkN7gSnVWaQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.6.tgz", + "integrity": "sha512-nhvU5hH01r9qcexAqvIFU233treWWeW3ncs9UFYjD9Hys9sDSvqC3+bvGvl9vCG5FsyY7oDsjaVAipyUc+SFAg==", "dev": true, "requires": { "ajv": "6.12.6", @@ -129,35 +137,52 @@ } }, "@angular-devkit/schematics": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.0.5.tgz", - "integrity": "sha512-0NKGC8Nf/4vvDpWKB7bwxIazvNnNHnZBX6XlyBXNl+fW8tpTef3PNMJMSErTz9LFnuv61vsKbc36u/Ek2YChWg==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.0.6.tgz", + "integrity": "sha512-hCyu/SSSiC6dKl/NxdWctknIrBqKR6pRe7DMArWowrZX6P9oi36LpKEFnKutE8+tXjsOqQj8XMBq9L64sXZWqg==", "dev": true, "requires": { - "@angular-devkit/core": "11.0.5", + "@angular-devkit/core": "11.0.6", "ora": "5.1.0", "rxjs": "6.6.3" } }, "@angular/animations": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.0.6.tgz", - "integrity": "sha512-PRlb2JogxrFJTySO5eBUGe2Oy+I7AW/1XynumH1JeBtCzYRizGxtj8Ekb9wRAT5ijWAcbOzW7rT4HFUNsVwh2g==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.0.7.tgz", + "integrity": "sha512-P3cluDGIsaj7vqvqIGW7xFCIXWa1lJDsHsmY3Fexk+ZVCncokftp5ZUANb2+DwOD3BPgd/WjBdXVjwzFQFsoVA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/cdk": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.0.3.tgz", + "integrity": "sha512-hgbJXvZURKBnZawwxUrsZE/3a+HCJh2UhoLIng3cn5Q+WIW/4a37knDl8B9DYKBWrCqeINXNcUHVSKkWc/gjCA==", "requires": { + "parse5": "^5.0.0", "tslib": "^2.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + } } }, "@angular/cli": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.0.5.tgz", - "integrity": "sha512-k4j/2z7qkuigJ1shH0McW1wW63clhrbrg98FK4/KWhU/sce5AgVjuHDQFycAclTwHesf7Vs6Gzt7zGlqUmeKIg==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.0.6.tgz", + "integrity": "sha512-bwrXXyU23HjUlFl0CNCU+XMGa/enooqpMLcTAA15StVpKFHyaA4c57il/aqu+1IuB+zR6rGDzhAABuvRcHd+mQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1100.5", - "@angular-devkit/core": "11.0.5", - "@angular-devkit/schematics": "11.0.5", - "@schematics/angular": "11.0.5", - "@schematics/update": "0.1100.5", + "@angular-devkit/architect": "0.1100.6", + "@angular-devkit/core": "11.0.6", + "@angular-devkit/schematics": "11.0.6", + "@schematics/angular": "11.0.6", + "@schematics/update": "0.1100.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.2.0", @@ -203,25 +228,25 @@ } }, "@angular/common": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.6.tgz", - "integrity": "sha512-zFuqCEn9UGQbMKPbBhCyo8McJs21EIlYsqXgQo62SQkIGVBlzfWnkkJuAXv8DNWN70yb1QHarZWW+6Y1CKFDGw==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.7.tgz", + "integrity": "sha512-9VuT9qrSP7Q91Wp276DDieCIZiTBrpLNoJzK/RygQShTymCVPg4Dsl3tQUKaHBPx9MexeqRG/HjN02DVpeqtsA==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.6.tgz", - "integrity": "sha512-Scfaowc13HrFr37O05ZwUU6xk25D7DUgzwLTCTCCEM++HMkoWMV44xVzCkx3nBojGN9CgXaOSe0tBkYnDl8WOA==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.7.tgz", + "integrity": "sha512-U+aGn6lP3iB184D2Z+OSK5vCwNtxtsF59T7nNJBMCCwcN7Qc5tfDBbSj1GI11XrIiuuoOxXbAp9BKS0dAyNCWw==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.6.tgz", - "integrity": "sha512-2rozDjBsHA1DGdwgdqo/cFFg+Rvuy99HaUjE060uqxlZ9QZLwxOJR1RxrScsebuEwPfqrOHzc9tK6lGOzBC0Sw==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.7.tgz", + "integrity": "sha512-04agqIPmw1exMeZjJmRzeYFgTEXYJ7gKD8TZipsGlu99uU/NQJIsetpzR7/bhPAKDH6YO0p/uavxV0nRpSTIQw==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -329,41 +354,49 @@ } }, "@angular/core": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.6.tgz", - "integrity": "sha512-npPTnFDldcxuDKFg5fJaFOsWvP4DjCRU2pOk83ck8XTzLwvkD3jfn4zPTpvYSFFyxvXHb2IPTMjx8Jy0AZoVvA==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.7.tgz", + "integrity": "sha512-Kj5uRZoK5+xfMTjkP3tw8oIF5hKTnoF9Bwh5m9GUKqg1wHVKOJcT5JBIEMc8qPyiFgALREA01reIzQdGMjX36A==", "requires": { "tslib": "^2.0.0" } }, "@angular/forms": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.6.tgz", - "integrity": "sha512-fKKAZgmmNA6GGwx39v1mPqifg6JmlrZdAg5JzOw1G7YWKUoDJcZEWwkI+bK7DsnWnDQ5Bu0ZH9HTJJvKt7ZG1Q==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.7.tgz", + "integrity": "sha512-+3A+SciMyHTdUwkKUz4XzC1DSYexQEbFLe0PKQIFSFOROmbssjnWJv7yO2HbzCpGa7oGKPYNlE5twYWyLxpvFg==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/material": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-11.0.3.tgz", + "integrity": "sha512-YTHmtKGwjAEFAOOmuivcwnINMPHxvM7iZQpTgZqDKNiqiv53cwry2Ctb54suRNT+D794z59D0/r+YocGkzFv3w==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.6.tgz", - "integrity": "sha512-A4b+l0k01Axf6aAEFsHteJ4HUbJHF6q0gZjjpyCe2+YUuEuqXLkls+Ba452Z0L88bzUclsYqju1lkDGBnykFXg==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.7.tgz", + "integrity": "sha512-W8Wt8jMUjcbpqGtqrNWAj0p7CLdjOxgVlbrgBXTbaoqdchvXH85YzGr7ohA3MuE61H90OcVK9OhfYQk5o6joSg==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.6.tgz", - "integrity": "sha512-w3UK0OG0xdDbzZH2WMewNBYiVtjsRdPLjzmRxPe6Ymx9ltAYB7QLZN0qXC2QzmsQEjtbDw/QbI2DSWTc6ergag==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.7.tgz", + "integrity": "sha512-pUXCum1Z2DZV/34WR4Vfmkc5nWxbmVdwAA9pXbAarwAYqHIqOzX8rpRaHsuHBAR+SK+VH+xjproeLgsVfV8FSA==", "requires": { "tslib": "^2.0.0" } }, "@angular/router": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.6.tgz", - "integrity": "sha512-MOf0+gGzkBamh3GlTLWoUE7l9QQGHRFB7R7Mpr/NGI3fRd+XK3OTw3aXj0pVxZ0MX90+Cfuf0n2PInn9NN0sRQ==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.7.tgz", + "integrity": "sha512-oh/MOPRSOCLRPsM/3CVUNYZ3pz3g+CzLOk5Vad/zFJmnGwjA/lQGJo2pl7VXVq3RF7MieaHlDWG5TexGlXAP5w==", "requires": { "tslib": "^2.0.0" } @@ -717,9 +750,9 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", + "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -987,9 +1020,9 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz", - "integrity": "sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", + "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1472,39 +1505,39 @@ } }, "@ngtools/webpack": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.0.5.tgz", - "integrity": "sha512-hM0LdOSlC6c7ij+BvIpAFbe7dpJhL+A51L5v6YbMA6aM0Sb/y+HpE2u34AHEQvute7cLe4EyOyvJ9jSinVAJhQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.0.6.tgz", + "integrity": "sha512-vf5YNEpXWRa0fKC/BRq5sVVj2WnEqW8jn14YQRHwVt5ppUeyu8IKUF69p6W1MwZMgMqMaw/vPQ8LI5cFbyf3uw==", "dev": true, "requires": { - "@angular-devkit/core": "11.0.5", + "@angular-devkit/core": "11.0.6", "enhanced-resolve": "5.3.1", "webpack-sources": "2.0.1" } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, @@ -1526,24 +1559,24 @@ } }, "@schematics/angular": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.0.5.tgz", - "integrity": "sha512-7p2wweoJYhim8YUy3ih1SrPGqRsa6+aEFbYgo9v4zt7b3tOva8SvkbC2alayK74fclzQ7umqa6xAwvWhy8ORvg==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.0.6.tgz", + "integrity": "sha512-XUcpOrlcp55PBHrgpIVx69lnhDY6ro35BSRmqNmjXik56qcOkfvdki8vvyW9EsWvu9/sfBSsVDdparlbVois7w==", "dev": true, "requires": { - "@angular-devkit/core": "11.0.5", - "@angular-devkit/schematics": "11.0.5", + "@angular-devkit/core": "11.0.6", + "@angular-devkit/schematics": "11.0.6", "jsonc-parser": "2.3.1" } }, "@schematics/update": { - "version": "0.1100.5", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1100.5.tgz", - "integrity": "sha512-BYtKKuiWsrlc4FMW3bRyl4tm6lWNMTi8oql/mtkSgH7V5eMmaLDJtM+zDl+qyC/KHPxbHTfoHDapfv1tITSWjA==", + "version": "0.1100.6", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1100.6.tgz", + "integrity": "sha512-+B8n+k+zZ3VYOhjNBsLqzjp8O9ZdUWgdpf9L8XAA7mh/oPwufXpExyEc66uAS07imvUMmjz6i8E2eNWV/IjBJg==", "dev": true, "requires": { - "@angular-devkit/core": "11.0.5", - "@angular-devkit/schematics": "11.0.5", + "@angular-devkit/core": "11.0.6", + "@angular-devkit/schematics": "11.0.6", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.6", "npm-package-arg": "^8.0.0", @@ -1581,9 +1614,9 @@ "dev": true }, "@types/node": { - "version": "12.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.9.tgz", - "integrity": "sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q==", + "version": "12.19.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.12.tgz", + "integrity": "sha512-UwfL2uIU9arX/+/PRcIkT08/iBadGN2z6ExOROA2Dh5mAuWTBj6iJbQX4nekiV5H8cTrEG569LeX+HRco9Cbxw==", "dev": true }, "@types/parse-json": { @@ -2602,16 +2635,16 @@ } }, "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001165", + "caniuse-lite": "^1.0.30001173", "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", + "electron-to-chromium": "^1.3.634", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^1.1.69" } }, "browserstack": { @@ -2785,9 +2818,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001170", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz", - "integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==", + "version": "1.0.30001173", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", + "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==", "dev": true }, "canonical-path": { @@ -3399,12 +3432,12 @@ "dev": true }, "core-js-compat": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz", - "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", + "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", "dev": true, "requires": { - "browserslist": "^4.15.0", + "browserslist": "^4.16.0", "semver": "7.0.0" }, "dependencies": { @@ -4165,9 +4198,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.629", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz", - "integrity": "sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ==", + "version": "1.3.634", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz", + "integrity": "sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw==", "dev": true }, "elliptic": { @@ -4862,9 +4895,9 @@ "dev": true }, "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -5248,9 +5281,9 @@ "dev": true }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -7627,9 +7660,9 @@ } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "1.1.69", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", + "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==", "dev": true }, "normalize-package-data": { @@ -7676,6 +7709,11 @@ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", "dev": true }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, "npm-bundled": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", @@ -8760,9 +8798,9 @@ } }, "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -10044,6 +10082,11 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "reset-css": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/reset-css/-/reset-css-5.0.1.tgz", + "integrity": "sha512-VyuJdNFfp5x/W6e5wauJM59C02Vs0P22sxzZGhQMPaqu/NGTeFxlBFOOw3eq9vQd19gIDdZp7zi89ylyKOJ33Q==" + }, "resolve": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", @@ -11586,9 +11629,9 @@ "dev": true }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -11826,9 +11869,9 @@ "dev": true }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, "tslint": { "version": "6.1.3", diff --git a/src/DevHive.Angular/package.json b/src/DevHive.Angular/package.json index 3a5d30e..833c257 100644 --- a/src/DevHive.Angular/package.json +++ b/src/DevHive.Angular/package.json @@ -11,25 +11,29 @@ }, "private": true, "dependencies": { - "@angular/animations": "~11.0.6", - "@angular/common": "~11.0.6", - "@angular/compiler": "~11.0.6", - "@angular/core": "~11.0.6", - "@angular/forms": "~11.0.6", - "@angular/platform-browser": "~11.0.6", - "@angular/platform-browser-dynamic": "~11.0.6", - "@angular/router": "~11.0.6", + "@angular/animations": "^11.0.7", + "@angular/cdk": "~11.0.2-sha-c6231e19b", + "@angular/common": "^11.0.7", + "@angular/compiler": "^11.0.7", + "@angular/core": "^11.0.7", + "@angular/forms": "^11.0.7", + "@angular/material": "^11.0.3", + "@angular/platform-browser": "^11.0.7", + "@angular/platform-browser-dynamic": "^11.0.7", + "@angular/router": "^11.0.7", "guid-typescript": "^1.0.9", + "normalize.css": "^8.0.1", + "reset-css": "^5.0.1", "rxjs": "~6.6.0", - "tslib": "^2.0.0", + "tslib": "^2.1.0", "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.1100.5", - "@angular/cli": "~11.0.5", - "@angular/compiler-cli": "~11.0.6", + "@angular-devkit/build-angular": "^0.1100.6", + "@angular/cli": "^11.0.6", + "@angular/compiler-cli": "^11.0.7", "@types/jasmine": "~3.6.0", - "@types/node": "^12.11.1", + "@types/node": "^12.19.12", "codelyzer": "^6.0.0", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", diff --git a/src/DevHive.Angular/src/app/app.component.css b/src/DevHive.Angular/src/app/app.component.css index acac3cf..aaebe5b 100644 --- a/src/DevHive.Angular/src/app/app.component.css +++ b/src/DevHive.Angular/src/app/app.component.css @@ -1,4 +1,4 @@ -div { +.main { width: 100%; height: 100%; } diff --git a/src/DevHive.Angular/src/app/app.component.html b/src/DevHive.Angular/src/app/app.component.html index fb45f37..c021c8c 100644 --- a/src/DevHive.Angular/src/app/app.component.html +++ b/src/DevHive.Angular/src/app/app.component.html @@ -1,5 +1,5 @@ -
- +
+
diff --git a/src/DevHive.Angular/src/app/app.module.ts b/src/DevHive.Angular/src/app/app.module.ts index 667ae12..3c7c98b 100644 --- a/src/DevHive.Angular/src/app/app.module.ts +++ b/src/DevHive.Angular/src/app/app.module.ts @@ -1,6 +1,10 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MatInputModule } from '@angular/material/input'; +import { MatButtonModule } from '@angular/material/button'; +import { MatFormFieldModule } from '@angular/material/form-field'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -16,7 +20,11 @@ import { RegisterComponent } from './components/register/register.component'; imports: [ BrowserModule, AppRoutingModule, - ReactiveFormsModule + ReactiveFormsModule, + BrowserAnimationsModule, + MatFormFieldModule, + MatInputModule, + MatButtonModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/DevHive.Angular/src/app/components/login/login.component.spec.ts b/src/DevHive.Angular/src/app/components/login/login.component.spec.ts deleted file mode 100644 index d2c0e6c..0000000 --- a/src/DevHive.Angular/src/app/components/login/login.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LoginComponent } from './login.component'; - -describe('LoginComponent', () => { - let component: LoginComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ LoginComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(LoginComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/DevHive.Angular/src/app/components/register/register.component.css b/src/DevHive.Angular/src/app/components/register/register.component.css index f8b6963..396a27c 100644 --- a/src/DevHive.Angular/src/app/components/register/register.component.css +++ b/src/DevHive.Angular/src/app/components/register/register.component.css @@ -1,56 +1,48 @@ #content { height: 100%; - max-width: 20em; - margin-left: auto; - margin-right: auto; + max-width: 25%; + margin: auto; + margin-top: 10%; display: flex; - align-items: center; - justify-content: center; - flex-direction: column; + flex-wrap: nowrap; + flex-flow: column; } -#title { - font-size: 2em; - font-weight: bold; -} - -#content input[type=text], #content #submit-btn { - border: 2px solid black; - border-radius: 0.4em; - box-sizing: border-box; +#content hr { width: 100%; - margin-top: 0.5em; - font-size: 0.8em; - padding: 0.3em; + border: 1px solid black; + box-sizing: border-box; + margin-top: 2%; + margin-bottom: 2%; } -#content input[type=text]:nth-last-of-type(1) { - margin-bottom: 0.5em; +#content mat-form-field { + width: 100%; } -input[type=text]:focus, button[type=submit]:focus { - outline: 0; +.title { + text-align: center; + font-size: 250%; + font-weight: bold; } -#content hr { +.submit-btn { width: 100%; - border: 1px solid black; - box-sizing: border-box; -} - -#submit-btn { - background-color: black; - color: white; - text-align: center; + background-color: black; + color: white; + text-align: center; + margin-top: 1%; + + border-radius: 10px; } -#submit-btn:hover { - cursor: pointer; - border-color: darkgrey !important; - background-color: darkgrey; +.submit-btn:hover { + cursor: pointer; + border-color: darkgrey; + background-color: darkgrey; } -#submit-btn:active { - transform: scale(0.9); +.submit-btn:active { + transform: scale(0.9); } diff --git a/src/DevHive.Angular/src/app/components/register/register.component.html b/src/DevHive.Angular/src/app/components/register/register.component.html index c701795..ee9c2ba 100644 --- a/src/DevHive.Angular/src/app/components/register/register.component.html +++ b/src/DevHive.Angular/src/app/components/register/register.component.html @@ -1,19 +1,52 @@
-
Register
+

Register


- Value: {{ registerUserFormGroup.value | json }} -
+ + + + First Name* + + + Min length of 3 + + + + + Last Name* + + + Min length of 3 + + + + + Username* + + + Min length of 3 + + + + + Email* + + + You dummy, enter @ + + - - - - - - + + Password* + + You must have at least one number + Min length of 5 + +
- +
diff --git a/src/DevHive.Angular/src/app/components/register/register.component.spec.ts b/src/DevHive.Angular/src/app/components/register/register.component.spec.ts deleted file mode 100644 index f6db869..0000000 --- a/src/DevHive.Angular/src/app/components/register/register.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RegisterComponent } from './register.component'; - -describe('RegisterComponent', () => { - let component: RegisterComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ RegisterComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RegisterComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/DevHive.Angular/src/app/components/register/register.component.ts b/src/DevHive.Angular/src/app/components/register/register.component.ts index 2619353..8f7ea48 100644 --- a/src/DevHive.Angular/src/app/components/register/register.component.ts +++ b/src/DevHive.Angular/src/app/components/register/register.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { Title } from '@angular/platform-browser'; @Component({ @@ -18,26 +18,26 @@ export class RegisterComponent implements OnInit { ngOnInit(): void { this.registerUserFormGroup = this.fb.group({ - firstName: ['', [ + firstName: new FormControl('', [ Validators.required, Validators.minLength(3) - ]], - lastName: ['', [ + ]), + lastName: new FormControl('', [ Validators.required, Validators.minLength(3) - ]], - username: ['', [ + ]), + username: new FormControl('', [ Validators.required, Validators.minLength(3) - ]], - email: ['', [ + ]), + email: new FormControl('', [ Validators.required, Validators.email, - ]], - password: ['', [ + ]), + password: new FormControl('', [ Validators.required, // Add password pattern - ]], + ]), }); this.registerUserFormGroup.valueChanges.subscribe(console.log); diff --git a/src/DevHive.Angular/src/index.html b/src/DevHive.Angular/src/index.html index f41ff62..d488ca9 100644 --- a/src/DevHive.Angular/src/index.html +++ b/src/DevHive.Angular/src/index.html @@ -5,9 +5,11 @@ + + - + diff --git a/src/DevHive.Angular/src/reset.css b/src/DevHive.Angular/src/reset.css index 27acba5..d9ac20b 100644 --- a/src/DevHive.Angular/src/reset.css +++ b/src/DevHive.Angular/src/reset.css @@ -1,15 +1,20 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v5.0.1 | 20191019 + License: none (public domain) +*/ + html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, -dl, dt, dd, ol, ul, li, +dl, dt, dd, menu, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +main, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; @@ -19,14 +24,18 @@ time, mark, audio, video { vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { +article, aside, details, figcaption, figure, +footer, header, hgroup, main, menu, nav, section { display: block; } +/* HTML5 hidden-attribute fix for newer browsers */ +*[hidden] { + display: none; +} body { line-height: 1; } -ol, ul { +menu, ol, ul { list-style: none; } blockquote, q { @@ -40,4 +49,4 @@ q:before, q:after { table { border-collapse: collapse; border-spacing: 0; -} \ No newline at end of file +} diff --git a/src/DevHive.Angular/src/styles.css b/src/DevHive.Angular/src/styles.css index 7dd6a23..9acf23f 100644 --- a/src/DevHive.Angular/src/styles.css +++ b/src/DevHive.Angular/src/styles.css @@ -1,4 +1,5 @@ /* You can add global styles to this file, and also import other style files */ +@import "./reset.css"; html, body { height: 100%; -- cgit v1.2.3 From 8286938d9fb1dc95ac6a456cfdd150a2e9cbb8e5 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 15 Jan 2021 13:42:05 +0200 Subject: Feed now saves the user data and uses it to show the names and username of the user --- src/DevHive.Angular/package-lock.json | 13 +++++++++++ src/DevHive.Angular/package.json | 2 ++ .../src/app/components/feed/feed.component.css | 5 ++++ .../src/app/components/feed/feed.component.html | 4 ++-- .../src/app/components/feed/feed.component.ts | 27 +++++++++++++++++++--- src/DevHive.Angular/src/interfaces/jwt-payload.ts | 3 +++ .../src/interfaces/user-credentials.ts | 5 ++++ 7 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 src/DevHive.Angular/src/interfaces/jwt-payload.ts create mode 100644 src/DevHive.Angular/src/interfaces/user-credentials.ts (limited to 'src/DevHive.Angular/package.json') diff --git a/src/DevHive.Angular/package-lock.json b/src/DevHive.Angular/package-lock.json index 10b35ce..40595d4 100644 --- a/src/DevHive.Angular/package-lock.json +++ b/src/DevHive.Angular/package-lock.json @@ -1607,6 +1607,14 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, + "@types/jwt-decode": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/jwt-decode/-/jwt-decode-3.1.0.tgz", + "integrity": "sha512-tthwik7TKkou3mVnBnvVuHnHElbjtdbM63pdBCbZTirCt3WAdM73Y79mOri7+ljsS99ZVwUFZHLMxJuJnv/z1w==", + "requires": { + "jwt-decode": "*" + } + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -6613,6 +6621,11 @@ "set-immediate-shim": "~1.0.1" } }, + "jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, "karma": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/karma/-/karma-5.1.1.tgz", diff --git a/src/DevHive.Angular/package.json b/src/DevHive.Angular/package.json index 833c257..1f09ab1 100644 --- a/src/DevHive.Angular/package.json +++ b/src/DevHive.Angular/package.json @@ -21,7 +21,9 @@ "@angular/platform-browser": "^11.0.7", "@angular/platform-browser-dynamic": "^11.0.7", "@angular/router": "^11.0.7", + "@types/jwt-decode": "^3.1.0", "guid-typescript": "^1.0.9", + "jwt-decode": "^3.1.2", "normalize.css": "^8.0.1", "reset-css": "^5.0.1", "rxjs": "~6.6.0", diff --git a/src/DevHive.Angular/src/app/components/feed/feed.component.css b/src/DevHive.Angular/src/app/components/feed/feed.component.css index fcfc030..07667c2 100644 --- a/src/DevHive.Angular/src/app/components/feed/feed.component.css +++ b/src/DevHive.Angular/src/app/components/feed/feed.component.css @@ -54,6 +54,11 @@ padding: .5em; } +#profile-bar-name { + text-align: center; + margin-bottom: .5em; +} + /* Top bar */ #top-bar { diff --git a/src/DevHive.Angular/src/app/components/feed/feed.component.html b/src/DevHive.Angular/src/app/components/feed/feed.component.html index de78e59..ffbad14 100644 --- a/src/DevHive.Angular/src/app/components/feed/feed.component.html +++ b/src/DevHive.Angular/src/app/components/feed/feed.component.html @@ -2,10 +2,10 @@
diff --git a/src/DevHive.Angular/src/app/components/feed/feed.component.ts b/src/DevHive.Angular/src/app/components/feed/feed.component.ts index fcf0af4..2889e7f 100644 --- a/src/DevHive.Angular/src/app/components/feed/feed.component.ts +++ b/src/DevHive.Angular/src/app/components/feed/feed.component.ts @@ -1,7 +1,12 @@ import { Component, OnInit } from '@angular/core'; import { Title } from '@angular/platform-browser'; import { Router } from '@angular/router'; +import { Guid } from 'guid-typescript'; +import jwt_decode from 'jwt-decode'; import { FeedService } from 'src/app/services/feed.service'; +import { User } from 'src/models/identity/user'; +import { IJWTPayload } from 'src/interfaces/jwt-payload'; +import { IUserCredentials } from 'src/interfaces/user-credentials'; import { PostComponent } from '../post/post.component'; @Component({ @@ -11,13 +16,17 @@ import { PostComponent } from '../post/post.component'; }) export class FeedComponent implements OnInit { private _title = 'Feed'; + public user: User; public posts: PostComponent[]; constructor(private titleService: Title, private service: FeedService, private router: Router) { this.titleService.setTitle(this._title); - } + } ngOnInit(): void { + // Default values, so it doesn't give an error while initializing + this.user = new User(Guid.createEmpty(), '', '', '', ''); + this.posts = [ new PostComponent(), new PostComponent(), @@ -25,10 +34,22 @@ export class FeedComponent implements OnInit { new PostComponent(), ]; - if (sessionStorage.getItem('UserCred')) { /* TODO: improve token validation */ - /* Make use of the JWT, will be implemented later */ + if (sessionStorage.getItem('UserCred')) { + const jwt: IJWTPayload = JSON.parse(sessionStorage.getItem('UserCred') ?? ''); + const userCred = jwt_decode(jwt.token); + this.saveUserData(userCred.ID, jwt.token); } else { this.router.navigate(['/login']); } } + + saveUserData(userId: Guid, authToken: string): void { + fetch(`http://localhost:5000/api/User?Id=${userId}`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer ' + authToken + } + }).then(response => response.json()).then(data => Object.assign(this.user, data)); + } } diff --git a/src/DevHive.Angular/src/interfaces/jwt-payload.ts b/src/DevHive.Angular/src/interfaces/jwt-payload.ts new file mode 100644 index 0000000..a2d0f0d --- /dev/null +++ b/src/DevHive.Angular/src/interfaces/jwt-payload.ts @@ -0,0 +1,3 @@ +export interface IJWTPayload { + token: string; +} diff --git a/src/DevHive.Angular/src/interfaces/user-credentials.ts b/src/DevHive.Angular/src/interfaces/user-credentials.ts new file mode 100644 index 0000000..d91f715 --- /dev/null +++ b/src/DevHive.Angular/src/interfaces/user-credentials.ts @@ -0,0 +1,5 @@ +import { Guid } from 'guid-typescript'; + +export interface IUserCredentials { + ID: Guid; +} -- cgit v1.2.3 From b9e895aa1bd579696085f52fdf56970736634e87 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 31 Jan 2021 14:20:12 +0200 Subject: Implemented edit post button functionality; fixed edit and create post requests in post service --- src/DevHive.Angular/package-lock.json | 31 +++++++++------ src/DevHive.Angular/package.json | 1 + .../components/post-page/post-page.component.ts | 46 +++++++++++++++++++++- .../src/app/services/post.service.ts | 28 ++++++++++--- 4 files changed, 87 insertions(+), 19 deletions(-) (limited to 'src/DevHive.Angular/package.json') diff --git a/src/DevHive.Angular/package-lock.json b/src/DevHive.Angular/package-lock.json index 40595d4..166d493 100644 --- a/src/DevHive.Angular/package-lock.json +++ b/src/DevHive.Angular/package-lock.json @@ -2216,8 +2216,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -3159,7 +3158,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -4014,8 +4012,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "depd": { "version": "1.1.2", @@ -5114,13 +5111,12 @@ "dev": true }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -7334,14 +7330,12 @@ "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, "requires": { "mime-db": "1.44.0" } @@ -10069,6 +10063,17 @@ "uuid": "^3.3.2" }, "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", diff --git a/src/DevHive.Angular/package.json b/src/DevHive.Angular/package.json index 1f09ab1..967483a 100644 --- a/src/DevHive.Angular/package.json +++ b/src/DevHive.Angular/package.json @@ -22,6 +22,7 @@ "@angular/platform-browser-dynamic": "^11.0.7", "@angular/router": "^11.0.7", "@types/jwt-decode": "^3.1.0", + "form-data": "^3.0.0", "guid-typescript": "^1.0.9", "jwt-decode": "^3.1.2", "normalize.css": "^8.0.1", diff --git a/src/DevHive.Angular/src/app/components/post-page/post-page.component.ts b/src/DevHive.Angular/src/app/components/post-page/post-page.component.ts index 56e146d..3705ae6 100644 --- a/src/DevHive.Angular/src/app/components/post-page/post-page.component.ts +++ b/src/DevHive.Angular/src/app/components/post-page/post-page.component.ts @@ -1,6 +1,11 @@ +import {HttpErrorResponse} from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; +import {FormBuilder, FormControl, FormGroup} from '@angular/forms'; import { Router } from '@angular/router'; import { Guid } from 'guid-typescript'; +import {PostService} from 'src/app/services/post.service'; +import {TokenService} from 'src/app/services/token.service'; +import {Post} from 'src/models/post'; @Component({ selector: 'app-post-page', @@ -8,16 +13,55 @@ import { Guid } from 'guid-typescript'; styleUrls: ['./post-page.component.css'] }) export class PostPageComponent implements OnInit { + public editable = false; + public editingPost = false; public postId: Guid; + public editPostFormGroup: FormGroup; - constructor(private _router: Router) + constructor(private _router: Router, private _fb: FormBuilder, private _tokenService: TokenService, private _postService: PostService) { } ngOnInit(): void { this.postId = Guid.parse(this._router.url.substring(6)); + + // Gets the post and the logged in user and compares them, + // to determine if the current post is made by the user + this._postService.getPostRequest(this.postId).subscribe( + (result: object) => { + const post = result as Post; + this.editable = post.creatorUsername === this._tokenService.getUsernameFromSessionStorageToken(); + }, + (err: HttpErrorResponse) => { + this._router.navigate(['/not-found']); + } + ); + + this.editPostFormGroup = this._fb.group({ + newPostMessage: new FormControl('') + }); } backToFeed(): void { this._router.navigate(['/']); } + + editPost(): void { + if (this.editingPost) { + const newMessage = this.editPostFormGroup.get('newPostMessage')?.value; + if (newMessage !== '') { + this._postService.putPostFromSessionStorageRequest(this.postId, newMessage).subscribe( + (result: object) => { + // Reload the page + this._router.routeReuseStrategy.shouldReuseRoute = () => false; + this._router.onSameUrlNavigation = 'reload'; + this._router.navigate([this._router.url]); + } + ); + } + } + this.editingPost = !this.editingPost; + } + + deletePost(): void { + } } diff --git a/src/DevHive.Angular/src/app/services/post.service.ts b/src/DevHive.Angular/src/app/services/post.service.ts index a35a323..c8f9a61 100644 --- a/src/DevHive.Angular/src/app/services/post.service.ts +++ b/src/DevHive.Angular/src/app/services/post.service.ts @@ -1,5 +1,6 @@ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import * as FormData from 'form-data'; import { Guid } from 'guid-typescript'; import { Observable } from 'rxjs'; import { Post } from 'src/models/post'; @@ -26,18 +27,23 @@ export class PostService { return this.createPostRequest(userId, token, postMessage); } + putPostFromSessionStorageRequest(postId: Guid, newMessage: string): Observable { + const userId = this._tokenService.getUserIdFromSessionStorageToken(); + const token = this._tokenService.getTokenFromSessionStorage(); + + return this.putPostRequest(userId, token, postId, newMessage); + } + /* Post requests */ createPostRequest(userId: Guid, authToken: string, postMessage: string): Observable { - const body = { - message: postMessage, - files: [] - }; + const form = new FormData(); + form.append('message', postMessage); const options = { params: new HttpParams().set('UserId', userId.toString()), headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken) }; - return this._http.post(AppConstants.API_POST_URL, body, options); + return this._http.post(AppConstants.API_POST_URL, form, options); } getPostRequest(id: Guid): Observable { @@ -46,4 +52,16 @@ export class PostService { }; return this._http.get(AppConstants.API_POST_URL, options); } + + putPostRequest(userId: Guid, authToken: string, postId: Guid, newMessage: string): Observable { + const body = { + postId: postId.toString(), + newMessage: newMessage + }; + const options = { + params: new HttpParams().set('UserId', userId.toString()), + headers: new HttpHeaders().set('Authorization', 'Bearer ' + authToken) + }; + return this._http.put(AppConstants.API_POST_URL, body, options); + } } -- cgit v1.2.3