Skip to content
Snippets Groups Projects
Commit d76523e9 authored by Lukasz Lopatowski's avatar Lukasz Lopatowski
Browse files

Merge branch 'develop' into 'release/1.7.0'

Develop

See merge request !57
parents 7a061b2c 4471d4a0
No related branches found
No related tags found
2 merge requests!65Release/1.7.0,!57Develop
Showing
with 161 additions and 49 deletions
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
<br /> <br />
<a href="https://docs.nmaas.eu/">Explore documentation</a> <a href="https://docs.nmaas.eu/">Explore documentation</a>
· ·
<a href="https://github.com/nmaas-platform/nmaas-portal/issues">Report Bug</a> <a href="https://gitlab.software.geant.org/nmaas/nmaas-portal/-/issues">Report Bug</a>
· ·
<a href="https://github.com/nmaas-platform/nmaas-portal/issues">Request Feature</a> <a href="https://gitlab.software.geant.org/nmaas/nmaas-portal/-/issues">Request Feature</a>
</p> </p>
</div> </div>
......
...@@ -5,7 +5,7 @@ plugins { ...@@ -5,7 +5,7 @@ plugins {
id "org.sonarqube" version "3.2.0" id "org.sonarqube" version "3.2.0"
} }
version = '1.6.4' version = '1.6.5'
task buildGUI(type: Exec) { task buildGUI(type: Exec) {
println 'Building using Angular CLI' println 'Building using Angular CLI'
......
docs/nmaas-logo-blue.png

5.15 KiB | W: | H:

docs/nmaas-logo-blue.png

20.6 KiB | W: | H:

docs/nmaas-logo-blue.png
docs/nmaas-logo-blue.png
docs/nmaas-logo-blue.png
docs/nmaas-logo-blue.png
  • 2-up
  • Swipe
  • Onion skin
docs/nmaas-logo-white.png

5.88 KiB

{ {
"name": "nmaas-portal", "name": "nmaas-portal",
"version": "1.6.4", "version": "1.6.5",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "nmaas-portal", "name": "nmaas-portal",
"version": "1.6.4", "version": "1.6.5",
"license": "Apache 2.0", "license": "Apache 2.0",
"dependencies": { "dependencies": {
"@angular/animations": "15.2.10", "@angular/animations": "15.2.10",
{ {
"name": "nmaas-portal", "name": "nmaas-portal",
"version": "1.6.4", "version": "1.6.5",
"license": "Apache 2.0", "license": "Apache 2.0",
"angular-cli": {}, "angular-cli": {},
"scripts": { "scripts": {
......
...@@ -25,3 +25,7 @@ ...@@ -25,3 +25,7 @@
.pd-top-7 { .pd-top-7 {
padding-top: 7px; padding-top: 7px;
} }
.input-width {
width: 50%;
}
...@@ -107,6 +107,30 @@ ...@@ -107,6 +107,30 @@
[checked]="this.configuration.bulkDomainsSendEmailForNewAccounts === true"> [checked]="this.configuration.bulkDomainsSendEmailForNewAccounts === true">
</div> </div>
</div> </div>
<div class="form-group">
<label for="bulkDeploymentJobCron"
class="col-sm-3 control-label">{{'PORTAL_CONFIGURATION.BULK_DEPLOYMENT_CRON' | translate}}</label>
<div class="col-sm-9 pd-top-7 ">
<div class="input-width">
<input class="form-control" type="text" id="bulkDeploymentJobCron" name="bulkDeploymentJobCron"
[(ngModel)]="this.configuration.bulkDeploymentJobCron">
</div>
</div>
</div>
<div class="form-group">
<label for="parallelDeploymentsLimit"
class="col-sm-3 control-label">{{'PORTAL_CONFIGURATION.BULK_DEPLOYMENT_LIMIT' | translate}}</label>
<div class="col-sm-9 pd-top-7">
<div class="input-width">
<input class="form-control" type="number" id="parallelDeploymentsLimit" name="parallelDeploymentsLimit"
[(ngModel)]="this.configuration.parallelDeploymentsLimit">
</div>
</div>
</div>
<div class="flex justify-content-end"> <div class="flex justify-content-end">
<button class="btn btn-primary" <button class="btn btn-primary"
type="submit">{{ 'PORTAL_CONFIGURATION.SUBMIT_BUTTON' | translate }}</button> type="submit">{{ 'PORTAL_CONFIGURATION.SUBMIT_BUTTON' | translate }}</button>
......
...@@ -35,6 +35,8 @@ import {TimelineModule} from 'primeng/timeline'; ...@@ -35,6 +35,8 @@ import {TimelineModule} from 'primeng/timeline';
import {ButtonModule} from 'primeng/button'; import {ButtonModule} from 'primeng/button';
import {AppLogAccessComponent} from './app-log-access/app-log-access.component'; import {AppLogAccessComponent} from './app-log-access/app-log-access.component';
import {FormioAppConfig, FormioModule} from '@formio/angular'; import {FormioAppConfig, FormioModule} from '@formio/angular';
import {SelectButtonModule} from 'primeng/selectbutton';
@NgModule({ @NgModule({
declarations: [ declarations: [
...@@ -72,6 +74,7 @@ import {FormioAppConfig, FormioModule} from '@formio/angular'; ...@@ -72,6 +74,7 @@ import {FormioAppConfig, FormioModule} from '@formio/angular';
TimelineModule, TimelineModule,
ButtonModule, ButtonModule,
InputTextModule, InputTextModule,
SelectButtonModule,
], ],
exports: [ exports: [
AppInstanceComponent, AppInstanceComponent,
......
...@@ -362,6 +362,9 @@ export class AppInstanceComponent implements OnInit, OnDestroy { ...@@ -362,6 +362,9 @@ export class AppInstanceComponent implements OnInit, OnDestroy {
if (this.intervalCheckerState) { if (this.intervalCheckerState) {
this.intervalCheckerState.unsubscribe(); this.intervalCheckerState.unsubscribe();
} }
if (this.intervalCheckerStateHistory) {
this.intervalCheckerStateHistory.unsubscribe();
}
} }
public redeploy(): void { public redeploy(): void {
......
...@@ -33,3 +33,7 @@ tr.clickable { ...@@ -33,3 +33,7 @@ tr.clickable {
display: block; display: block;
} }
::ng-deep.p-selectbutton .p-button.p-highlight{
background: #233354 !important;
border-color: #233354;
}
...@@ -5,14 +5,17 @@ ...@@ -5,14 +5,17 @@
<div class="col-sm-12 col-sm-12 col-md-12"> <div class="col-sm-12 col-sm-12 col-md-12">
<div style="margin-left: -10px;" class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <div style="margin-left: -10px;" class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<form class="form-inline" role="form"> <form class="form-inline" role="form">
<div class="form-group"> <div class="form-group " style="display: inline-flex; align-items: flex-end">
<label for="selectionType">{{ 'APP_INSTANCES.SHOW' | translate }}: </label> <label class="mr-3" for="selectionType">{{ 'APP_INSTANCES.SHOW' | translate }}: </label>
<select id="selectionType" class="form-control" [(ngModel)]="listSelection" <p-selectButton
(change)="onSelectionChange($event)" [selectedIndex]="listSelection" id="selectionType"
[ngModelOptions]="{standalone: true}"> [options]="selectionOptions"
<option *ngFor="let sl of AppInstanceListSelection | keys" [(ngModel)]="listSelection"
[value]="sl.key">{{ translateEnum(sl.value) | titlecase }}</option> [ngModelOptions]="{standalone: true}"
</select> (ngModelChange)="onSelectionChange($event)"
optionLabel="label"
optionValue="value"
ngDefaultControl/>
</div> </div>
<strong class="checkbox-label" *domainRoles="['ROLE_DOMAIN_ADMIN', 'ROLE_SYSTEM_ADMIN', 'ROLE_OPERATOR'];domainId:domainId"> <strong class="checkbox-label" *domainRoles="['ROLE_DOMAIN_ADMIN', 'ROLE_SYSTEM_ADMIN', 'ROLE_OPERATOR'];domainId:domainId">
{{'APP_INSTANCES.UNDEPLOYED_VISIBLE' | translate}}: {{'APP_INSTANCES.UNDEPLOYED_VISIBLE' | translate}}:
......
...@@ -4,7 +4,7 @@ import {AppInstance, AppInstanceState, parseAppInstanceState} from '../../../mod ...@@ -4,7 +4,7 @@ import {AppInstance, AppInstanceState, parseAppInstanceState} from '../../../mod
import {AppConfigService, AppInstanceService, CustomerSearchCriteria, DomainService} from '../../../service'; import {AppConfigService, AppInstanceService, CustomerSearchCriteria, DomainService} from '../../../service';
import {AuthService} from '../../../auth/auth.service'; import {AuthService} from '../../../auth/auth.service';
import {UserDataService} from '../../../service/userdata.service'; import {UserDataService} from '../../../service/userdata.service';
import {Observable, of} from 'rxjs'; import {forkJoin, Observable, of} from 'rxjs';
import {TranslateService} from '@ngx-translate/core'; import {TranslateService} from '@ngx-translate/core';
import {map} from 'rxjs/operators'; import {map} from 'rxjs/operators';
import {SessionService} from '../../../service/session.service'; import {SessionService} from '../../../service/session.service';
...@@ -55,6 +55,10 @@ export class AppInstanceListComponent implements OnInit { ...@@ -55,6 +55,10 @@ export class AppInstanceListComponent implements OnInit {
public domains: Domain[] = []; public domains: Domain[] = [];
public searchValue = ''; public searchValue = '';
public selectionOptions = [
{ label: this.translateEnum(AppInstanceListSelection.ALL), value: AppInstanceListSelection.ALL },
{ label: this.translateEnum(AppInstanceListSelection.MY), value: AppInstanceListSelection.MY },
];
constructor(private appInstanceService: AppInstanceService, constructor(private appInstanceService: AppInstanceService,
...@@ -94,6 +98,16 @@ export class AppInstanceListComponent implements OnInit { ...@@ -94,6 +98,16 @@ export class AppInstanceListComponent implements OnInit {
this.update(domainId) this.update(domainId)
}); });
forkJoin({
all: this.translateService.get('ENUM.ALL'),
my: this.translateService.get('ENUM.MY')
}).subscribe(translations => {
this.selectionOptions = [
{ label: translations.all, value: AppInstanceListSelection.ALL },
{ label: translations.my, value: AppInstanceListSelection.MY },
];
});
} }
public getDomainNameById(id: number): string { public getDomainNameById(id: number): string {
......
:host ::ng-deep .p-dropdown { :host ::ng-deep .p-dropdown {
width: 300px; width: 300px;
} }
:host ::ng-deep .p-inputtext {
width: 300px;
}
\ No newline at end of file
...@@ -9,8 +9,14 @@ ...@@ -9,8 +9,14 @@
<div style="margin-top: 3rem;"> <div style="margin-top: 3rem;">
<p-dropdown [options]="apps" optionLabel="name" [(ngModel)]="selectedApp" [filter]="true"></p-dropdown> <p-dropdown [options]="apps" optionLabel="name" [(ngModel)]="selectedApp" [filter]="true"></p-dropdown>
</div> </div>
<div class="row" style="margin-top: 3rem;">
<h4>{{'BULK.APP.PARALLEL' | translate}}</h4>
</div>
<div style="margin-top: 3rem;">
<input pInputText type="number" inputId="minmax" mode="decimal" ngDefaultControl [(ngModel)]="parallelDeploymentsLimit" [max]="limitFromConfiguration" [min]="1" />
</div>
<div class="row .navbar-right" style="margin-top: 3rem; display: flex; justify-content: right"> <div class="row .navbar-right" style="margin-top: 3rem; display: flex; justify-content: right">
<button class="btn btn-primary" (click)="selectApp()"> {{'BULK.LIST.CONTINUE' | translate}}</button> <button class="btn btn-primary" [disabled]="selectApp?.name === null || parallelDeploymentsLimit < 1 || parallelDeploymentsLimit > limitFromConfiguration" (click)="selectApp()"> {{'BULK.LIST.CONTINUE' | translate}}</button>
</div> </div>
</div> </div>
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import {ApplicationBase} from '../../../../model/application-base'; import {ApplicationBase} from '../../../../model/application-base';
import {AppsService} from '../../../../service'; import {AppsService, ConfigurationService} from '../../../../service';
import {AppdeploymentService} from '../../appdeployment.service'; import {AppdeploymentService} from '../../appdeployment.service';
import {Router} from '@angular/router'; import {Router} from '@angular/router';
import { FormControl, FormGroup } from '@angular/forms';
@Component({ @Component({
selector: 'app-appselection', selector: 'app-appselection',
...@@ -15,19 +16,46 @@ export class AppdeploymentComponent implements OnInit { ...@@ -15,19 +16,46 @@ export class AppdeploymentComponent implements OnInit {
public selectedApp: ApplicationBase = null; public selectedApp: ApplicationBase = null;
public parallelDeploymentsLimit = 1;
public limitFromConfiguration = 50;
myGroup : FormGroup;
constructor(private readonly appService: AppsService, constructor(private readonly appService: AppsService,
private readonly deployService: AppdeploymentService, private readonly deployService: AppdeploymentService,
private router: Router) { } private router: Router,
private readonly configuration: ConfigurationService) { }
ngOnInit(): void { ngOnInit(): void {
this.appService.getAllActiveApplicationBase().subscribe(data => { this.appService.getAllActiveApplicationBase().subscribe(data => {
data.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1); data.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1);
this.apps = data this.apps = data
}); });
this.configuration.getConfiguration().subscribe(configuration => {
this.limitFromConfiguration = configuration.parallelDeploymentsLimit;
console.log("Limit from config", this.limitFromConfiguration)
this.parallelDeploymentsLimit = configuration.parallelDeploymentsLimit;
})
}
public onKeyPress(event) {
console.log(event);
if(event < 1) {
this.parallelDeploymentsLimit = 1;
console.log("Changing limit to ", this.parallelDeploymentsLimit )
}
if(event > this.limitFromConfiguration ) {
console.log("Changing limit to ", this.limitFromConfiguration)
this.parallelDeploymentsLimit = this.limitFromConfiguration;
}
} }
selectApp() { selectApp() {
this.deployService.setSelectedApp(this.selectedApp); this.deployService.setSelectedApp(this.selectedApp);
this.deployService.setParallel(this.parallelDeploymentsLimit);
this.router.navigate(['admin/apps/bulks/new/upload']) this.router.navigate(['admin/apps/bulks/new/upload'])
} }
} }
...@@ -16,6 +16,7 @@ export class AppdeploymentService { ...@@ -16,6 +16,7 @@ export class AppdeploymentService {
private selectedApp: string = undefined; private selectedApp: string = undefined;
private selectedAppId: string = undefined; private selectedAppId: string = undefined;
private parallelDeploymentsLimit: number = 1;
public result: BulkResponse[] = []; public result: BulkResponse[] = [];
...@@ -40,6 +41,10 @@ export class AppdeploymentService { ...@@ -40,6 +41,10 @@ export class AppdeploymentService {
localStorage.setItem(this.DEPLOY_APP_ID_KEY, this.selectedAppId) localStorage.setItem(this.DEPLOY_APP_ID_KEY, this.selectedAppId)
} }
setParallel(parallel: number ) {
this.parallelDeploymentsLimit = parallel;
}
public getSelectedApp() { public getSelectedApp() {
return this.selectedApp; return this.selectedApp;
} }
...@@ -56,6 +61,7 @@ export class AppdeploymentService { ...@@ -56,6 +61,7 @@ export class AppdeploymentService {
const formParams = new FormData(); const formParams = new FormData();
formParams.append('file', file); formParams.append('file', file);
formParams.append('appName', name) formParams.append('appName', name)
formParams.append('limit', this.parallelDeploymentsLimit.toString())
return this.http.post<BulkDeployment>(this.getUrl() + 'apps', formParams); return this.http.post<BulkDeployment>(this.getUrl() + 'apps', formParams);
} }
......
...@@ -99,10 +99,10 @@ ...@@ -99,10 +99,10 @@
<li *ngIf="mode === bulkTypeApp"> <li *ngIf="mode === bulkTypeApp">
<a [routerLink]="['/admin/apps/bulks/', bulk?.id]">{{ 'BULK.LIST.DETAILS' | translate }}</a> <a [routerLink]="['/admin/apps/bulks/', bulk?.id]">{{ 'BULK.LIST.DETAILS' | translate }}</a>
</li> </li>
<li *ngIf="mode === bulkTypeApp"> <li *ngIf="mode === bulkTypeApp && bulk?.state !== 'REMOVED'">
<a (click)="getAppBulkDetails(bulk?.id)"> {{"BULK.APP.DOWNLOAD_CSV" | translate}}</a> <a (click)="getAppBulkDetails(bulk?.id)"> {{"BULK.APP.DOWNLOAD_CSV" | translate}}</a>
</li> </li>
<li *ngIf="mode === bulkTypeApp"> <li *ngIf="mode === bulkTypeApp && bulk?.state !== 'REMOVED' ">
<a (click)="modal.show()">{{ 'BULK.LIST.REMOVE' | translate }}</a> <a (click)="modal.show()">{{ 'BULK.LIST.REMOVE' | translate }}</a>
</li> </li>
</ul> </ul>
......
...@@ -63,7 +63,9 @@ ...@@ -63,7 +63,9 @@
<td>{{getDomainName(response)}}</td> <td>{{getDomainName(response)}}</td>
<td>{{getDomainCodeName(response)}}</td> <td>{{getDomainCodeName(response)}}</td>
<td style="width: 5%" class="text-right"> <td style="width: 5%" class="text-right">
<span class="dropdown"> <i *ngIf="response.type === 'DOMAIN'" class="pi pi-search" style="font-size: 1.8rem; cursor: pointer" [routerLink]="['/admin/domains/view/', response?.details['domainId']]"></i>
<i *ngIf="response.type === 'USER'" class="pi pi-search" style="font-size: 1.8rem; cursor: pointer" [routerLink]="['/admin/users/view', response?.details['userId']]"></i>
<!-- <span class="dropdown">
<a style="display: inline-block" class="dropdown-toggle " aria-expanded="false" aria-haspopup="true" <a style="display: inline-block" class="dropdown-toggle " aria-expanded="false" aria-haspopup="true"
data-toggle="dropdown" href="#" role="button"> data-toggle="dropdown" href="#" role="button">
<em class="fas fa-cog icon-black icon-bigger"></em> <em class="fas fa-cog icon-black icon-bigger"></em>
...@@ -76,7 +78,7 @@ ...@@ -76,7 +78,7 @@
<a [routerLink]="['/admin/users/view', response?.details['userId']]">{{ 'BULK.LIST.MOVE_USER' | translate }}</a> <a [routerLink]="['/admin/users/view', response?.details['userId']]">{{ 'BULK.LIST.MOVE_USER' | translate }}</a>
</li> </li>
</ul> </ul>
</span> </span> -->
</td> </td>
</tr> </tr>
</ng-template> </ng-template>
...@@ -114,7 +116,10 @@ ...@@ -114,7 +116,10 @@
<td>{{getUsername(response)}}</td> <td>{{getUsername(response)}}</td>
<td>{{getEmail(response)}}</td> <td>{{getEmail(response)}}</td>
<td style="width: 5%" class="text-right"> <td style="width: 5%" class="text-right">
<span class="dropdown"> <i *ngIf="response.type === 'DOMAIN'" class="pi pi-search" style="font-size: 1.8rem; cursor: pointer" [routerLink]="['/admin/domains/view/', response?.details['domainId']]"></i>
<i *ngIf="response.type === 'USER'" class="pi pi-search" style="font-size: 1.8rem; cursor: pointer" [routerLink]="['/admin/users/view', response?.details['userId']]"></i>
<!-- <span class="dropdown">
<a style="display: inline-block" class="dropdown-toggle " aria-expanded="false" aria-haspopup="true" <a style="display: inline-block" class="dropdown-toggle " aria-expanded="false" aria-haspopup="true"
data-toggle="dropdown" href="#" role="button"> data-toggle="dropdown" href="#" role="button">
<em class="fas fa-cog icon-black icon-bigger"></em> <em class="fas fa-cog icon-black icon-bigger"></em>
...@@ -127,7 +132,7 @@ ...@@ -127,7 +132,7 @@
<a [routerLink]="['/admin/users/view', response?.details['userId']]">{{ 'BULK.LIST.MOVE_USER' | translate }}</a> <a [routerLink]="['/admin/users/view', response?.details['userId']]">{{ 'BULK.LIST.MOVE_USER' | translate }}</a>
</li> </li>
</ul> </ul>
</span> </span> -->
</td> </td>
</tr> </tr>
</ng-template> </ng-template>
...@@ -141,7 +146,12 @@ ...@@ -141,7 +146,12 @@
</div> </div>
<div *ngIf="bulk && bulkType === 'APPLICATION' "> <div *ngIf="bulk && bulkType === 'APPLICATION' ">
<h3>{{'BULK.APP.VIEW_HEADER' | translate}}</h3> <div class="flex justify-content-between">
<h3>{{'BULK.APP.VIEW_HEADER' | translate}}</h3>
<img alt="App logo" style="width: 50px"
[src]="(appImagesService.getAppLogoUrl(bulk.details['appId']) | secure) || 'assets/images/app-logo-example.png'"/>
</div>
<div class="" style="padding-bottom: 5rem; margin-top: 3rem"> <div class="" style="padding-bottom: 5rem; margin-top: 3rem">
<label for="id" class="col-sm-2 control-label text-right mt-2">{{ 'BULK.LIST.ID' | translate }}</label> <label for="id" class="col-sm-2 control-label text-right mt-2">{{ 'BULK.LIST.ID' | translate }}</label>
<div class="col-sm-10"> <div class="col-sm-10">
...@@ -168,7 +178,7 @@ ...@@ -168,7 +178,7 @@
</div> </div>
</div> </div>
<div class="form-group" style="padding-bottom: 5rem"> <div class="" style="padding-bottom: 5rem">
<label for="state" <label for="state"
class="col-sm-2 control-label text-right mt-2">{{ 'BULK.LIST.STATE' | translate }}</label> class="col-sm-2 control-label text-right mt-2">{{ 'BULK.LIST.STATE' | translate }}</label>
<div class="col-sm-10"> <div class="col-sm-10">
...@@ -176,6 +186,21 @@ ...@@ -176,6 +186,21 @@
placeholder="{{'BULK.STATE.' + bulk.state | translate}}"> placeholder="{{'BULK.STATE.' + bulk.state | translate}}">
</div> </div>
</div> </div>
<div class="" style="padding-bottom: 5rem;">
<label for="id" class="col-sm-2 control-label text-right mt-2">{{ 'BULK.LIST.APP_NAME' | translate }}</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="id" name="id" [disabled]="true"
[(ngModel)]="bulk.details['appName']" #name="ngModel">
</div>
</div>
<div class="flex justify-content-end" style="padding-right: 1.5rem">
<button class="btn btn-primary mr-2" (click)="refreshStates()">{{'BULK.APP.REFRESH' | translate}}</button>
<button class="btn btn-primary" (click)="getAppBulkDetails(this.bulkId)">{{'BULK.APP.DOWNLOAD_CSV' | translate}}</button>
</div>
<div class="panel panel-default" style="margin-top: 3rem"> <div class="panel panel-default" style="margin-top: 3rem">
<div class="panel-heading"> <div class="panel-heading">
...@@ -187,22 +212,7 @@ ...@@ -187,22 +212,7 @@
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="flex flex-row mb-3 justify-content-between">
<div class="flex ml-2 mr-2">
<img alt="App logo" style="width: 50px"
[src]="(appImagesService.getAppLogoUrl(bulk.details['appId']) | secure) || 'assets/images/app-logo-example.png'"/>
<div class="flex align-items-center ml-2">
{{bulk.details['appName']}}
</div>
</div>
<div class="flex justify-content-end">
<button class="btn btn-primary mr-2" (click)="refreshStates()">{{'BULK.APP.REFRESH' | translate}}</button>
<button class="btn btn-primary" (click)="getAppBulkDetails(this.bulkId)">{{'BULK.APP.DOWNLOAD_CSV' | translate}}</button>
</div>
</div>
<table class="table table-hover table-condensed" aria-describedby="Domains in Group table"> <table class="table table-hover table-condensed" aria-describedby="Domains in Group table">
<thead> <thead>
<tr #column> <tr #column>
...@@ -218,7 +228,7 @@ ...@@ -218,7 +228,7 @@
*ngIf="response.state == 'PROCESSING'" *ngIf="response.state == 'PROCESSING'"
class="pi pi-spin pi-spinner ml-1" class="pi pi-spin pi-spinner ml-1"
style="font-size: 1.4rem"></em> style="font-size: 1.4rem"></em>
<em *ngIf="response.state == 'FAILED'" class="pi pi-info-circle" <em *ngIf="response.state == 'FAILED' && response?.details['appInstanceId'] === undefined" class="pi pi-info-circle"
style="font-size: 1.4rem" style="font-size: 1.4rem"
pTooltip="{{response?.details['errorMessage']}}" pTooltip="{{response?.details['errorMessage']}}"
tooltipStyleClass="p-tooltip-width " [fitContent]="false"></em></td> tooltipStyleClass="p-tooltip-width " [fitContent]="false"></em></td>
...@@ -226,8 +236,9 @@ ...@@ -226,8 +236,9 @@
<td>{{getAppInstanceName(response)}}</td> <td>{{getAppInstanceName(response)}}</td>
<td>{{getDomainCodeName(response)}}</td> <td>{{getDomainCodeName(response)}}</td>
<td style="width: 5%" class="text-right"> <td style="width: 5%" class="text-right">
<span class="dropdown"> <i class="pi pi-search" style="font-size: 1.8rem; cursor: pointer" [routerLink]="['/instances/', response?.details['appInstanceId']]"></i>
<a style="display: inline-block" class="dropdown-toggle " aria-expanded="false" aria-haspopup="true" <!-- <span *ngIf="response?.details['appInstanceId'] !== undefined" class="dropdown">
<a style="display: inline-block" class="dropdown-toggle " aria-expanded="false" aria-haspopup="true"
data-toggle="dropdown" href="#" role="button"> data-toggle="dropdown" href="#" role="button">
<em class="fas fa-cog icon-black icon-bigger"></em> <em class="fas fa-cog icon-black icon-bigger"></em>
</a> </a>
...@@ -235,11 +246,11 @@ ...@@ -235,11 +246,11 @@
<li *ngIf="response.type === 'APPLICATION' && response?.details['appInstanceId'] !== undefined"> <li *ngIf="response.type === 'APPLICATION' && response?.details['appInstanceId'] !== undefined">
<a [routerLink]="['/instances/', response?.details['appInstanceId']]">{{ 'BULK.LIST.MOVE_APP' | translate }}</a> <a [routerLink]="['/instances/', response?.details['appInstanceId']]">{{ 'BULK.LIST.MOVE_APP' | translate }}</a>
</li> </li>
<!-- <li *ngIf="response.type === 'APPLICATION' && response.state !== 'COMPLETED'"> <li *ngIf="response.type === 'APPLICATION' && response.state !== 'COMPLETED'">
<a>{{ 'BULK.APP.CHECK_STATE' | translate }}</a> <a>{{ 'BULK.APP.CHECK_STATE' | translate }}</a>
</li> --> </li>
</ul> </ul>
</span> </span> -->
</td> </td>
</tr> </tr>
</ng-template> </ng-template>
......
...@@ -9,6 +9,7 @@ export class BulkDeployment { ...@@ -9,6 +9,7 @@ export class BulkDeployment {
public state: BulkDeploymentState; public state: BulkDeploymentState;
public type: BulkType; public type: BulkType;
public details: Map<string, string>; public details: Map<string, string>;
public parallelDeploymentsLimit: number;
} }
export enum BulkDeploymentState { export enum BulkDeploymentState {
...@@ -16,5 +17,6 @@ export enum BulkDeploymentState { ...@@ -16,5 +17,6 @@ export enum BulkDeploymentState {
PROCESSING= 'PROCESSING', PROCESSING= 'PROCESSING',
COMPLETED= 'COMPLETED', COMPLETED= 'COMPLETED',
FAILED= 'FAILED', FAILED= 'FAILED',
PARTIALLY_FAILED= 'PARTIALLY_FAILED' PARTIALLY_FAILED= 'PARTIALLY_FAILED',
REMOVED = 'REMOVED'
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment