feat(start): Added role-based content on startpage. (TV-517)

Squashed commit of the following:

commit 583b54ba97f0e0c02bd6665c76e95aabbb4c0bf1
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Fri Sep 10 07:37:32 2021 +0200

    Updated role-check and added loader

commit 78cd4047b3ad1180c818adeaa29c5a2d567b386e
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 16:55:53 2021 +0200

    merged in develope, fixed template conflict (TV-517)

commit c5d295126f2e9826e95456e28deb276609cb56e3
Merge: 014fdb4 5f81d6f
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 16:54:26 2021 +0200

    merged in develope (TV-517)

commit 014fdb4af7df3c8bd8502ee617fce2bf2f0a49cd
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 16:49:59 2021 +0200

    simplified the code, mapped instead of subscribe (TV-517)

commit dbec3796596b6d3e5c483c68e1ffd628a872b1ca
Merge: 6ed17c3 2bca57c
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 15:13:44 2021 +0200

    Merge branch 'develop' into feature/TV-517

commit 6ed17c3a01b2261529a793413f455eecd3194fd2
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 15:13:07 2021 +0200

    fixed error after merge with develop (TV-517)

commit e7cd48905bcbff4df24676fd2f2ed5ba214f6e86
Merge: d283385 1938b94
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 14:53:46 2021 +0200

    Merge branch 'develop' into feature/TV-517

commit d283385408bc189bdb4884e397acf9653f54c6d4
Merge: 3ff31c9 7774477
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 14:22:09 2021 +0200

    Merge branch 'develop' into feature/TV-517

commit 3ff31c9596a45a32b28a01015d455fc97acd9cf7
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 14:19:51 2021 +0200

    added specific view for standard user (TV-517)

commit 9302f56f7cd9dfe66d70947ac62c8e1fde3cac86
Author: Aden Hassan <aden.hassan@arbetsformedlingen.se>
Date:   Thu Sep 9 12:01:08 2021 +0200

    added getters for user roles (TV-517)
This commit is contained in:
Erik Tiekstra
2021-09-10 07:39:03 +02:00
parent 5f81d6ff8e
commit 270d46eb17
5 changed files with 57 additions and 99 deletions

View File

@@ -1,42 +1,31 @@
<msfa-layout> <msfa-layout *ngIf="userRoles$ | async as userRoles; else loadingRef">
<digi-typography>
<section class="start"> <section class="start">
<!-- User not logged in --> <header class="start__header">
<ng-container *ngIf="isStandardUser"> <h1>Välkommen {{ userFullName$ | async }}</h1>
<digi-typography> <ng-container *ngIf="isAuthorizedUser(userRoles); else unauthorizedRef">
<h1>Välkommen {{ userFullName }}</h1>
<p>Det verkar som att du inte har fått din behörighet ännu, kontakta din administratör för att få tillgång till tjänsten.</p>
</digi-typography>
</ng-container>
<!-- User logged in -->
<ng-container *ngIf="!isStandardUser">
<digi-typography>
<h1>Välkommen {{ userFullName }}</h1>
<p> <p>
Detta är Arbetsförmedlingens nya plattform för våra fristående aktörer, Detta är Arbetsförmedlingens nya plattform för våra fristående aktörer, här kommer du bland annat kunna
här kommer du bland annat kunna sköta den dagliga kontakten med sköta den dagliga kontakten med arbetssökande och arbetsförmedlingen.
arbetssökande och arbetsförmedlingen.
<br/><br/>
Vi kommer successivt att
implementera nytt innehåll, förbättringar och uppdateringar.
Målet är helt enkelt att underlätta ditt dagliga arbete!
</p> </p>
</digi-typography>
<div class="start__wrapper">
<div class="start__notifications">
<digi-info-card af-heading="Nya deltagare" af-heading-level="h2" af-type="info">
<p> <p>
Det har kommit in nya avrop med deltagare, länken nedan tar dig till fliken Nya deltagare. Du finner den Vi kommer successivt att implementera nytt innehåll, förbättringar och uppdateringar. Målet är helt enkelt
också i vänster menyn på sidan att underlätta ditt dagliga arbete!
</p> </p>
<digi-ng-link-internal afText="Till nya deltagare" afRoute="/nya-deltagare"></digi-ng-link-internal>
</digi-info-card>
</div>
<div class="start__alerts"></div>
<div class="start__statistics"></div>
</div>
</ng-container> </ng-container>
<ng-template #unauthorizedRef>
<p>
Det verkar som att du inte har fått din behörighet ännu, kontakta din administratör för att få tillgång till
tjänsten.
</p>
</ng-template>
</header>
</section> </section>
</digi-typography>
</msfa-layout> </msfa-layout>
<ng-template #loadingRef>
<div class="msfa__loading-wrapper msfa__loading-wrapper--full-screen">
<digi-icon-spinner class="msfa__spinner"></digi-icon-spinner>
</div>
</ng-template>

View File

@@ -1,28 +1,2 @@
@import 'variables/gutters';
.start { .start {
&__wrapper {
margin-top: $digi--layout--gutter--l;
display: grid;
grid-template-rows: auto;
grid-template-areas:
'header header'
'notifications alerts'
'statistics statistics ';
gap: $digi--layout--gutter--l;
}
&__notifications {
grid-area: notifications;
}
&__alerts {
grid-area: alerts;
display: flex;
flex-direction: column;
gap: var(--digi--layout--gutter);
}
&__statistics {
grid-area: statistics;
}
} }

View File

@@ -1,8 +1,7 @@
import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ChangeDetectionStrategy, Component } from '@angular/core';
import { UnsubscribeDirective } from '@msfa-directives/unsubscribe.directive'; import { Role } from '@msfa-models/role.model';
import { RoleEnum } from '@msfa-enums/role.enum';
import { mapResponseToRoles, Role } from '@msfa-models/role.model';
import { UserService } from '@msfa-services/api/user.service'; import { UserService } from '@msfa-services/api/user.service';
import { Observable } from 'rxjs';
import { filter, map } from 'rxjs/operators'; import { filter, map } from 'rxjs/operators';
@Component({ @Component({
@@ -11,27 +10,16 @@ import { filter, map } from 'rxjs/operators';
styleUrls: ['./start.component.scss'], styleUrls: ['./start.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class StartComponent extends UnsubscribeDirective { export class StartComponent {
private _userName: string; userFullName$: Observable<string> = this.userService.user$.pipe(
private _userRoles: Role[];
constructor(private userService: UserService) {
super();
super.unsubscribeOnDestroy(
this.userService.user$.pipe(
filter(user => !!user), filter(user => !!user),
map(user => user) map(userName => userName.fullName)
).subscribe(user => { );
this._userName = user.fullName; userRoles$: Observable<Role[]> = this.userService.userRoles$;
this._userRoles = mapResponseToRoles(user.roles);
}));
}
get isStandardUser(): boolean { constructor(private userService: UserService) {}
return this._userRoles?.some(role => role.type === RoleEnum.MSFA_Standard);
}
get userFullName(): string {
return this._userName;
}
isAuthorizedUser(userRoles: Role[]): boolean {
return !!userRoles.length;
}
} }

View File

@@ -1,6 +1,4 @@
import { DigiNgCardModule } from '@af/digi-ng/_card/card'; import { DigiNgCardModule } from '@af/digi-ng/_card/card';
import { DigiNgLinkInternalModule } from '@af/digi-ng/_link/link-internal';
import { DigiNgNotificationAlertModule } from '@af/digi-ng/_notification/notification-alert';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { RouterModule } from '@angular/router'; import { RouterModule } from '@angular/router';
@@ -15,8 +13,6 @@ import { StartComponent } from './start.component';
RouterModule.forChild([{ path: '', component: StartComponent }]), RouterModule.forChild([{ path: '', component: StartComponent }]),
LayoutModule, LayoutModule,
DigiNgCardModule, DigiNgCardModule,
DigiNgNotificationAlertModule,
DigiNgLinkInternalModule,
], ],
}) })
export class StartModule {} export class StartModule {}

View File

@@ -4,10 +4,6 @@
@import 'mixins/link'; @import 'mixins/link';
@keyframes spinning { @keyframes spinning {
from {
transform: rotate(0deg);
}
to { to {
transform: rotate(360deg); transform: rotate(360deg);
} }
@@ -73,9 +69,24 @@ dl {
font-size: 0.875rem !important; font-size: 0.875rem !important;
} }
&__loading-wrapper {
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
&--full-screen {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(255, 255, 255, 0.5);
}
}
&__spinner { &__spinner {
display: inline-flex; display: inline-flex;
animation: spinning infinite 0.6s linear; animation: spinning 1s linear infinite;
} }
&__digi-icon { &__digi-icon {