diff --git a/package-lock.json b/package-lock.json
index fb3a54d826..ff8e10d188 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@denbi/cloud-portal-webapp",
- "version": "4.808.0",
+ "version": "4.809.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@denbi/cloud-portal-webapp",
- "version": "4.808.0",
+ "version": "4.809.0",
"dependencies": {
"@angular-eslint/eslint-plugin": "^16.0.3",
"@angular/animations": "16.2.12",
@@ -89,7 +89,7 @@
"eslint-config-airbnb-base": "15.0.0",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-jsdoc": "46.8.2",
- "eslint-plugin-no-null": "*",
+ "eslint-plugin-no-null": "latest",
"eslint-plugin-prefer-arrow": "1.2.3",
"exports-loader": "4.0.0",
"file-loader": "6.2.0",
@@ -165,15 +165,15 @@
}
},
"node_modules/@angular-devkit/build-angular": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.12.tgz",
- "integrity": "sha512-VVGKZ0N3gyR0DP7VrcZl4io3ruWYT94mrlyJsJMLlrYy/EX8JCvqrJC9c+dscrtKjhZzjwdyhszkJQY4JfwACA==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.13.tgz",
+ "integrity": "sha512-2G8gnBpBKcu+/jJH5DJZyMgn2RwDFPgiNSkcLKFg5DdqVFVT3CCoZAobfpAEMndrysfMmoUPGuAmsgCfdczQjg==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "2.2.1",
- "@angular-devkit/architect": "0.1602.12",
- "@angular-devkit/build-webpack": "0.1602.12",
- "@angular-devkit/core": "16.2.12",
+ "@angular-devkit/architect": "0.1602.13",
+ "@angular-devkit/build-webpack": "0.1602.13",
+ "@angular-devkit/core": "16.2.13",
"@babel/core": "7.22.9",
"@babel/generator": "7.22.9",
"@babel/helper-annotate-as-pure": "7.22.5",
@@ -185,7 +185,7 @@
"@babel/runtime": "7.22.6",
"@babel/template": "7.22.5",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "16.2.12",
+ "@ngtools/webpack": "16.2.13",
"@vitejs/plugin-basic-ssl": "1.0.1",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.14",
@@ -230,7 +230,7 @@
"tslib": "2.6.1",
"vite": "4.5.2",
"webpack": "5.88.2",
- "webpack-dev-middleware": "6.1.1",
+ "webpack-dev-middleware": "6.1.2",
"webpack-dev-server": "4.15.1",
"webpack-merge": "5.9.0",
"webpack-subresource-integrity": "5.1.0"
@@ -287,12 +287,12 @@
}
},
"node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": {
- "version": "0.1602.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.12.tgz",
- "integrity": "sha512-19Fwwfx+KvJ01SyI6cstRgqT9+cwer8Ro1T27t1JqlGyOX8tY3pV78ulwxy2+wCzPjR18V6W7cb7Cv6fyK4xog==",
+ "version": "0.1602.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.13.tgz",
+ "integrity": "sha512-ejrOYoXgbhDYjdaW4B2SyWeb6AqR8vqqzMyvCq2JX7fo08IhLnVu1fcl0fwr161l37TuzgPNWrHSciOzzmZDkw==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "16.2.12",
+ "@angular-devkit/core": "16.2.13",
"rxjs": "7.8.1"
},
"engines": {
@@ -302,9 +302,9 @@
}
},
"node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.12.tgz",
- "integrity": "sha512-o6ziQs+EcEonFezrsA46jbZqkQrs4ckS1bAQj93g5ZjGtieUz8l/U3lclvKpL/iEzWkGVViSYuP2KyW2oqTDiQ==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.13.tgz",
+ "integrity": "sha512-6jTlYOIeYsOF/Vw/hBNusjoCmKJBByoyGS1Fu2Yav8ltxYK04aDtI73l9JJB/5Cpzhc4YELrMqBMH7in5Vowaw==",
"dev": true,
"dependencies": {
"ajv": "8.12.0",
@@ -547,12 +547,12 @@
"dev": true
},
"node_modules/@angular-devkit/build-webpack": {
- "version": "0.1602.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.12.tgz",
- "integrity": "sha512-1lmR4jCkxPJuAFXReesEY3CB+/5jSebGE5ry6qJJvNm6kuSc9bzfTytrcwosVY+Q7kAA2ij7kAYw0loGbTjLWA==",
+ "version": "0.1602.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.13.tgz",
+ "integrity": "sha512-H7CqnC0kvWR0Q45ZXsCO3M9lGd4dOajEmkCVmq7vVptU3nJRbCqJ0ZScj9bH5YSlcdO0jPbOdcTELWyEZ3BMFQ==",
"dev": true,
"dependencies": {
- "@angular-devkit/architect": "0.1602.12",
+ "@angular-devkit/architect": "0.1602.13",
"rxjs": "7.8.1"
},
"engines": {
@@ -566,12 +566,12 @@
}
},
"node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": {
- "version": "0.1602.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.12.tgz",
- "integrity": "sha512-19Fwwfx+KvJ01SyI6cstRgqT9+cwer8Ro1T27t1JqlGyOX8tY3pV78ulwxy2+wCzPjR18V6W7cb7Cv6fyK4xog==",
+ "version": "0.1602.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.13.tgz",
+ "integrity": "sha512-ejrOYoXgbhDYjdaW4B2SyWeb6AqR8vqqzMyvCq2JX7fo08IhLnVu1fcl0fwr161l37TuzgPNWrHSciOzzmZDkw==",
"dev": true,
"dependencies": {
- "@angular-devkit/core": "16.2.12",
+ "@angular-devkit/core": "16.2.13",
"rxjs": "7.8.1"
},
"engines": {
@@ -581,9 +581,9 @@
}
},
"node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.12.tgz",
- "integrity": "sha512-o6ziQs+EcEonFezrsA46jbZqkQrs4ckS1bAQj93g5ZjGtieUz8l/U3lclvKpL/iEzWkGVViSYuP2KyW2oqTDiQ==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.13.tgz",
+ "integrity": "sha512-6jTlYOIeYsOF/Vw/hBNusjoCmKJBByoyGS1Fu2Yav8ltxYK04aDtI73l9JJB/5Cpzhc4YELrMqBMH7in5Vowaw==",
"dev": true,
"dependencies": {
"ajv": "8.12.0",
@@ -4200,9 +4200,9 @@
"license": "MIT"
},
"node_modules/@leichtgewicht/ip-codec": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
- "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
"dev": true
},
"node_modules/@ng-bootstrap/ng-bootstrap": {
@@ -4239,9 +4239,9 @@
}
},
"node_modules/@ngtools/webpack": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.12.tgz",
- "integrity": "sha512-f9R9Qsk8v+ffDxryl6PQ7Wnf2JCNd4dDXOH+d/AuF06VFiwcwGDRDZpmqkAXbFxQfcWTbT1FFvfoJ+SFcJgXLA==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.13.tgz",
+ "integrity": "sha512-P5OiVp9MeMwVxihtC9NB4mx1Zlbup2DLMAWYAl8/kcFdRrRW+1YDQn93tlFToQDHGpPxkqW7cnFUPnA+QwQMYA==",
"dev": true,
"engines": {
"node": "^16.14.0 || >=18.10.0",
@@ -5224,9 +5224,9 @@
}
},
"node_modules/@types/qs": {
- "version": "6.9.11",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
- "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
+ "version": "6.9.14",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz",
+ "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==",
"dev": true
},
"node_modules/@types/raf": {
@@ -5272,14 +5272,14 @@
}
},
"node_modules/@types/serve-static": {
- "version": "1.15.5",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
- "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
"dev": true,
"dependencies": {
"@types/http-errors": "*",
- "@types/mime": "*",
- "@types/node": "*"
+ "@types/node": "*",
+ "@types/send": "*"
}
},
"node_modules/@types/sizzle": {
@@ -9532,12 +9532,14 @@
}
},
"node_modules/es5-ext": {
- "version": "0.10.62",
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
"hasInstallScript": true,
- "license": "ISC",
"dependencies": {
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
"next-tick": "^1.1.0"
},
"engines": {
@@ -10610,6 +10612,25 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esniff/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
+ },
"node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -11481,9 +11502,9 @@
}
},
"node_modules/fs-monkey": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz",
- "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
+ "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==",
"dev": true
},
"node_modules/fs.realpath": {
@@ -20502,9 +20523,9 @@
}
},
"node_modules/webpack-dev-middleware": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz",
- "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz",
+ "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==",
"dev": true,
"dependencies": {
"colorette": "^2.0.10",
@@ -20589,9 +20610,9 @@
}
},
"node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
- "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
+ "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"dev": true,
"dependencies": {
"colorette": "^2.0.10",
@@ -21243,15 +21264,15 @@
}
},
"@angular-devkit/build-angular": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.12.tgz",
- "integrity": "sha512-VVGKZ0N3gyR0DP7VrcZl4io3ruWYT94mrlyJsJMLlrYy/EX8JCvqrJC9c+dscrtKjhZzjwdyhszkJQY4JfwACA==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.13.tgz",
+ "integrity": "sha512-2G8gnBpBKcu+/jJH5DJZyMgn2RwDFPgiNSkcLKFg5DdqVFVT3CCoZAobfpAEMndrysfMmoUPGuAmsgCfdczQjg==",
"dev": true,
"requires": {
"@ampproject/remapping": "2.2.1",
- "@angular-devkit/architect": "0.1602.12",
- "@angular-devkit/build-webpack": "0.1602.12",
- "@angular-devkit/core": "16.2.12",
+ "@angular-devkit/architect": "0.1602.13",
+ "@angular-devkit/build-webpack": "0.1602.13",
+ "@angular-devkit/core": "16.2.13",
"@babel/core": "7.22.9",
"@babel/generator": "7.22.9",
"@babel/helper-annotate-as-pure": "7.22.5",
@@ -21263,7 +21284,7 @@
"@babel/runtime": "7.22.6",
"@babel/template": "7.22.5",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "16.2.12",
+ "@ngtools/webpack": "16.2.13",
"@vitejs/plugin-basic-ssl": "1.0.1",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.14",
@@ -21309,26 +21330,26 @@
"tslib": "2.6.1",
"vite": "4.5.2",
"webpack": "5.88.2",
- "webpack-dev-middleware": "6.1.1",
+ "webpack-dev-middleware": "6.1.2",
"webpack-dev-server": "4.15.1",
"webpack-merge": "5.9.0",
"webpack-subresource-integrity": "5.1.0"
},
"dependencies": {
"@angular-devkit/architect": {
- "version": "0.1602.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.12.tgz",
- "integrity": "sha512-19Fwwfx+KvJ01SyI6cstRgqT9+cwer8Ro1T27t1JqlGyOX8tY3pV78ulwxy2+wCzPjR18V6W7cb7Cv6fyK4xog==",
+ "version": "0.1602.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.13.tgz",
+ "integrity": "sha512-ejrOYoXgbhDYjdaW4B2SyWeb6AqR8vqqzMyvCq2JX7fo08IhLnVu1fcl0fwr161l37TuzgPNWrHSciOzzmZDkw==",
"dev": true,
"requires": {
- "@angular-devkit/core": "16.2.12",
+ "@angular-devkit/core": "16.2.13",
"rxjs": "7.8.1"
}
},
"@angular-devkit/core": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.12.tgz",
- "integrity": "sha512-o6ziQs+EcEonFezrsA46jbZqkQrs4ckS1bAQj93g5ZjGtieUz8l/U3lclvKpL/iEzWkGVViSYuP2KyW2oqTDiQ==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.13.tgz",
+ "integrity": "sha512-6jTlYOIeYsOF/Vw/hBNusjoCmKJBByoyGS1Fu2Yav8ltxYK04aDtI73l9JJB/5Cpzhc4YELrMqBMH7in5Vowaw==",
"dev": true,
"requires": {
"ajv": "8.12.0",
@@ -21488,29 +21509,29 @@
}
},
"@angular-devkit/build-webpack": {
- "version": "0.1602.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.12.tgz",
- "integrity": "sha512-1lmR4jCkxPJuAFXReesEY3CB+/5jSebGE5ry6qJJvNm6kuSc9bzfTytrcwosVY+Q7kAA2ij7kAYw0loGbTjLWA==",
+ "version": "0.1602.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.13.tgz",
+ "integrity": "sha512-H7CqnC0kvWR0Q45ZXsCO3M9lGd4dOajEmkCVmq7vVptU3nJRbCqJ0ZScj9bH5YSlcdO0jPbOdcTELWyEZ3BMFQ==",
"dev": true,
"requires": {
- "@angular-devkit/architect": "0.1602.12",
+ "@angular-devkit/architect": "0.1602.13",
"rxjs": "7.8.1"
},
"dependencies": {
"@angular-devkit/architect": {
- "version": "0.1602.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.12.tgz",
- "integrity": "sha512-19Fwwfx+KvJ01SyI6cstRgqT9+cwer8Ro1T27t1JqlGyOX8tY3pV78ulwxy2+wCzPjR18V6W7cb7Cv6fyK4xog==",
+ "version": "0.1602.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.13.tgz",
+ "integrity": "sha512-ejrOYoXgbhDYjdaW4B2SyWeb6AqR8vqqzMyvCq2JX7fo08IhLnVu1fcl0fwr161l37TuzgPNWrHSciOzzmZDkw==",
"dev": true,
"requires": {
- "@angular-devkit/core": "16.2.12",
+ "@angular-devkit/core": "16.2.13",
"rxjs": "7.8.1"
}
},
"@angular-devkit/core": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.12.tgz",
- "integrity": "sha512-o6ziQs+EcEonFezrsA46jbZqkQrs4ckS1bAQj93g5ZjGtieUz8l/U3lclvKpL/iEzWkGVViSYuP2KyW2oqTDiQ==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.13.tgz",
+ "integrity": "sha512-6jTlYOIeYsOF/Vw/hBNusjoCmKJBByoyGS1Fu2Yav8ltxYK04aDtI73l9JJB/5Cpzhc4YELrMqBMH7in5Vowaw==",
"dev": true,
"requires": {
"ajv": "8.12.0",
@@ -23927,9 +23948,9 @@
"version": "0.3.2"
},
"@leichtgewicht/ip-codec": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
- "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
"dev": true
},
"@ng-bootstrap/ng-bootstrap": {
@@ -23949,9 +23970,9 @@
}
},
"@ngtools/webpack": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.12.tgz",
- "integrity": "sha512-f9R9Qsk8v+ffDxryl6PQ7Wnf2JCNd4dDXOH+d/AuF06VFiwcwGDRDZpmqkAXbFxQfcWTbT1FFvfoJ+SFcJgXLA==",
+ "version": "16.2.13",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.13.tgz",
+ "integrity": "sha512-P5OiVp9MeMwVxihtC9NB4mx1Zlbup2DLMAWYAl8/kcFdRrRW+1YDQn93tlFToQDHGpPxkqW7cnFUPnA+QwQMYA==",
"dev": true,
"requires": {}
},
@@ -24673,9 +24694,9 @@
}
},
"@types/qs": {
- "version": "6.9.11",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
- "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
+ "version": "6.9.14",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz",
+ "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==",
"dev": true
},
"@types/raf": {
@@ -24720,14 +24741,14 @@
}
},
"@types/serve-static": {
- "version": "1.15.5",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
- "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
"dev": true,
"requires": {
"@types/http-errors": "*",
- "@types/mime": "*",
- "@types/node": "*"
+ "@types/node": "*",
+ "@types/send": "*"
}
},
"@types/sizzle": {
@@ -27647,10 +27668,13 @@
}
},
"es5-ext": {
- "version": "0.10.62",
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
"requires": {
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
"next-tick": "^1.1.0"
}
},
@@ -28329,6 +28353,24 @@
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true
},
+ "esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "requires": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
+ }
+ }
+ },
"espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -28941,9 +28983,9 @@
}
},
"fs-monkey": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz",
- "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
+ "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==",
"dev": true
},
"fs.realpath": {
@@ -34958,9 +35000,9 @@
}
},
"webpack-dev-middleware": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz",
- "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz",
+ "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==",
"dev": true,
"requires": {
"colorette": "^2.0.10",
@@ -35009,9 +35051,9 @@
},
"dependencies": {
"webpack-dev-middleware": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
- "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
+ "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"dev": true,
"requires": {
"colorette": "^2.0.10",
diff --git a/package.json b/package.json
index c0e7e6b601..12c673659c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@denbi/cloud-portal-webapp",
- "version": "4.808.0",
+ "version": "4.809.0",
"description": "de.NBI Cloud Portal",
"scripts": {
"ng": "ng serve",
diff --git a/src/app/layouts/full-layout.component.html b/src/app/layouts/full-layout.component.html
index 557ddc3686..4a194b8068 100644
--- a/src/app/layouts/full-layout.component.html
+++ b/src/app/layouts/full-layout.component.html
@@ -88,7 +88,7 @@
> Applications
-
+
@@ -161,8 +161,8 @@
data-placement="right"
title="The project lifetime expires soon."
*ngIf="
- (application | hasstatusinlist : Application_States.EXPIRES_SOON) &&
- !(application | hasstatusinlist : Application_States.EXPIRED)
+ (application | hasstatusinlist: Application_States.EXPIRES_SOON) &&
+ !(application | hasstatusinlist: Application_States.EXPIRED)
"
>
@@ -172,7 +172,7 @@
data-toggle="tooltip"
data-placement="right"
title="The lifetime of this project is expired."
- *ngIf="application | hasstatusinlist : Application_States.EXPIRED"
+ *ngIf="application | hasstatusinlist: Application_States.EXPIRED"
>
@@ -181,7 +181,7 @@
data-toggle="tooltip"
data-placement="right"
title="The termination of the project was requested."
- *ngIf="application | hasstatusinlist : Application_States.TERMINATION_REQUESTED"
+ *ngIf="application | hasstatusinlist: Application_States.TERMINATION_REQUESTED"
>
@@ -190,7 +190,7 @@
data-toggle="tooltip"
data-placement="right"
title="This project is disabled!"
- *ngIf="application | hasstatusinlist : Application_States.DISABLED"
+ *ngIf="application | hasstatusinlist: Application_States.DISABLED"
>
@@ -200,8 +200,8 @@
data-placement="right"
title="An extension request was submitted for this project."
*ngIf="
- (application | hasstatusinlist : Application_States.LIFETIME_EXTENSION_REQUESTED) ||
- (application | hasstatusinlist : Application_States.WAIT_FOR_CONFIRMATION_EXTENSION)
+ (application | hasstatusinlist: Application_States.LIFETIME_EXTENSION_REQUESTED) ||
+ (application | hasstatusinlist: Application_States.WAIT_FOR_CONFIRMATION_EXTENSION)
"
>
@@ -212,8 +212,8 @@
data-placement="right"
title="A modification request was submitted for this project."
*ngIf="
- (application | hasstatusinlist : Application_States.MODIFICATION_REQUESTED) ||
- (application | hasstatusinlist : Application_States.WAIT_FOR_CONFIRMATION_MODIFICATION)
+ (application | hasstatusinlist: Application_States.MODIFICATION_REQUESTED) ||
+ (application | hasstatusinlist: Application_States.WAIT_FOR_CONFIRMATION_MODIFICATION)
"
>
@@ -223,7 +223,7 @@
data-toggle="tooltip"
data-placement="right"
title="The project application was submitted but not approved yet."
- *ngIf="application | hasstatusinlist : Application_States.SUBMITTED"
+ *ngIf="application | hasstatusinlist: Application_States.SUBMITTED"
>
@@ -233,8 +233,8 @@
data-placement="right"
title="A request for additional credits was submitted for this project."
*ngIf="
- (application | hasstatusinlist : Application_States.CREDITS_EXTENSION_REQUESTED) ||
- (application | hasstatusinlist : Application_States.WAIT_FOR_CONFIRMATION_CREDITS)
+ (application | hasstatusinlist: Application_States.CREDITS_EXTENSION_REQUESTED) ||
+ (application | hasstatusinlist: Application_States.WAIT_FOR_CONFIRMATION_CREDITS)
"
>
@@ -300,7 +300,7 @@
data-toggle="tooltip"
data-placement="right"
title="This project was initially approved within the last 2 weeks."
- *ngIf="application | hasstatusinlist : Application_States.APPROVED_LAST_2_WEEKS"
+ *ngIf="application | hasstatusinlist: Application_States.APPROVED_LAST_2_WEEKS"
>
@@ -310,8 +310,8 @@
data-placement="right"
title="The project lifetime expires soon."
*ngIf="
- (application | hasstatusinlist : Application_States.EXPIRES_SOON) &&
- !(application | hasstatusinlist : Application_States.EXPIRED)
+ (application | hasstatusinlist: Application_States.EXPIRES_SOON) &&
+ !(application | hasstatusinlist: Application_States.EXPIRED)
"
>
@@ -321,7 +321,7 @@
data-toggle="tooltip"
data-placement="right"
title="The lifetime of this project is expired."
- *ngIf="application | hasstatusinlist : Application_States.EXPIRED"
+ *ngIf="application | hasstatusinlist: Application_States.EXPIRED"
>
@@ -330,7 +330,7 @@
data-toggle="tooltip"
data-placement="right"
title="The termination of the project was requested."
- *ngIf="application | hasstatusinlist : Application_States.TERMINATION_REQUESTED"
+ *ngIf="application | hasstatusinlist: Application_States.TERMINATION_REQUESTED"
>
@@ -339,7 +339,7 @@
data-toggle="tooltip"
data-placement="right"
title="This project is disabled!"
- *ngIf="application | hasstatusinlist : Application_States.DISABLED"
+ *ngIf="application | hasstatusinlist: Application_States.DISABLED"
>
@@ -349,8 +349,8 @@
data-placement="right"
title="An extension request was submitted for this project."
*ngIf="
- (application | hasstatusinlist : Application_States.LIFETIME_EXTENSION_REQUESTED) ||
- (application | hasstatusinlist : Application_States.WAIT_FOR_CONFIRMATION_EXTENSION)
+ (application | hasstatusinlist: Application_States.LIFETIME_EXTENSION_REQUESTED) ||
+ (application | hasstatusinlist: Application_States.WAIT_FOR_CONFIRMATION_EXTENSION)
"
>
@@ -361,8 +361,8 @@
data-placement="right"
title="A modification request was submitted for this project."
*ngIf="
- (application | hasstatusinlist : Application_States.MODIFICATION_REQUESTED) ||
- (application | hasstatusinlist : Application_States.WAIT_FOR_CONFIRMATION_MODIFICATION)
+ (application | hasstatusinlist: Application_States.MODIFICATION_REQUESTED) ||
+ (application | hasstatusinlist: Application_States.WAIT_FOR_CONFIRMATION_MODIFICATION)
"
>
@@ -372,7 +372,7 @@
data-toggle="tooltip"
data-placement="right"
title="The project application was submitted but not approved yet."
- *ngIf="application | hasstatusinlist : Application_States.SUBMITTED"
+ *ngIf="application | hasstatusinlist: Application_States.SUBMITTED"
>
@@ -382,8 +382,8 @@
data-placement="right"
title="A request for additional credits was submitted for this project."
*ngIf="
- (application | hasstatusinlist : Application_States.CREDITS_EXTENSION_REQUESTED) ||
- (application | hasstatusinlist : Application_States.WAIT_FOR_CONFIRMATION_CREDITS)
+ (application | hasstatusinlist: Application_States.CREDITS_EXTENSION_REQUESTED) ||
+ (application | hasstatusinlist: Application_States.WAIT_FOR_CONFIRMATION_CREDITS)
"
>
diff --git a/src/app/projectmanagement/modals/result/result.component.ts b/src/app/projectmanagement/modals/result/result.component.ts
index 5a587fc008..788e6c1b33 100644
--- a/src/app/projectmanagement/modals/result/result.component.ts
+++ b/src/app/projectmanagement/modals/result/result.component.ts
@@ -59,9 +59,8 @@ export class ResultComponent implements OnInit, OnDestroy {
this.setToResultState();
this.subscription.add(
- this.applicationsService
- .requestModification(this.extension as ApplicationModification)
- .subscribe((result: { [key: string]: string }): void => {
+ this.applicationsService.requestModification(this.extension as ApplicationModification).subscribe(
+ (result: { [key: string]: string }): void => {
if (result['Error']) {
this.extensionStatus = 2;
this.errorMessage = result['Error'];
@@ -70,7 +69,12 @@ export class ResultComponent implements OnInit, OnDestroy {
}
this.event.emit({ reload: true });
- }),
+ },
+ () => {
+ this.extensionStatus = 2;
+ this.errorMessage = 'Submitting the modification request was not successful. Please reload this page and try again!';
+ },
+ ),
);
}
@@ -89,12 +93,12 @@ export class ResultComponent implements OnInit, OnDestroy {
),
);
}
+
submitLifetimeExtensionRequest(): void {
this.setToResultState();
- this.applicationsService
- .requestAdditionalLifetime(this.extension as ApplicationLifetimeExtension)
- .subscribe((result: { [key: string]: string }): void => {
+ this.applicationsService.requestAdditionalLifetime(this.extension as ApplicationLifetimeExtension).subscribe(
+ (result: { [key: string]: string }): void => {
if (result['Error']) {
this.extensionStatus = 2;
this.errorMessage = result['Error'];
@@ -103,23 +107,32 @@ export class ResultComponent implements OnInit, OnDestroy {
}
this.event.emit({ reload: true });
- });
+ },
+ () => {
+ this.extensionStatus = 2;
+ this.errorMessage = 'Submitting the extension request was not successful. Please reload this page and try again!';
+ },
+ );
}
submitCreditsModification(): void {
this.setToResultState();
this.subscription.add(
- this.applicationsService
- .requestAdditionalCredits(this.extension as ApplicationCreditRequest)
- .subscribe((result: { [key: string]: string }): void => {
+ this.applicationsService.requestAdditionalCredits(this.extension as ApplicationCreditRequest).subscribe(
+ (result: { [key: string]: string }): void => {
if (result['Error']) {
this.extensionStatus = 2;
} else {
this.extensionStatus = 1;
}
this.event.emit({ reload: true });
- }),
+ },
+ () => {
+ this.extensionStatus = 2;
+ this.errorMessage = 'Submitting the credit request was not successful. Please reload this page and try again!';
+ },
+ ),
);
}
diff --git a/src/app/shared/shared_modules/baseClass/application-base-class.component.ts b/src/app/shared/shared_modules/baseClass/application-base-class.component.ts
index 55fc87ad99..4d488be035 100644
--- a/src/app/shared/shared_modules/baseClass/application-base-class.component.ts
+++ b/src/app/shared/shared_modules/baseClass/application-base-class.component.ts
@@ -9,7 +9,6 @@ import { FlavorService } from '../../../api-connector/flavor.service';
import { FacilityService } from '../../../api-connector/facility.service';
import { UserService } from '../../../api-connector/user.service';
import { FlavorTypeShortcuts } from './flavor-type-shortcuts';
-import { VolumeActionStates } from '../../../virtualmachines/volumes/volume-action-states.enum';
/**
* Application base component..
@@ -21,54 +20,54 @@ import { VolumeActionStates } from '../../../virtualmachines/volumes/volume-acti
})
export class ApplicationBaseClassComponent extends AbstractBaseClass {
/**
- * If all Applications are loaded, important for the loader.
- *
- * @type {boolean}
- */
+ * If all Applications are loaded, important for the loader.
+ *
+ * @type {boolean}
+ */
isLoaded: boolean = false;
FlavorTypeShortcuts: typeof FlavorTypeShortcuts = FlavorTypeShortcuts;
/**
- * Selected Application.
- */
+ * Selected Application.
+ */
selectedApplication: Application;
/**
- * All available compute centers.
- *
- * @type {Array}
- */
+ * All available compute centers.
+ *
+ * @type {Array}
+ */
computeCenters: ComputecenterComponent[] = [];
/**
- * List of flavor types.
- */
+ * List of flavor types.
+ */
typeList: FlavorType[];
/**
- * Total number of cores.
- *
- * @type {number}
- */
+ * Total number of cores.
+ *
+ * @type {number}
+ */
totalNumberOfCores: number = 0;
/**
- * Total number of ram.
- *
- * @type {number}
- */
+ * Total number of ram.
+ *
+ * @type {number}
+ */
totalRAM: number = 0;
/**
- * Total number of GPUs
- */
+ * Total number of GPUs
+ */
totalGPU: number = 0;
newFlavors: {
- [id: string]: {
- counter: number
- flavor: Flavor
- }
- } = {};
+ [id: string]: {
+ counter: number
+ flavor: Flavor
+ }
+ } = {};
GPU_SHORTCUT = 'GPU';
HMF_SHORTCUT = 'HMF';
@@ -76,57 +75,57 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
extension_request: boolean = false;
/**
- * If shortname is valid.
- *
- * @type {boolean}
- */
+ * If shortname is valid.
+ *
+ * @type {boolean}
+ */
public wronginput: boolean = false;
/**
- *
- */
+ *
+ */
constantStrings: Object;
/**
- * List of flavors.
- */
+ * List of flavors.
+ */
flavorList: Flavor[] = [];
extraResourceCommentRequired: boolean = false;
/**
- * If all userApplications are loaded, important for the loader.
- *
- * @type {boolean}
- */
+ * If all userApplications are loaded, important for the loader.
+ *
+ * @type {boolean}
+ */
isLoaded_userApplication: boolean = false;
public project_application_pi_approved: boolean = false;
/**
- * Name of the project.
- */
+ * Name of the project.
+ */
public projectName: string;
public project_application_report_allowed: boolean = false;
/**
- * Applications of the user viewing the Application overview.
- *
- * @type {Array}
- */
+ * Applications of the user viewing the Application overview.
+ *
+ * @type {Array}
+ */
user_applications: Application[] = [];
constructor(
- protected userService: UserService,
- protected applicationsService: ApplicationsService,
- protected facilityService: FacilityService,
- private cdRef: ChangeDetectorRef,
+ protected userService: UserService,
+ protected applicationsService: ApplicationsService,
+ protected facilityService: FacilityService,
+ private cdRef: ChangeDetectorRef,
) {
super();
}
/**
- * Gets all available compute centers and saves them in the computeCenters attribute.
- */
+ * Gets all available compute centers and saves them in the computeCenters attribute.
+ */
getComputeCenters(): void {
this.facilityService.getComputeCenters().subscribe((result: [{ [key: string]: string }]): void => {
for (const cc of result) {
@@ -162,8 +161,8 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
if (
(entry?.flavor?.type?.shortcut.toUpperCase() === this.GPU_SHORTCUT
- || entry?.flavor?.type?.shortcut.toUpperCase() === this.HMF_SHORTCUT)
- && entry.counter > 0
+ || entry?.flavor?.type?.shortcut.toUpperCase() === this.HMF_SHORTCUT)
+ && entry.counter > 0
) {
this.extraResourceCommentRequired = true;
this.cdRef.detectChanges();
@@ -189,11 +188,11 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
}
/**
- * Get details of member like name and email by elixir.
- *
- * @param application
- * @param collapse_id
- */
+ * Get details of member like name and email by elixir.
+ *
+ * @param application
+ * @param collapse_id
+ */
public getMemberDetailsByElixirIdIfCollapsed(application: Application, collapse_id: string): void {
if (!this.getCollapseStatus(collapse_id)) {
this.getMemberDetailsByElixirId(application);
@@ -214,11 +213,11 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
}
/**
- * Get status name by status id.
- *
- * @param id
- * @returns
- */
+ * Get status name by status id.
+ *
+ * @param id
+ * @returns
+ */
public getStatusById(id: number): string {
const dummy: string = 'Unknown';
if (Application_States_Strings[Application_States[id]]) {
@@ -229,20 +228,20 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
}
/**
- * Sets the selected application.
- *
- * @param application
- */
+ * Sets the selected application.
+ *
+ * @param application
+ */
setSelectedApplication(application: Application): void {
this.selectedApplication = application;
}
/**
- * Uses the param types to safe the available FlavorTypes to the array typeList.
- * Also it fills the array collapseList with booleans of value 'false' so all flavor-categories are shown in the application form.
- *
- * @param types array of all available FlavorTypes
- */
+ * Uses the param types to safe the available FlavorTypes to the array typeList.
+ * Also it fills the array collapseList with booleans of value 'false' so all flavor-categories are shown in the application form.
+ *
+ * @param types array of all available FlavorTypes
+ */
setListOfTypes(types: FlavorType[]): void {
let index: number = -1;
for (let i: number = 0; i < types.length; i += 1) {
@@ -261,17 +260,17 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
}
/**
- * Check if short name is valid.
- *
- * @param shortname
- */
+ * Check if short name is valid.
+ *
+ * @param shortname
+ */
public checkShortname(shortname: string): void {
this.wronginput = !/^[a-zA-Z0-9\s]*$/.test(shortname);
}
/**
- * Fills the array constantStrings with values dependent of keys which are used to indicate inputs from the application-form
- */
+ * Fills the array constantStrings with values dependent of keys which are used to indicate inputs from the application-form
+ */
generateConstants(): void {
this.constantStrings = [];
this.constantStrings['project_application_shortname'] = 'Shortname: ';
@@ -308,13 +307,13 @@ export class ApplicationBaseClassComponent extends AbstractBaseClass {
}
/**
- * This function concatenates a given key combined with a given value to a string
- * which is used on the confirmation-modal.
- *
- * @param key the key to access a string in the array constantStrings
- * @param val the value that is concatenated with the string from the array and an optional addition (depending on the key)
- * @returns the concatenated string for the confirmation-modal
- */
+ * This function concatenates a given key combined with a given value to a string
+ * which is used on the confirmation-modal.
+ *
+ * @param key the key to access a string in the array constantStrings
+ * @param val the value that is concatenated with the string from the array and an optional addition (depending on the key)
+ * @returns the concatenated string for the confirmation-modal
+ */
matchString(key: string, val: string): string {
if (key in this.constantStrings) {
switch (key) {
diff --git a/src/app/shared/shared_modules/components/applications/application-badges/application-badges.component.html b/src/app/shared/shared_modules/components/applications/application-badges/application-badges.component.html
index a313b99b7f..4af94504a8 100644
--- a/src/app/shared/shared_modules/components/applications/application-badges/application-badges.component.html
+++ b/src/app/shared/shared_modules/components/applications/application-badges/application-badges.component.html
@@ -1,25 +1,27 @@
-
-
+
-
-
-
-
-
+
{
- this.client = new Client(null, null, null, cl['client_name'], null);
- this.client.maxVolumeLimit = cl['max_total_volumeGigabytes'];
- this.client.assignedVolumesStorage = cl['assigned_volume_gb'];
- this.client.currentUsedVolumeStorage = cl['total_gigabytes_used'];
- this.client.newVolumeLimit = cl['new_volume_gb'];
-
- this.client.maxVolumes = cl['max_total_volumes'];
- this.client.assignedVolumes = cl['assigned_volumes'];
- this.client.currentUsedVolumes = cl['total_volumesUsed'];
- this.client.newVolumes = cl['new_volumes'];
-
- this.client.maxVMs = cl['max_total_instances'];
- this.client.assignedVMs = cl['assigned_instances'];
- this.client.currentUsedVms = cl['total_instances_used'];
- this.client.newVms = cl['additional_instances'];
-
- this.client.maxCores = cl['max_total_cores'];
- this.client.assignedCores = cl['assigned_cores'];
- this.client.currentUsedCores = cl['total_cores_used'];
- this.client.newCores = cl['new_cores'];
-
- this.client.maxRam = cl['max_total_ram_size'];
- this.client.assignedRam = cl['assigned_ram'];
- this.client.currentUsedRam = cl['total_ram_used'];
- this.client.newRam = cl['new_ram'];
- if (cl['client_available']) {
- this.message_type = 'success';
- this.limits_message = `The client [${this.client.location}] has enough resources left!.`;
- this.approvable = true;
- } else {
- this.message_type = 'danger';
- this.limits_message = `The client [${this.client.location}] has not the necessary resources left!`;
- // this.approvable = false;
- }
- },
- (error: object): void => {
- console.log(error);
- this.message_type = 'danger';
- this.limits_message = 'The connection to chosen client cannot be established!';
- this.request_failed = true;
- },
- );
- }
-
getComputeCenterClientLimitsAvailable() {
// eslint-disable-next-line max-len
this.facilityService
@@ -90,30 +40,7 @@ export class ClientLimitsComponent implements OnDestroy, OnInit {
.subscribe(
(cl: any) => {
this.client = new Client(null, null, null, cl['client_name'], null);
- this.client.maxVolumeLimit = cl['max_total_volume_gigabytes'];
- this.client.assignedVolumesStorage = cl['assigned_volume_gb'];
- this.client.currentUsedVolumeStorage = cl['total_gigabytes_used'];
- this.client.newVolumeLimit = cl['new_volume_gb'];
-
- this.client.maxVolumes = cl['max_total_volumes'];
- this.client.assignedVolumes = cl['assigned_volumes'];
- this.client.currentUsedVolumes = cl['total_volumes_used'];
- this.client.newVolumes = cl['new_volumes'];
-
- this.client.maxVMs = cl['max_total_instances'];
- this.client.assignedVMs = cl['assigned_instances'];
- this.client.currentUsedVms = cl['total_instances_used'];
- this.client.newVms = cl['additional_instances'];
-
- this.client.maxCores = cl['max_total_cores'];
- this.client.assignedCores = cl['assigned_cores'];
- this.client.currentUsedCores = cl['total_cores_used'];
- this.client.newCores = cl['new_cores'];
-
- this.client.maxRam = cl['max_total_ram_size'];
- this.client.assignedRam = cl['assigned_ram'];
- this.client.currentUsedRam = cl['total_ram_used'];
- this.client.newRam = cl['new_ram'];
+ this.client.setLimit(cl);
if (cl['client_available']) {
this.message_type = 'success';
this.limits_message = `The client [${this.client.location}] has enough resources left!.`;
@@ -137,29 +64,8 @@ export class ClientLimitsComponent implements OnDestroy, OnInit {
this.clientService.getClientLimits(this.client.id).subscribe(
(cl: any) => {
this.client = new Client(null, null, null, cl['client_name'], null);
- this.client.maxVolumeLimit = cl['max_total_volume_gigabytes'];
- this.client.assignedVolumesStorage = cl['assigned_volume_gb'];
- this.client.currentUsedVolumeStorage = cl['total_gigabytes_used'];
- // this.client.newVolumeLimit = client['new_volume_gb'];
-
- this.client.maxVolumes = cl['max_total_volumes'];
- this.client.assignedVolumes = cl['assigned_volumes'];
- this.client.currentUsedVolumes = cl['total_volumes_used'];
- // this.client.newVolumes = client['new_volumes'];
-
- this.client.maxVMs = cl['max_total_instances'];
- this.client.assignedVMs = cl['assigned_instances'];
- this.client.currentUsedVms = cl['total_instances_used'];
- // this.client.newVms = client['additional_instances'];
-
- this.client.maxCores = cl['max_total_cores'];
- this.client.assignedCores = cl['assigned_cores'];
- this.client.currentUsedCores = cl['total_cores_used'];
- // this.client.newCores = client['new_cores'];
+ this.client.setLimit(cl);
- this.client.maxRam = cl['max_total_ram_size'];
- this.client.assignedRam = cl['assigned_ram'];
- this.client.currentUsedRam = cl['total_ram_used'];
// this.client.newRam = client['new_ram'];
},
(error: object): void => {
diff --git a/src/app/vo_manager/clients/modals/client-limits.component.html b/src/app/vo_manager/clients/modals/client-limits.component.html
index e4dca6f768..9555d19724 100644
--- a/src/app/vo_manager/clients/modals/client-limits.component.html
+++ b/src/app/vo_manager/clients/modals/client-limits.component.html
@@ -1,98 +1,151 @@
diff --git a/src/links/check_links.sh b/src/links/check_links.sh
index 9f713b6dea..79b1a95c18 100644
--- a/src/links/check_links.sh
+++ b/src/links/check_links.sh
@@ -21,7 +21,7 @@ WIKI_FAQ=https://portal-dev.denbi.de/wiki/FAQ/
WIKI_MOTD=https://portal-dev.denbi.de/wiki/cloud_admin/news_management/#message-of-the-day
WIKI_CREATE_SNAPSHOT_LINK=https://simplevm-dev.bi.denbi.de/wiki/simple_vm/snapshots/#create-snapshot
WIKI_VOLUMES_LINK=https://simplevm-dev.bi.denbi.de/wiki/simple_vm/volumes/
-WIKI_MOSH_LINK=https://portal-dev.denbi.de/wiki/Tutorials/Mosh/
+WIKI_MOSH_LINK=https://simplevm-dev.bi.denbi.de/wiki/Tutorials/Mosh/
WIKI_PERSONAL_DATA=https://portal-dev.denbi.de/wiki/portal/personal_data/
WIKI_EPHEMERAL_LINK=https://simplevm-dev.bi.denbi.de/wiki/simple_vm/create_instance/#about-ephemeral-flavors
# SURVEY_LINK=https://www.surveymonkey.de/r/HQW9V7C
diff --git a/src/links/links.ts b/src/links/links.ts
index e79fc5a53d..63cc9d3c47 100644
--- a/src/links/links.ts
+++ b/src/links/links.ts
@@ -28,7 +28,7 @@ export const WIKI_WORKSHOPS: string = `${environment.SIMPLEVM_WIKI_PRE}simple_vm
export const WIKI_CREATE_SNAPSHOT_LINK: string = `${environment.SIMPLEVM_WIKI_PRE}simple_vm/snapshots/#create-a-snapshot`;
export const SCALE_SCRIPT_LINK: string = 'https://raw.githubusercontent.com/deNBI/user_scripts/master/bibigrid/scaling.py';
export const WIKI_MOUNT_VOLUME: string = `${environment.SIMPLEVM_WIKI_PRE}simple_vm/volumes/#mount-a-volume`;
-export const WIKI_MOSH_LINK: string = `${environment.WIKI_PRE}Tutorials/Mosh/`;
+export const WIKI_MOSH_LINK: string = `${environment.SIMPLEVM_WIKI_PRE}Tutorials/Mosh/`;
export const WIKI_EPHEMERAL_LINK: string = `${environment.SIMPLEVM_WIKI_PRE}simple_vm/create_instance/#about-ephemeral-flavors`;
export const SCALING_UP_WIKI: string = `${environment.SIMPLEVM_WIKI_PRE}simple_vm/Cluster/cluster_overview/#scale-up-your-cluster`;
export const CREDITS_WIKI: string = `${environment.WIKI_PRE}portal/credits/`;
diff --git a/src/static/webapp/assets/img/simpleVM_Logo.svg b/src/static/webapp/assets/img/simpleVM_Logo.svg
index 7872d0acd3..5ebe5d4189 100644
--- a/src/static/webapp/assets/img/simpleVM_Logo.svg
+++ b/src/static/webapp/assets/img/simpleVM_Logo.svg
@@ -1,41 +1,25 @@
-
-
-
+
+
+