fix(console): application state, add project role bulk, user grant explanations, i18n, ngsw update prompt #341

This commit is contained in:
Max Peintner 2020-07-03 15:07:43 +02:00 committed by GitHub
parent 7b67b55f4e
commit 73a4b7baef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 42 additions and 24 deletions

View File

@ -19,7 +19,8 @@
<mat-menu #menu="matMenu"> <mat-menu #menu="matMenu">
<mat-progress-bar *ngIf="orgLoading" color="accent" mode="indeterminate"></mat-progress-bar> <mat-progress-bar *ngIf="orgLoading" color="accent" mode="indeterminate"></mat-progress-bar>
<button class="show-all" mat-menu-item [routerLink]="[ '/org/overview' ]">Show all organizations</button> <button class="show-all" mat-menu-item
[routerLink]="[ '/org/overview' ]">{{'MENU.SHOWORGS' | translate}}</button>
<button [ngClass]="{'active': temporg.id === org?.id}" [disabled]="!temporg.id" *ngFor="let temporg of orgs" <button [ngClass]="{'active': temporg.id === org?.id}" [disabled]="!temporg.id" *ngFor="let temporg of orgs"
mat-menu-item (click)="setActiveOrg(temporg)"> mat-menu-item (click)="setActiveOrg(temporg)">

View File

@ -144,13 +144,13 @@ export class AppDetailComponent implements OnInit, OnDestroy {
public changeState(event: MatButtonToggleChange): void { public changeState(event: MatButtonToggleChange): void {
if (event.value === AppState.APPSTATE_ACTIVE) { if (event.value === AppState.APPSTATE_ACTIVE) {
this.projectService.ReactivateApplication(this.app.id).then(() => { this.projectService.ReactivateApplication(this.projectId, this.app.id).then(() => {
this.toast.showInfo('Reactivated Application'); this.toast.showInfo('Reactivated Application');
}).catch((error: any) => { }).catch((error: any) => {
this.toast.showError(error.message); this.toast.showError(error.message);
}); });
} else if (event.value === AppState.APPSTATE_INACTIVE) { } else if (event.value === AppState.APPSTATE_INACTIVE) {
this.projectService.DectivateApplication(this.app.id).then(() => { this.projectService.DeactivateApplication(this.projectId, this.app.id).then(() => {
this.toast.showInfo('Deactivated Application'); this.toast.showInfo('Deactivated Application');
}).catch((error: any) => { }).catch((error: any) => {
this.toast.showError(error.message); this.toast.showError(error.message);

View File

@ -10,10 +10,11 @@
<ng-container *ngIf="currentCreateStep === 1"> <ng-container *ngIf="currentCreateStep === 1">
<h1>{{'PROJECT.GRANT.CREATE.SEL_ORG' | translate}}</h1> <h1>{{'PROJECT.GRANT.CREATE.SEL_ORG' | translate}}</h1>
<p>{{'PROJECT.GRANT.CREATE.SEL_ORG_DESC' | translate}}</p>
<form (ngSubmit)="searchOrg(domain.value)"> <form (ngSubmit)="searchOrg(domain.value)">
<mat-form-field class="org-domain"> <mat-form-field class="org-domain">
<mat-label>{{'PROJECT.GRANT.CREATE.SEL_ORG' | translate}}</mat-label> <mat-label>{{'PROJECT.GRANT.CREATE.SEL_ORG_FORMFIELD' | translate}}</mat-label>
<input #domain matInput /> <input #domain matInput />
</mat-form-field> </mat-form-field>

View File

@ -84,12 +84,15 @@ export class ProjectRoleCreateComponent implements OnInit, OnDestroy {
} }
public addRole(): void { public addRole(): void {
const promises = this.formArray.value.map((role: ProjectRoleAdd.AsObject) => { const rolesToAdd: ProjectRoleAdd[] = this.formArray.value.map((element: any) => {
role.id = this.projectId; const role = new ProjectRoleAdd();
return this.projectService.AddProjectRole(role); role.setKey(element.key);
role.setDisplayName(element.displayName);
role.setGroup(element.group);
return role;
}); });
Promise.all(promises).then(() => { this.projectService.BulkAddProjectRole(this.projectId, rolesToAdd).then(() => {
this.router.navigate(['projects', this.projectId]); this.router.navigate(['projects', this.projectId]);
}).catch(data => { }).catch(data => {
this.toast.showError(data.message); this.toast.showError(data.message);

View File

@ -25,7 +25,7 @@
</ng-container> </ng-container>
<ng-container *ngIf="filter && filter == UserGrantSearchKey.USERGRANTSEARCHKEY_PROJECT_ID"> <ng-container *ngIf="filter && filter == UserGrantSearchKey.USERGRANTSEARCHKEY_PROJECT_ID">
<h1>{{'PROJECT.GRANT.CREATE.SEL_PROJECT' | translate}}</h1> <h1>{{'PROJECT.GRANT.CREATE.SEL_USER' | translate}}</h1>
<app-search-user-autocomplete class="block" singleOutput="true" (selectionChanged)="selectUser($event)"> <app-search-user-autocomplete class="block" singleOutput="true" (selectionChanged)="selectUser($event)">
</app-search-user-autocomplete> </app-search-user-autocomplete>

View File

@ -297,9 +297,11 @@ export class ProjectService {
); );
} }
public async ReactivateApplication(appId: string): Promise<Application> { public async ReactivateApplication(projectId: string, appId: string): Promise<Application> {
const req = new ApplicationID(); const req = new ApplicationID();
req.setId(appId); req.setId(appId);
req.setProjectId(projectId);
return await this.request( return await this.request(
c => c.reactivateApplication, c => c.reactivateApplication,
req, req,
@ -307,9 +309,11 @@ export class ProjectService {
); );
} }
public async DectivateApplication(projectId: string): Promise<Application> { public async DeactivateApplication(projectId: string, appId: string): Promise<Application> {
const req = new ApplicationID(); const req = new ApplicationID();
req.setId(projectId); req.setId(appId);
req.setProjectId(projectId);
return await this.request( return await this.request(
c => c.deactivateApplication, c => c.deactivateApplication,
req, req,

View File

@ -2,12 +2,13 @@ import { Injectable } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import { SwUpdate } from '@angular/service-worker'; import { SwUpdate } from '@angular/service-worker';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class UpdateService { export class UpdateService {
constructor(private swUpdate: SwUpdate, snackbar: MatSnackBar) { constructor(private swUpdate: SwUpdate, snackbar: MatSnackBar) {
this.swUpdate.checkForUpdate();
this.swUpdate.available.subscribe((evt) => { this.swUpdate.available.subscribe((evt) => {
const snack = snackbar.open('Update Available', 'Reload'); const snack = snackbar.open('Update Available', 'Reload');

View File

@ -27,7 +27,8 @@
"USER": "Benutzer", "USER": "Benutzer",
"LOGOUT": "abmelden", "LOGOUT": "abmelden",
"NEWORG":"Neue Organisation", "NEWORG":"Neue Organisation",
"IAMADMIN":"Sie sind ein IAM Administrator. Sie haben erweiterte Berechtigungen!" "IAMADMIN":"Sie sind ein IAM Administrator. Sie haben erweiterte Berechtigungen!",
"SHOWORGS":"Alle organisationen anzeigen"
}, },
"ACTIONS": { "ACTIONS": {
"SAVE": "speichern", "SAVE": "speichern",
@ -355,17 +356,20 @@
"USERID":"User Id" "USERID":"User Id"
}, },
"GRANT": { "GRANT": {
"TITLE": "Grants", "TITLE": "Berechtigte Organisationen",
"DESCRIPTION": "Gewähren Sie einer anderen Organisation Zugriff (Grant) auf dieses Projekt", "DESCRIPTION": "Gewähren Sie einer anderen Organisation Zugriff (Grant) auf dieses Projekt",
"CREATE": { "CREATE": {
"TITLE": "Member Grant erstellen", "TITLE": "Organisation berechtigen",
"SEL_USERS": "Selektieren Sie die gewünschten User für das Erstellen des Grants!", "SEL_USERS": "Selektieren Sie die gewünschten User für das Erstellen des Grants!",
"SEL_ROLES": "Selektieren Sie die gewünschten Rollen für das Erstellen des Grants!", "SEL_ROLES": "Selektieren Sie die gewünschten Rollen für das Erstellen des Grants!",
"SEL_PROJECT": "Suchen Sie nach dem Projekt", "SEL_PROJECT": "Suchen Sie nach dem Projekt",
"SEL_USER":"Suchen Sie nach einem User",
"SEL_ORG": "Suchen Sie nach der Domain", "SEL_ORG": "Suchen Sie nach der Domain",
"SEL_ORG_DESC":"Geben Sie die vollständige Domain ein um Resultate zu erhalten!",
"ORG_TITLE":"Organisation", "ORG_TITLE":"Organisation",
"ORG_DESCRIPTION":"Sie sind im Begriff einen Nutzer für die Organisation {{name}} zu berechtigen", "ORG_DESCRIPTION":"Sie sind im Begriff einen Nutzer für die Organisation {{name}} zu berechtigen",
"ORG_DESCRIPTION_DESC":"Wechseln Sie den Context um die Organisation zu wechseln!", "ORG_DESCRIPTION_DESC":"Wechseln Sie den Context um die Organisation zu wechseln!",
"SEL_ORG_FORMFIELD":"Vollständige Domain",
"SEL_ORG_BUTTON": "Suche Organisation", "SEL_ORG_BUTTON": "Suche Organisation",
"FOR_ORG":"The grant wird erstellt für:" "FOR_ORG":"The grant wird erstellt für:"
}, },
@ -377,7 +381,7 @@
"USER":"Benutzer", "USER":"Benutzer",
"MEMBERS":"Managers", "MEMBERS":"Managers",
"PROJECTNAME":"Projekt Name", "PROJECTNAME":"Projekt Name",
"GRANTEDORG": "Granted Organization", "GRANTEDORG": "Granted Organisation",
"GRANTEDORGDOMAIN": "Domain", "GRANTEDORGDOMAIN": "Domain",
"GRANTEDORGNAME":"Org Name", "GRANTEDORGNAME":"Org Name",
"CREATIONDATE": "Erstelldatum", "CREATIONDATE": "Erstelldatum",

View File

@ -27,7 +27,8 @@
"USER": "Users", "USER": "Users",
"LOGOUT": "Log out", "LOGOUT": "Log out",
"NEWORG":"New Organization", "NEWORG":"New Organization",
"IAMADMIN":"You are an IAM Administrator. Note that you have enhanced permissions!" "IAMADMIN":"You are an IAM Administrator. Note that you have enhanced permissions!",
"SHOWORGS":"Show all organizations"
}, },
"ACTIONS": { "ACTIONS": {
"SAVE": "Save", "SAVE": "Save",
@ -284,7 +285,7 @@
} }
}, },
"ORG_DETAIL": { "ORG_DETAIL": {
"TITLE": "Organisation", "TITLE": "Organization",
"DESCRIPTION": "Here you can edit your organization configuration and manage members", "DESCRIPTION": "Here you can edit your organization configuration and manage members",
"DETAIL": { "DETAIL": {
"TITLE": "Detail", "TITLE": "Detail",
@ -356,18 +357,21 @@
"USERID":"User Id" "USERID":"User Id"
}, },
"GRANT": { "GRANT": {
"TITLE": "Grants", "TITLE": "Granted organizations",
"DESCRIPTION": "Allow an other organization to use your project", "DESCRIPTION": "Allow an other organization to use your project",
"CREATE": { "CREATE": {
"TITLE": "Create Member Grant", "TITLE": "Create organization grant",
"SEL_USERS": "Select the users you wish to grant", "SEL_USERS": "Select the users you wish to grant",
"SEL_PROJECT": "Search for a project", "SEL_PROJECT": "Search for a project",
"SEL_ROLES": "Select the roles you want to be added to the grant", "SEL_ROLES": "Select the roles you want to be added to the grant",
"SEL_ORG": "Search for the domain", "SEL_USER":"Search for a user",
"SEL_ORG": "Set the domain",
"SEL_ORG_DESC":"Enter the complete domain to specify the organization to grant!",
"ORG_TITLE":"Organization", "ORG_TITLE":"Organization",
"ORG_DESCRIPTION":"You are about to grant a user for the organization {{name}}", "ORG_DESCRIPTION":"You are about to grant a user for the organization {{name}}",
"ORG_DESCRIPTION_DESC":"Switch the context in the header above to grant a user for another organization", "ORG_DESCRIPTION_DESC":"Switch the context in the header above to grant a user for another organization",
"SEL_ORG_BUTTON": "Search Organization", "SEL_ORG_FORMFIELD":"Complete Domain",
"SEL_ORG_BUTTON": "Set Organization",
"FOR_ORG":"The grant is created for:" "FOR_ORG":"The grant is created for:"
}, },
"DETAIL": { "DETAIL": {
@ -563,7 +567,7 @@
"org.domain.primary.set":"set primary domain", "org.domain.primary.set":"set primary domain",
"org.domain.removed":"domain removed", "org.domain.removed":"domain removed",
"org.iam.policy.added":"IAM policy added", "org.iam.policy.added":"IAM policy added",
"project.added": "added", "project.added": "project added",
"project.changed":"changed", "project.changed":"changed",
"project.deactivated":"deactivated", "project.deactivated":"deactivated",
"project.member.added":"added member", "project.member.added":"added member",