You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by dg...@apache.org on 2020/06/09 12:57:33 UTC
[incubator-dlab] branch develop updated: [DLAB-1737]: Alter
information messages if remove user from group and if remove group from the
project (#782)
This is an automated email from the ASF dual-hosted git repository.
dgnatyshyn pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/develop by this push:
new d14b322 [DLAB-1737]: Alter information messages if remove user from group and if remove group from the project (#782)
d14b322 is described below
commit d14b322dfdc0e5191bc7c8c9d1cd357b53b65994
Author: Dmytro Gnatyshyn <42...@users.noreply.github.com>
AuthorDate: Tue Jun 9 15:57:26 2020 +0300
[DLAB-1737]: Alter information messages if remove user from group and if remove group from the project (#782)
---
.../project/project-form/project-form.component.ts | 50 +++++++++++++++++-----
.../app/administration/roles/roles.component.ts | 4 +-
.../confirmation-dialog-type.enum.ts | 1 +
.../confirmation-dialog.component.html | 14 +++---
.../confirmation-dialog.component.ts | 30 +++++++------
.../confirmation-dialog.model.ts | 3 ++
6 files changed, 71 insertions(+), 31 deletions(-)
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts
index 683e7d7..cfa8f98 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts
@@ -28,8 +28,10 @@ import { ProjectDataService } from '../project-data.service';
import { CheckUtils, FileUtils, PATTERNS } from '../../../core/util';
import { Project } from '../project.component';
import { DICTIONARY } from '../../../../dictionary/global.dictionary';
+import {ConfirmationDialogComponent} from '../../../shared/modal-dialog/confirmation-dialog';
+import {MatDialog} from '@angular/material/dialog';
-export interface GenerateKey { privateKey: string, publicKey: string };
+export interface GenerateKey { privateKey: string; publicKey: string; }
@Component({
selector: 'project-form',
@@ -62,7 +64,8 @@ export class ProjectFormComponent implements OnInit {
private rolesService: RolesGroupsService,
private endpointService: EndpointService,
private userAccessKeyService: UserAccessKeyService,
- private cd: ChangeDetectorRef
+ private cd: ChangeDetectorRef,
+ public dialog: MatDialog,
) { }
ngOnInit() {
@@ -79,12 +82,34 @@ export class ProjectFormComponent implements OnInit {
}
}
+ private updateProject(data: any) {
+ this.projectService.updateProject(data).subscribe(() => {
+ this.toastr.success('Project updated successfully!', 'Success!');
+ this.update.emit();
+ }, error => this.toastr.error(error.message || 'Project update failed!', 'Oops!'));
+ }
+
public confirm(data) {
if (this.item) {
- this.projectService.updateProject(data).subscribe(() => {
- this.toastr.success('Project updated successfully!', 'Success!');
- this.update.emit();
- }, error => this.toastr.error(error.message || 'Project update failed!', 'Oops!'));
+ const deletedGroups = this.item.groups.filter((v) => !(this.projectForm.value.groups.includes(v)));
+ if (deletedGroups.length) {
+ this.dialog.open(ConfirmationDialogComponent, {
+ data: {notebook: deletedGroups, type: 5, manageAction: true}, panelClass: 'modal-md'
+ }).afterClosed().subscribe((res) => {
+ if (!res) {
+ this.projectForm.patchValue({
+ groups: this.item.groups
+ });
+ return;
+ } else {
+ this.updateProject(data);
+ }
+ }
+ );
+ } else {
+ this.updateProject(data);
+ }
+
} else {
this.projectService.createProject(data).subscribe(() => {
this.toastr.success('Project creation is processing!', 'Success!');
@@ -138,16 +163,19 @@ export class ProjectFormComponent implements OnInit {
});
}
+
public selectOptions(list, key, select?) {
- let filter = key === 'endpoints' ? list.map(el => el.name) : list;
+ const filter = key === 'endpoints' ? list.map(el => el.name) : list;
this.projectForm.controls[key].setValue(select ? filter : []);
}
-
private initFormModel(): void {
this.projectForm = this._fb.group({
'key': ['', Validators.required],
- 'name': ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.projectName), this.checkDuplication.bind(this), this.providerMaxLength.bind(this)])],
+ 'name': ['', Validators.compose([Validators.required,
+ Validators.pattern(PATTERNS.projectName),
+ this.checkDuplication.bind(this),
+ this.providerMaxLength.bind(this)])],
'endpoints': [[], Validators.required],
'tag': ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.projectName)])],
'groups': [[], Validators.required],
@@ -185,7 +213,9 @@ export class ProjectFormComponent implements OnInit {
private getGroupsData() {
this.rolesService.getGroupsData().subscribe(
- (list: any) => this.groupsList = list.map(el => el.group),
+ (list: any) => {
+ this.groupsList = list.map(el => el.group);
+ },
error => this.toastr.error(error.message, 'Oops!'));
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/roles/roles.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/roles/roles.component.ts
index c3fa1a6..0efcb44 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/roles/roles.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/roles/roles.component.ts
@@ -297,7 +297,9 @@ export class RolesComponent implements OnInit {
<button type="button" class="close" (click)="dialogRef.close()">×</button>
</div>
<div mat-dialog-content class="content">
- <p *ngIf="data.user">User <span class="strong">{{ data.user }}</span> will be deleted from <span class="strong">{{ data.group }}</span> group.</p>
+
+ <p *ngIf="data.user">User <span class="strong">{{ data.user }}</span> will be deleted from <span class="strong">{{ data.group }}</span> group.
+ </p>
<p *ngIf="data.id">Group <span class="ellipsis group-name strong">{{ data.group }}</span> will be decommissioned.</p>
<p class="m-top-20"><span class="strong">Do you want to proceed?</span></p>
</div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog-type.enum.ts b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog-type.enum.ts
index ca05251..d6207c2 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog-type.enum.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog-type.enum.ts
@@ -23,4 +23,5 @@ export enum ConfirmationDialogType {
TerminateComputationalResources = 2,
StopEdgeNode = 3,
deleteUser = 4,
+ deleteGroup
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.html
index b80443a..b865840 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.html
@@ -20,10 +20,11 @@
<div id="dialog-box" class="confirmation-dialog">
<header class="dialog-header">
<h4 class="modal-title">
- <span *ngIf="model.notebook.name && model.notebook.name !== 'edge node'">
+
+ <span *ngIf="data.type !== 5 && model.notebook.name && model.notebook.name !== 'edge node'">
<span>{{ confirmationType ? 'Terminate' : 'Stop' }} notebook: {{ model.notebook.name }}</span>
</span>
- <span *ngIf="model.notebook.type === 'Edge Node' || model.notebook.name === 'edge node' || data.type === 4 && data.notebook.length">
+ <span *ngIf="model.notebook.type === 'Edge Node' || model.notebook.name === 'edge node' || data.type === 4 && data.notebook.length || data.type === 5 ">
<i class="material-icons">priority_high</i>Warning
</span>
<span *ngIf="data.type === 4 && !data.notebook.length">
@@ -34,11 +35,12 @@
</header>
<div class="dialog-content">
<div class="content-box">
- <p *ngIf="data.type !== 4" class="info text-center">{{ model.title }}</p>
+ <p *ngIf="data.type !== 4 && data.type !== 5" class="info text-center">{{ model.title }}</p>
<div *ngIf="data.type === 4" class="text-center m-bot-20">
<h3 class="strong">Group data will be updated.</h3>
</div>
- <p *ngIf="data.type === 4 && data.notebook.length" class="text-center delete-user">User<span *ngIf="data.notebook.length>1">s</span> <span class="strong"> {{data.notebook.join(', ')}} </span>will be deleted from this group.</p>
+ <p *ngIf="data.type === 4 && data.notebook.length" class="text-center delete-user">User<span *ngIf="data.notebook.length>1">s</span> <span class="strong"> {{data.notebook.join(', ')}} </span>will be removed from this group. Removing may prevent the user<span *ngIf="data.notebook.length>1">s</span> to access {{data.notebook.length>1 ? 'their' : 'his/her'}} resources</p>
+ <p *ngIf="data.type === 5" class="text-center delete-user">Removing the group<span *ngIf="data.notebook.length>1">s</span> <span class="strong">{{' ' + data.notebook}}</span> from the project may prevent the users from this group<span *ngIf="data.notebook.length>1">s</span> to access their resources</p>
<!-- All <span *ngIf="data.notebook.length===1">his</span><span *ngIf="data.notebook.length>1">their</span> resources authorized within this group will be terminated.-->
<mat-list class="resources"
[hidden]="model.notebook.type === 'Edge Node' || model.notebook.name === 'edge node'
@@ -65,8 +67,8 @@
</div>
<div class="text-center m-top-20">
<button mat-raised-button type="button" class="butt action" (click)="dialogRef.close()">No</button>
- <button *ngIf="data.type !== 4" mat-raised-button type="button" class="butt butt-success action" (click)="confirm()">Yes</button>
- <button *ngIf="data.type === 4" mat-raised-button type="button" class="butt butt-success action" (click)="dialogRef.close(true)">Yes</button>
+ <button *ngIf="data.type !== 4 && data.type !== 5" mat-raised-button type="button" class="butt butt-success action" (click)="confirm()">Yes</button>
+ <button *ngIf="data.type === 4 || data.type === 5" mat-raised-button type="button" class="butt butt-success action" (click)="dialogRef.close(true)">Yes</button>
</div>
</div>
</div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.ts
index d0b5c9b..b8a2cff 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.component.ts
@@ -60,21 +60,23 @@ export class ConfirmationDialogComponent implements OnInit {
}
ngOnInit() {
- this.confirmationType = this.data.type;
- this.notebook = this.data.notebook;
- this.model = new ConfirmationDialogModel(this.confirmationType, this.notebook,
- response => {
- if (response.status === HTTP_STATUS_CODES.OK) this.dialogRef.close();
- },
- error => this.toastr.error(error.message || 'Action failed!', 'Oops'),
- this.data.manageAction,
- this.userResourceService,
- this.healthStatusService,
- this.manageEnvironmentsService);
+ if(this.data.type !== 5){
+ this.confirmationType = this.data.type;
+ this.notebook = this.data.notebook;
+ this.model = new ConfirmationDialogModel(this.confirmationType, this.notebook,
+ response => {
+ if (response.status === HTTP_STATUS_CODES.OK) this.dialogRef.close();
+ },
+ error => this.toastr.error(error.message || 'Action failed!', 'Oops'),
+ this.data.manageAction,
+ this.userResourceService,
+ this.healthStatusService,
+ this.manageEnvironmentsService);
- if (!this.confirmationType) this.filterResourcesByType(this.notebook.resources);
- this.isAliveResources = this.model.isAliveResources(this.notebook.resources);
- this.onlyKilled = this.notebook.resources ? !this.notebook.resources.some(el => el.status !== 'terminated' && el.status !== 'failed') : false;
+ if (!this.confirmationType) this.filterResourcesByType(this.notebook.resources);
+ this.isAliveResources = this.model.isAliveResources(this.notebook.resources);
+ this.onlyKilled = this.notebook.resources ? !this.notebook.resources.some(el => el.status !== 'terminated' && el.status !== 'failed') : false;
+ }
}
public confirm() {
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.model.ts b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.model.ts
index 79b0512..71abde3 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.model.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/confirmation-dialog/confirmation-dialog.model.ts
@@ -124,6 +124,9 @@ export class ConfirmationDialogModel {
error => fnProcessErrors(error));
}
break;
+ case ConfirmationDialogType.deleteGroup: {
+ }
+ break;
default: {
this.title = this.isAliveResources(notebook.resources) ? containRunningResourcesTerminateMessage : defaultTerminateMessage;
this.notebook = notebook;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org