[SI-793] change button visibility depending on the status
Signed-off-by: dtheinert <dietmar.theinert@pta.de>
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
index 29c5373..9c04854 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
@@ -84,11 +84,4 @@
const result: Date = (component as any)._createDateTime(event);
expect(expectedResult.toISOString).toBe(result.toISOString);
});
-
- it('should call the "FailureDetailsSandbox.setState(..)" event 1 times', ()=>{
- //fixture = TestBed.createComponent(GridFailureDetailsComponent);
- // let comp = fixture.componentInstance;
- // fixture.detectChanges();
- // let onClickSpy = spyOn(comp, '')
- });
});
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
index ed8179d..137a49c 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
@@ -445,21 +445,15 @@
switch (state) {
case StateEnum.NEW:
+ case StateEnum.PLANNED:
this.showCreatedButton = true;
+ break;
case StateEnum.CREATED:
case StateEnum.UPDATED:
this.showQualifyButton = true;
this.showStornoButton = true;
break;
- case StateEnum.PLANNED:
- this.showQualifyButton = true;
- this.showStornoButton = true;
- this.showCreatedButton = true;
- break;
default:
- this.showQualifyButton = false;
- this.showStornoButton = false;
- this.showCreatedButton = false;
break;
}
}
diff --git a/projects/grid-failure-information-app/src/app/shared/constants/enums.ts b/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
index eb44b37..5c00023 100644
--- a/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
+++ b/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
@@ -50,6 +50,7 @@
CREATOR = 'grid-failure-creator',
PUBLISHER = 'grid-failure-publisher',
QUALIFIER = 'grid-failure-qualifier',
+ READER = 'grid-failure-reader'
}
export enum StateEnum {
diff --git a/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.spec.ts b/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.spec.ts
index 06af55b..b3035b0 100644
--- a/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.spec.ts
@@ -68,20 +68,15 @@
map: () => of({ creator: false, publisher: false, admin: false, qualifier: true }),
};
const directive = new VisibleByRightDirective(templateRef as any, viewContainerRef as any, appState as any);
- directive.visibleByRight = RolesEnum.QUALIFIER;
+ directive.visibleByRight = [RolesEnum.QUALIFIER];
const spy = spyOn(directive['_viewContainer'], 'createEmbeddedView' as any);
directive.ngOnInit();
expect(spy).toHaveBeenCalled();
});
- it('should clear view for another role than admin or qualifier', () => {
- appState = {
- pipe: () => of(),
- dispatch: () => {},
- select: () => of({ roles: [RolesEnum.PUBLISHER] }),
- map: () => of({ creator: false, publisher: true, admin: false, qualifier: false }),
- };
+ it('should clear view for invalidRole', () => {
const directive = new VisibleByRightDirective(templateRef as any, viewContainerRef as any, appState as any);
+ directive.visibleByRight = ["_InvalidRole_"];
const spy = spyOn(directive['_viewContainer'], 'clear' as any);
directive.ngOnInit();
expect(spy).toHaveBeenCalled();
@@ -89,9 +84,8 @@
it('should create embedded view for role creator', () => {
// Arrange
- //appState.map = () => of({creator: false, publisher: true, admin: false, qualifier: false});
const directive = new VisibleByRightDirective(templateRef as any, viewContainerRef as any, appState as any);
- directive.visibleByRight = RolesEnum.CREATOR;
+ directive.visibleByRight = [RolesEnum.CREATOR];
const spy = spyOn(directive['_viewContainer'], 'createEmbeddedView' as any);
// Act
directive.ngOnInit();
diff --git a/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.ts b/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.ts
index 8c7a493..4b21a32 100644
--- a/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.ts
+++ b/projects/grid-failure-information-app/src/app/shared/directives/visible-by-right.ts
@@ -23,7 +23,9 @@
selector: '[visibleByRight]',
})
export class VisibleByRightDirective implements OnInit, OnDestroy {
- @Input() visibleByRight?: string = '';
+
+ @Input() visibleByRight?: string[];
+
private _endSubscriptions$: Subject<boolean> = new Subject();
private _permissions$: Observable<PermissionsModel> = this._appState$
.select(store.getUser)
@@ -34,11 +36,11 @@
ngOnInit() {
this._permissions$.subscribe(permissions => {
- if (
- permissions.admin ||
- (permissions.creator && this.visibleByRight === RolesEnum.CREATOR) ||
- (permissions.qualifier && this.visibleByRight === RolesEnum.QUALIFIER)
- ) {
+ if (permissions.admin
+ || this.visibleByRight.includes(permissions.qualifier)
+ || this.visibleByRight.includes(permissions.publisher)
+ || this.visibleByRight.includes(permissions.creator)
+ || this.visibleByRight.includes(permissions.reader)){
this._viewContainer.createEmbeddedView(this._templateRef);
} else {
this._viewContainer.clear();
diff --git a/projects/grid-failure-information-app/src/app/shared/guards/admin.guard.ts b/projects/grid-failure-information-app/src/app/shared/guards/admin.guard.ts
index 7b71527..8a5e441 100644
--- a/projects/grid-failure-information-app/src/app/shared/guards/admin.guard.ts
+++ b/projects/grid-failure-information-app/src/app/shared/guards/admin.guard.ts
@@ -18,6 +18,7 @@
import { User } from '@grid-failure-information-app/shared/models/user';
import { PermissionsModel } from '@grid-failure-information-app/shared/models/permissions.model';
import { takeUntil, take } from 'rxjs/operators';
+import { RolesEnum } from '../constants/enums';
@Injectable()
export class AdminGuard implements CanActivate {
@@ -32,7 +33,7 @@
const isAdmin$: Observable<boolean> = this._appState$
.select(store.getUser)
.pipe(takeUntil(this._endSubscriptions$), take(1))
- .map((user: User) => new PermissionsModel(user.roles).admin);
+ .map((user: User) => !!(new PermissionsModel(user.roles).admin));
isAdmin$.subscribe(isAdmin => !isAdmin && this._router.navigate(['/grid-failures']));
return isAdmin$.pipe(take(1));
}
diff --git a/projects/grid-failure-information-app/src/app/shared/models/permissions.model.ts b/projects/grid-failure-information-app/src/app/shared/models/permissions.model.ts
index b7cbcc2..fd8ba48 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/permissions.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/permissions.model.ts
@@ -13,10 +13,11 @@
import { RolesEnum } from '@grid-failure-information-app/shared/constants/enums';
export class PermissionsModel {
- public admin: boolean = false;
- public creator: boolean = false;
- public publisher: boolean = false;
- public qualifier: boolean = false;
+ public admin: RolesEnum;
+ public creator: RolesEnum;
+ public publisher: RolesEnum;
+ public qualifier: RolesEnum;
+ public reader: RolesEnum;
/**
*Creates an instance of PermissionsModel.
@@ -28,17 +29,20 @@
data.forEach((permissionItem: string) => {
switch (permissionItem) {
case RolesEnum.ADMIN:
- this.admin = true;
+ this.admin = RolesEnum.ADMIN;
break;
case RolesEnum.CREATOR:
- this.creator = true;
+ this.creator = RolesEnum.CREATOR;
break;
case RolesEnum.PUBLISHER:
- this.publisher = true;
+ this.publisher = RolesEnum.PUBLISHER;
break;
case RolesEnum.QUALIFIER:
- this.qualifier = true;
+ this.qualifier =RolesEnum.QUALIFIER;
break;
+ case RolesEnum.READER:
+ this.reader = RolesEnum.READER;
+ break;
default:
break;
}