diff --git a/package-lock.json b/package-lock.json
index 6b9a49c..98b56b5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -359,12 +359,12 @@
"dev": true
},
"node_modules/@angular-devkit/schematics": {
- "version": "13.3.9",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.9.tgz",
- "integrity": "sha512-oNHLNtwbtEJ0dYPPXy1NpfRdSiFsYBl7+ozJklLgNV/AEOxlSi2qlVx6DoxNVjz5XgQ7Z+eoVDMw7ewGPnGSyA==",
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz",
+ "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "13.3.9",
+ "@angular-devkit/core": "13.3.11",
"jsonc-parser": "3.0.0",
"magic-string": "0.25.7",
"ora": "5.4.1",
@@ -376,6 +376,55 @@
"yarn": ">= 1.13.0"
}
},
+ "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@angular-devkit/schematics/node_modules/ajv": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@angular-devkit/schematics/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/@angular-devkit/schematics/node_modules/rxjs": {
"version": "6.6.7",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
@@ -431,16 +480,16 @@
"optional": true
},
"node_modules/@angular/cli": {
- "version": "13.3.9",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.9.tgz",
- "integrity": "sha512-b64mfB7A8vw5QmopEnkCVhGH8zDX5FrQVKKCRlK1dO3GEtAdfhFJb5J7TBbCOwp1XfYJ5jl+biNQy4HoX5HQPw==",
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.11.tgz",
+ "integrity": "sha512-LTuQ1wC/VJiHqHx8nYJCx0EJv1Ek7R6VvP/5vmr/+M8oVvJ2zSh/aIbcPg6BTL0YEfMI6nX41mUjPBUfF0q2OA==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "@angular-devkit/architect": "0.1303.9",
- "@angular-devkit/core": "13.3.9",
- "@angular-devkit/schematics": "13.3.9",
- "@schematics/angular": "13.3.9",
+ "@angular-devkit/architect": "0.1303.11",
+ "@angular-devkit/core": "13.3.11",
+ "@angular-devkit/schematics": "13.3.11",
+ "@schematics/angular": "13.3.11",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.1",
"debug": "4.3.3",
@@ -466,6 +515,64 @@
"yarn": ">= 1.13.0"
}
},
+ "node_modules/@angular/cli/node_modules/@angular-devkit/architect": {
+ "version": "0.1303.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.11.tgz",
+ "integrity": "sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg==",
+ "dev": true,
+ "dependencies": {
+ "@angular-devkit/core": "13.3.11",
+ "rxjs": "6.6.7"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ }
+ },
+ "node_modules/@angular/cli/node_modules/@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@angular/cli/node_modules/ajv": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/@angular/cli/node_modules/debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
@@ -483,6 +590,12 @@
}
}
},
+ "node_modules/@angular/cli/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/@angular/cli/node_modules/resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@@ -500,6 +613,24 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/@angular/cli/node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/@angular/cli/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
"node_modules/@angular/common": {
"version": "13.3.11",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.11.tgz",
@@ -2827,13 +2958,13 @@
}
},
"node_modules/@schematics/angular": {
- "version": "13.3.9",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.9.tgz",
- "integrity": "sha512-tm5wst7+Z8cOgOJ/4JVlYKOFCCOVnqKYFtYf0BIWq6RFBXcw6QqbGW1wXH8ASmuev4QZXKgqc7YKALPpYAKCeQ==",
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz",
+ "integrity": "sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "13.3.9",
- "@angular-devkit/schematics": "13.3.9",
+ "@angular-devkit/core": "13.3.11",
+ "@angular-devkit/schematics": "13.3.11",
"jsonc-parser": "3.0.0"
},
"engines": {
@@ -2842,6 +2973,73 @@
"yarn": ">= 1.13.0"
}
},
+ "node_modules/@schematics/angular/node_modules/@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+ "yarn": ">= 1.13.0"
+ },
+ "peerDependencies": {
+ "chokidar": "^3.5.2"
+ },
+ "peerDependenciesMeta": {
+ "chokidar": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@schematics/angular/node_modules/ajv": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@schematics/angular/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/@schematics/angular/node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/@schematics/angular/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
"node_modules/@socket.io/component-emitter": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
@@ -12403,18 +12601,50 @@
}
},
"@angular-devkit/schematics": {
- "version": "13.3.9",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.9.tgz",
- "integrity": "sha512-oNHLNtwbtEJ0dYPPXy1NpfRdSiFsYBl7+ozJklLgNV/AEOxlSi2qlVx6DoxNVjz5XgQ7Z+eoVDMw7ewGPnGSyA==",
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz",
+ "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==",
"dev": true,
"requires": {
- "@angular-devkit/core": "13.3.9",
+ "@angular-devkit/core": "13.3.11",
"jsonc-parser": "3.0.0",
"magic-string": "0.25.7",
"ora": "5.4.1",
"rxjs": "6.6.7"
},
"dependencies": {
+ "@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "dev": true,
+ "requires": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ }
+ },
+ "ajv": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"rxjs": {
"version": "6.6.7",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
@@ -12458,15 +12688,15 @@
}
},
"@angular/cli": {
- "version": "13.3.9",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.9.tgz",
- "integrity": "sha512-b64mfB7A8vw5QmopEnkCVhGH8zDX5FrQVKKCRlK1dO3GEtAdfhFJb5J7TBbCOwp1XfYJ5jl+biNQy4HoX5HQPw==",
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.11.tgz",
+ "integrity": "sha512-LTuQ1wC/VJiHqHx8nYJCx0EJv1Ek7R6VvP/5vmr/+M8oVvJ2zSh/aIbcPg6BTL0YEfMI6nX41mUjPBUfF0q2OA==",
"dev": true,
"requires": {
- "@angular-devkit/architect": "0.1303.9",
- "@angular-devkit/core": "13.3.9",
- "@angular-devkit/schematics": "13.3.9",
- "@schematics/angular": "13.3.9",
+ "@angular-devkit/architect": "0.1303.11",
+ "@angular-devkit/core": "13.3.11",
+ "@angular-devkit/schematics": "13.3.11",
+ "@schematics/angular": "13.3.11",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.1",
"debug": "4.3.3",
@@ -12484,6 +12714,42 @@
"uuid": "8.3.2"
},
"dependencies": {
+ "@angular-devkit/architect": {
+ "version": "0.1303.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.11.tgz",
+ "integrity": "sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg==",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/core": "13.3.11",
+ "rxjs": "6.6.7"
+ }
+ },
+ "@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "dev": true,
+ "requires": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ }
+ },
+ "ajv": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
@@ -12493,6 +12759,12 @@
"ms": "2.1.2"
}
},
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@@ -12503,6 +12775,21 @@
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
}
}
},
@@ -14166,14 +14453,63 @@
}
},
"@schematics/angular": {
- "version": "13.3.9",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.9.tgz",
- "integrity": "sha512-tm5wst7+Z8cOgOJ/4JVlYKOFCCOVnqKYFtYf0BIWq6RFBXcw6QqbGW1wXH8ASmuev4QZXKgqc7YKALPpYAKCeQ==",
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz",
+ "integrity": "sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==",
"dev": true,
"requires": {
- "@angular-devkit/core": "13.3.9",
- "@angular-devkit/schematics": "13.3.9",
+ "@angular-devkit/core": "13.3.11",
+ "@angular-devkit/schematics": "13.3.11",
"jsonc-parser": "3.0.0"
+ },
+ "dependencies": {
+ "@angular-devkit/core": {
+ "version": "13.3.11",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
+ "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+ "dev": true,
+ "requires": {
+ "ajv": "8.9.0",
+ "ajv-formats": "2.1.1",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ }
+ },
+ "ajv": {
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
+ "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
}
},
"@socket.io/component-emitter": {
diff --git a/src/app/excel-generator/excel-generator.component.html b/src/app/excel-generator/excel-generator.component.html
new file mode 100644
index 0000000..47ee018
--- /dev/null
+++ b/src/app/excel-generator/excel-generator.component.html
@@ -0,0 +1,2 @@
+
+
diff --git a/src/app/excel-generator/excel-generator.component.sass b/src/app/excel-generator/excel-generator.component.sass
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/excel-generator/excel-generator.component.spec.ts b/src/app/excel-generator/excel-generator.component.spec.ts
new file mode 100644
index 0000000..fce2a9e
--- /dev/null
+++ b/src/app/excel-generator/excel-generator.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ExcelGeneratorComponent } from './excel-generator.component';
+
+describe('ExcelGeneratorComponent', () => {
+ let component: ExcelGeneratorComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ declarations: [ExcelGeneratorComponent]
+ });
+ fixture = TestBed.createComponent(ExcelGeneratorComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/excel-generator/excel-generator.component.ts b/src/app/excel-generator/excel-generator.component.ts
new file mode 100644
index 0000000..b4429cb
--- /dev/null
+++ b/src/app/excel-generator/excel-generator.component.ts
@@ -0,0 +1,49 @@
+import { Component } from '@angular/core';
+import * as XLSX from 'xlsx';
+
+@Component({
+ selector: 'app-excel-generator',
+ templateUrl: './excel-generator.component.html',
+ styleUrls: ['./excel-generator.component.sass']
+})
+export class ExcelGeneratorComponent {
+ generateExcelTemplate() {
+
+ const data = [
+ ['Name of resources in program', 'Type of resources', 'Resource Link', 'Resource Status', 'Target role at the resource level', 'Targeted subrole at resource level', 'Start date of resource', 'End date of resource'],
+ ['Obs Form for All Question type', 'Observation without rubrics', 'https://docs.google.com/spreadsheets/d/1uErekrCkuOXMdIvXsCSOr7YiBk4HcS4iJrh0tdALlsw/edit#gid=2134498639', 'Existing', 'HM,DEO', '', '30-08-2021', '30-08-2022']
+ ];
+
+
+ const workbook = XLSX.utils.book_new();
+
+
+ const worksheet = XLSX.utils.aoa_to_sheet(data);
+
+
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+
+
+ const excelBuffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' });
+
+
+ this.saveExcelFile(excelBuffer, 'template.xlsx');
+ }
+
+ saveExcelFile(buffer: any, fileName: string) {
+ const data: Blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
+
+
+ const link = document.createElement('a');
+ link.href = window.URL.createObjectURL(data);
+ link.download = fileName;
+
+
+ link.click();
+
+
+ window.URL.revokeObjectURL(link.href);
+ link.remove();
+ }
+}
+
diff --git a/src/app/program-manager-form/program-manager-form.component.html b/src/app/program-manager-form/program-manager-form.component.html
new file mode 100644
index 0000000..ea2df32
--- /dev/null
+++ b/src/app/program-manager-form/program-manager-form.component.html
@@ -0,0 +1,16 @@
+
+
diff --git a/src/app/program-manager-form/program-manager-form.component.sass b/src/app/program-manager-form/program-manager-form.component.sass
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/program-manager-form/program-manager-form.component.spec.ts b/src/app/program-manager-form/program-manager-form.component.spec.ts
new file mode 100644
index 0000000..9a7e29c
--- /dev/null
+++ b/src/app/program-manager-form/program-manager-form.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProgramManagerFormComponent } from './program-manager-form.component';
+
+describe('ProgramManagerFormComponent', () => {
+ let component: ProgramManagerFormComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ declarations: [ProgramManagerFormComponent]
+ });
+ fixture = TestBed.createComponent(ProgramManagerFormComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/program-manager-form/program-manager-form.component.ts b/src/app/program-manager-form/program-manager-form.component.ts
new file mode 100644
index 0000000..ea3be81
--- /dev/null
+++ b/src/app/program-manager-form/program-manager-form.component.ts
@@ -0,0 +1,22 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-program-manager-form',
+ templateUrl: './program-manager-form.component.html',
+ styleUrls: ['./program-manager-form.component.sass']
+})
+export class ProgramManagerFormComponent {
+ ssoUser = 'YES';
+ loginId = '';
+ dikshaUserId = 'dikshauser_5xco';
+ onSubmit() {
+
+ const formData = {
+ ssoUser: this.ssoUser,
+ loginId: this.loginId,
+ dikshaUserId: this.dikshaUserId
+ };
+
+
+ }
+}
diff --git a/src/app/project-upload/project-upload.component.html b/src/app/project-upload/project-upload.component.html
new file mode 100644
index 0000000..e0eecb4
--- /dev/null
+++ b/src/app/project-upload/project-upload.component.html
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/src/app/project-upload/project-upload.component.sass b/src/app/project-upload/project-upload.component.sass
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/project-upload/project-upload.component.spec.ts b/src/app/project-upload/project-upload.component.spec.ts
new file mode 100644
index 0000000..245a5f5
--- /dev/null
+++ b/src/app/project-upload/project-upload.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProjectUploadComponent } from './project-upload.component';
+
+describe('ProjectUploadComponent', () => {
+ let component: ProjectUploadComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ declarations: [ProjectUploadComponent]
+ });
+ fixture = TestBed.createComponent(ProjectUploadComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/project-upload/project-upload.component.ts b/src/app/project-upload/project-upload.component.ts
new file mode 100644
index 0000000..6e33b61
--- /dev/null
+++ b/src/app/project-upload/project-upload.component.ts
@@ -0,0 +1,54 @@
+import { Component } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+
+@Component({
+ selector: 'app-project-upload',
+ templateUrl: './project-upload.component.html',
+ styleUrls: ['./project-upload.component.sass']
+})
+export class ProjectUploadComponent {
+ projectUploadForm: FormGroup;
+
+ constructor(private formBuilder: FormBuilder) {
+ this.projectUploadForm = this.formBuilder.group({
+ title: ['', Validators.required],
+ projectId: ['', Validators.required],
+ isSSOUser: ['', Validators.required],
+ dikshaLoginId: ['', Validators.required],
+ categories: ['', Validators.required],
+ objective: ['', Validators.required],
+ duration: ['', Validators.required],
+ recommendedFor: ['', Validators.required],
+ keywords: ['', Validators.required],
+ learningResources1_name: [''],
+ learningResources1_link: [''],
+ learningResources2_name: [''],
+ learningResources2_link: [''],
+ learningResources3_name: [''],
+ learningResources3_link: [''],
+ hasCertificate: ['', Validators.required],
+ projectLevelEvidence: ['', Validators.required],
+ minNoOfEvidence: ['']
+ });
+ }
+
+ onSubmit() {
+ if (this.projectUploadForm.valid) {
+
+ const projectData = this.projectUploadForm.value;
+ console.log(projectData);
+ } else {
+
+ this.markFormGroupTouched(this.projectUploadForm);
+ }
+ }
+
+ markFormGroupTouched(formGroup: FormGroup) {
+ Object.values(formGroup.controls).forEach(control => {
+ control.markAsTouched();
+ if (control instanceof FormGroup) {
+ this.markFormGroupTouched(control);
+ }
+ });
+ }
+}