From 92505ad5e5faf1d1519686f88b817480e9cf85df Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 16 Mar 2024 23:17:56 +0000 Subject: [PATCH 1/6] feat(Dependencies): Update dependency follow-redirects to v1.15.6 [SECURITY] | datasource | package | from | to | | ---------- | ---------------- | ------ | ------ | | npm | follow-redirects | 1.15.4 | 1.15.6 | --- package-lock.json | 20 ++++++++++---------- package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a336625b8..0c48351763 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", @@ -42,7 +42,7 @@ "d3": "7.8.5", "export-to-csv": "1.2.1", "file-saver": "2.0.5", - "follow-redirects": "1.15.4", + "follow-redirects": "1.15.6", "html2canvas": "1.4.1", "is-promise": "4.0.0", "jsnlog": "2.30.0", @@ -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", @@ -11339,9 +11339,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -28843,9 +28843,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "font-family-papandreou": { "version": "0.2.0-patch2" diff --git a/package.json b/package.json index fd17418d6d..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", @@ -52,7 +52,7 @@ "d3": "7.8.5", "export-to-csv": "1.2.1", "file-saver": "2.0.5", - "follow-redirects": "1.15.4", + "follow-redirects": "1.15.6", "html2canvas": "1.4.1", "is-promise": "4.0.0", "jsnlog": "2.30.0", From 763d37dde0413e5904ee45c39071b514300f6898 Mon Sep 17 00:00:00 2001 From: dweinholz Date: Tue, 19 Mar 2024 17:19:15 +0100 Subject: [PATCH 2/6] feat(Client):using extern simplevm ep for limits (#5997) * feat(Client):using extern simplevm ep for limits * linting * adjusted wiki link * linkcheck --------- Co-authored-by: denbicloud <46009071+denbicloud@users.noreply.github.com> Co-authored-by: vktrrdk --- .../application-base-class.component.ts | 171 ++++++++------- .../vo_manager/clients/client-limit.model.ts | 26 +++ src/app/vo_manager/clients/client.model.ts | 63 +++--- .../modals/client-limits..component.ts | 98 +-------- .../modals/client-limits.component.html | 195 +++++++++++------- src/links/check_links.sh | 2 +- src/links/links.ts | 2 +- 7 files changed, 270 insertions(+), 287 deletions(-) create mode 100644 src/app/vo_manager/clients/client-limit.model.ts 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/vo_manager/clients/client-limit.model.ts b/src/app/vo_manager/clients/client-limit.model.ts new file mode 100644 index 0000000000..4bf07b2bd3 --- /dev/null +++ b/src/app/vo_manager/clients/client-limit.model.ts @@ -0,0 +1,26 @@ +export class ClientLimit { + maxVolumes: number = 0; + assignedVolumes: number = 0; + currentUsedVolumes: number = 0; + newVolumes: number = 0; + + maxVMs: number = 0; + assignedVMs: number = 0; + currentUsedVms: number = 0; + newVms: number = 0; + + maxVolumeLimit: number = 0; + currentUsedVolumeStorage: number = 0; + assignedVolumesStorage: number = 0; + newVolumeLimit: number = 0; + + maxCores: number = 0; + assignedCores: number = 0; + currentUsedCores: number = 0; + newCores: number = 0; + + maxRam: number = 0; + assignedRam: number = 0; + currentUsedRam: number = 0; + newRam: number = 0; +} diff --git a/src/app/vo_manager/clients/client.model.ts b/src/app/vo_manager/clients/client.model.ts index 6a4b6b8549..7030ec197d 100644 --- a/src/app/vo_manager/clients/client.model.ts +++ b/src/app/vo_manager/clients/client.model.ts @@ -1,8 +1,9 @@ +import { ClientLimit } from './client-limit.model'; + /** * Clientclass */ export class Client { - id: string; host: string; status: string; @@ -10,30 +11,7 @@ export class Client { version: string; features: string[]; - maxVolumes: number; - assignedVolumes: number; - currentUsedVolumes: number; - newVolumes: number; - - maxVMs: number; - assignedVMs: number; - currentUsedVms: number; - newVms: number; - - maxVolumeLimit: number; - currentUsedVolumeStorage: number; - assignedVolumesStorage: number; - newVolumeLimit: number; - - maxCores: number; - assignedCores: number; - currentUsedCores: number; - newCores: number; - - maxRam: number; - assignedRam: number; - currentUsedRam: number; - newRam: number; + limits: ClientLimit; activated: boolean; forc_url: string; @@ -51,11 +29,32 @@ export class Client { } } - // constructor(host: string, port: string, location: string, id: string) { - // this.host = host; - // this.port = port; - // this.location = location; - // this.id = id; - // } - + setLimit(limit_dict: any) { + const limit = new ClientLimit(); + limit.maxVolumeLimit = limit_dict['volume_storage_limit'] || 0; + limit.assignedVolumesStorage = limit_dict['assigned_volume_gb'] || 0; + limit.currentUsedVolumeStorage = limit_dict['current_used_volume_storage'] || 0; + limit.newVolumeLimit = limit_dict['new_volume_gb'] || 0; + + limit.maxVolumes = limit_dict['volume_counter_limit'] || 0; + limit.assignedVolumes = limit_dict['assigned_volumes'] || 0; + limit.currentUsedVolumes = limit_dict['current_used_volumes'] || 0; + limit.newVolumes = limit_dict['new_volumes'] || 0; + + limit.maxVMs = limit_dict['vms_limit'] || 0; + limit.assignedVMs = limit_dict['assigned_instances'] || 0; + limit.currentUsedVms = limit_dict['current_used_vms'] || 0; + limit.newVms = limit_dict['additional_instances'] || 0; + + limit.maxCores = limit_dict['cores_limit'] || 0; + limit.assignedCores = limit_dict['assigned_cores'] || 0; + limit.currentUsedCores = limit_dict['current_used_cores'] || 0; + limit.newCores = limit_dict['new_cores'] || 0; + + limit.maxRam = limit_dict['ram_limit'] || 0; + limit.assignedRam = limit_dict['assigned_ram'] || 0; + limit.currentUsedRam = limit_dict['current_used_ram'] || 0; + limit.newRam = limit_dict['new_ram'] || 0; + this.limits = limit; + } } diff --git a/src/app/vo_manager/clients/modals/client-limits..component.ts b/src/app/vo_manager/clients/modals/client-limits..component.ts index 2cffe1731f..7c3922f4c8 100644 --- a/src/app/vo_manager/clients/modals/client-limits..component.ts +++ b/src/app/vo_manager/clients/modals/client-limits..component.ts @@ -33,56 +33,6 @@ export class ClientLimitsComponent implements OnDestroy, OnInit { // eslint-disable-next-line no-empty-function } - getComputeCenterClientModificationLimitsAvailable() { - // eslint-disable-next-line max-len - this.facilityService - .getComputeCenterClientLimitsAvailable(this.compute_center_id, this.application.project_application_id.toString()) - .subscribe( - (cl: any) => { - 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 @@ @@ -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/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 @@ - - + - - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +