Changes to some models and data coming from API

This commit is contained in:
Erik Tiekstra
2021-09-01 10:26:05 +02:00
parent 02cf0f6114
commit e4f5802f97
9 changed files with 55 additions and 62 deletions

View File

@@ -2,7 +2,9 @@
<section class="employee-card"> <section class="employee-card">
<digi-typography *ngIf="employee$ | async as employee; else loadingRef"> <digi-typography *ngIf="employee$ | async as employee; else loadingRef">
<header class="employee-card__header"> <header class="employee-card__header">
<a class="employee-card__edit-button" [routerLink]="['/administration/redigera-konto', employee.id]">Redigera</a> <a class="employee-card__edit-button" [routerLink]="['/administration/redigera-konto', employee.id]"
>Redigera</a
>
<h1>{{ employee.fullName }}</h1> <h1>{{ employee.fullName }}</h1>
</header> </header>
<p>Här kan du se och ändra personalkontots behörigheter. Ändra behörighet genom att klicka på redigera.</p> <p>Här kan du se och ändra personalkontots behörigheter. Ändra behörighet genom att klicka på redigera.</p>
@@ -40,7 +42,7 @@
Kontot har behörighet till alla utförande verksamheter och utförande adresser inom organisationen. Kontot har behörighet till alla utförande verksamheter och utförande adresser inom organisationen.
</p> </p>
<ng-template #specificUtforandeVerksamheter> <ng-template #specificUtforandeVerksamheter>
<div class="employee-card__utforandeverksamheter-cards" > <div class="employee-card__utforandeverksamheter-cards">
<ng-container *ngIf="employee.utforandeVerksamhet?.length; else emptyText"> <ng-container *ngIf="employee.utforandeVerksamhet?.length; else emptyText">
<digi-info-card <digi-info-card
*ngFor="let utforandeverksamhet of employee.utforandeVerksamhet" *ngFor="let utforandeverksamhet of employee.utforandeVerksamhet"
@@ -49,12 +51,9 @@
af-type="info" af-type="info"
class="employee-card__utforandeverksamheter-card" class="employee-card__utforandeverksamheter-card"
> >
<digi-ng-layout-expansion-panel <digi-ng-layout-expansion-panel *ngIf="utforandeverksamhet.adresser.length > 0">
*ngIf="utforandeverksamhet.adresser.length > 0"
>
<span data-slot-trigger> <span data-slot-trigger>
{{ accordionExpanded ? 'Dölj' : 'Visa' }} {{ accordionExpanded ? 'Dölj' : 'Visa' }} {{utforandeverksamhet.adresser.length}}
{{utforandeverksamhet.adresser.length}}
{{utforandeverksamhet.adresser.length === 1 ? 'adress' : 'adresser'}} {{utforandeverksamhet.adresser.length === 1 ? 'adress' : 'adresser'}}
</span> </span>
<ul class="employee-card__utforandeverksamheter-address-list"> <ul class="employee-card__utforandeverksamheter-address-list">
@@ -106,9 +105,7 @@
</dd> </dd>
</ng-template> </ng-template>
<ng-template #emptyText> <ng-template #emptyText>
<p> <span aria-hidden="true">-</span>
<span aria-hidden="true">-</span> <span class="msfa__a11y-sr-only">Info saknas</span>
<span class="msfa__a11y-sr-only">Info saknas</span>
</p>
</ng-template> </ng-template>
</msfa-layout> </msfa-layout>

View File

@@ -1,6 +1,5 @@
import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ChangeDetectionStrategy, Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { RoleEnum } from '@msfa-enums/role.enum';
import { Employee } from '@msfa-models/employee.model'; import { Employee } from '@msfa-models/employee.model';
import { Role } from '@msfa-models/role.model'; import { Role } from '@msfa-models/role.model';
import { EmployeeService } from '@msfa-services/api/employee.service'; import { EmployeeService } from '@msfa-services/api/employee.service';
@@ -15,7 +14,7 @@ import { BehaviorSubject, Observable } from 'rxjs';
export class EmployeeCardComponent { export class EmployeeCardComponent {
private _pendingSelectedParticipants$ = new BehaviorSubject<string[]>([]); private _pendingSelectedParticipants$ = new BehaviorSubject<string[]>([]);
employee$: Observable<Employee> = this.employeeService.employee$; employee$: Observable<Employee> = this.employeeService.employee$;
allRoles: Role[] = Object.entries(RoleEnum).map(([key, value]) => ({ type: key as RoleEnum, name: value })); allRoles: Role[] = this.employeeService.allRoles;
constructor(private activatedRoute: ActivatedRoute, private employeeService: EmployeeService) { constructor(private activatedRoute: ActivatedRoute, private employeeService: EmployeeService) {
this.employeeService.setCurrentEmployeeId(this.activatedRoute.snapshot.params.employeeId); this.employeeService.setCurrentEmployeeId(this.activatedRoute.snapshot.params.employeeId);

View File

@@ -25,7 +25,7 @@ export class EmployeeFormComponent extends UnsubscribeDirective implements OnIni
tjanster$: Observable<Tjanst[]> = this.tjanstService.tjanster$; tjanster$: Observable<Tjanst[]> = this.tjanstService.tjanster$;
availableTjanster: FormSelectItem[] | null = null; availableTjanster: FormSelectItem[] | null = null;
selectableRoles: Role[] | null = this.employeeService.getAllRoles(); selectableRoles: Role[] = this.employeeService.allRoles;
currentEmployeeRoles: Role[] | undefined | null = null; currentEmployeeRoles: Role[] | undefined | null = null;
constructor( constructor(
@@ -41,22 +41,18 @@ export class EmployeeFormComponent extends UnsubscribeDirective implements OnIni
this.employeeService.setCurrentEmployeeId(this.activatedRoute.snapshot.params['employeeId']); this.employeeService.setCurrentEmployeeId(this.activatedRoute.snapshot.params['employeeId']);
const employeeDataSub = this.employee$.subscribe(employee => { const employeeDataSub = this.employee$.subscribe(employee => {
this.employee = employee; this.employee = employee;
this.currentEmployeeRoles = employee?.roles this.currentEmployeeRoles = employee?.roles.map(role => mapRoleResponseToRoleObject(role));
.map(role => mapRoleResponseToRoleObject(role));
}); });
const tjanstRelatedDataSub = this.tjanster$.subscribe(tjanster => { const tjanstRelatedDataSub = this.tjanster$.subscribe(tjanster => {
const tjanstOptions: FormSelectItem[] = []; const tjanstOptions: FormSelectItem[] = [];
tjanster?.forEach(tjanst => { tjanster?.forEach(tjanst => {
tjanstOptions.push({name: tjanst?.name, value: tjanst?.code}); tjanstOptions.push({ name: tjanst?.name, value: tjanst?.code });
}); });
this.availableTjanster = tjanstOptions; this.availableTjanster = tjanstOptions;
}); });
this.subscriptionsList.push( this.subscriptionsList.push(employeeDataSub, tjanstRelatedDataSub);
employeeDataSub,
tjanstRelatedDataSub
);
} }
updateEmployee(editEmployeeFormData: EditEmployeeFormData): void { updateEmployee(editEmployeeFormData: EditEmployeeFormData): void {

View File

@@ -31,17 +31,15 @@
<a [routerLink]="employee.id" class="employees-list__link">{{ employee.fullName }}</a> <a [routerLink]="employee.id" class="employees-list__link">{{ employee.fullName }}</a>
</th> </th>
<td> <td>
<ng-container *ngIf="employee.tjanster.length"> <ng-container *ngIf="employee.tjanster.length; else emptyText">
{{ employee.tjanster[0] }}<ng-container *ngIf="employee.tjanster.length > 1"> {{ employee.tjanster[0] }}<ng-container *ngIf="employee.tjanster.length > 1">
(+{{employee.tjanster.length - 1}})</ng-container (+{{employee.tjanster.length - 1}})</ng-container
> >
</ng-container> </ng-container>
</td> </td>
<td> <td>
<ng-container *ngIf="employee.utforandeVerksamheter.length"> <ng-container *ngIf="employee.utforandeVerksamheter.length; else emptyText">
{{ employee.utforandeVerksamheter[0]['namn'] }}<ng-container {{ employee.utforandeVerksamheter[0] }}<ng-container *ngIf="employee.utforandeVerksamheter.length > 1">
*ngIf="employee.utforandeVerksamheter.length > 1"
>
(+{{employee.utforandeVerksamheter.length - 1}})</ng-container (+{{employee.utforandeVerksamheter.length - 1}})</ng-container
> >
</ng-container> </ng-container>
@@ -87,3 +85,8 @@
> >
</digi-navigation-pagination> </digi-navigation-pagination>
</div> </div>
<ng-template #emptyText>
<span aria-hidden="true">-</span>
<span class="msfa__a11y-sr-only">Info saknas</span>
</ng-template>

View File

@@ -203,9 +203,7 @@
</dd> </dd>
</ng-template> </ng-template>
<ng-template #emptyText> <ng-template #emptyText>
<p> <span aria-hidden="true">-</span>
<span aria-hidden="true">-</span> <span class="msfa__a11y-sr-only">Info saknas</span>
<span class="msfa__a11y-sr-only">Info saknas</span>
</p>
</ng-template> </ng-template>
</msfa-layout> </msfa-layout>

View File

@@ -1,7 +1,6 @@
export enum RoleEnum { export enum RoleEnum {
OrganizationUser = 'OrganizationUser', // Default role MSFA_AuthAdmin = 'MSFA_AuthAdmin',
ReportAndPlanning = 'ReportAndPlanning', MSFA_ReceiveDeltagare = 'MSFA_ReceiveDeltagare',
ReceiveDeltagare = 'ReceiveDeltagare', MSFA_ReportAndPlanning = 'MSFA_ReportAndPlanning',
AuthAdmin = 'AuthAdmin', MSFA_Standard = 'MSFA_Standard', // Default role
ContactPerson = 'ContactPerson',
} }

View File

@@ -6,31 +6,26 @@ export interface Role {
} }
export function mapRoleResponseToRoleObject(type: string): Role { export function mapRoleResponseToRoleObject(type: string): Role {
switch(type) { switch (type) {
case 'OrganizationUser': case 'MSFA_Standard':
return { return {
name: 'Basanvändare', name: 'Basanvändare',
type: RoleEnum[type] type: RoleEnum[type],
}; };
case 'ReportAndPlanning': case 'MSFA_ReportAndPlanning':
return { return {
name: 'Rapportering, planering och information om deltagare', name: 'Rapportering, planering och information om deltagare',
type: RoleEnum[type] type: RoleEnum[type],
}; };
case 'ReceiveDeltagare': case 'MSFA_ReceiveDeltagare':
return { return {
name: 'Ta emot deltagare', name: 'Ta emot deltagare',
type: RoleEnum[RoleEnum[type]] type: RoleEnum[RoleEnum[type]],
}; };
case 'AuthAdmin': case 'MSFA_AuthAdmin':
return { return {
name: 'Administrera behörigheter', name: 'Administrera behörigheter',
type: RoleEnum[RoleEnum[type]] type: RoleEnum[RoleEnum[type]],
};
case 'ContactPerson':
return {
name: 'Kontaktperson',
type: RoleEnum[type]
}; };
default: default:
return; return;

View File

@@ -50,12 +50,16 @@ export class AvropApiService {
this._lockedAvropSnapshot$.next(avrop); this._lockedAvropSnapshot$.next(avrop);
return this.httpClient.get<{ data: HandledareResponse[] }>(`${this._apiBaseUrl}/handledare`).pipe( return this.httpClient
map(({ data }) => data.map(handledare => mapHandledareResponseToHandledare(handledare))), .get<{ data: HandledareResponse[] }>(`${this._apiBaseUrl}/handledare`, {
tap(handledare => { params: { avropIds: avrop.map(a => a.id) },
this._availableHandledareSnapshot$.next(handledare);
}) })
); .pipe(
map(({ data }) => data.map(handledare => mapHandledareResponseToHandledare(handledare))),
tap(handledare => {
this._availableHandledareSnapshot$.next(handledare);
})
);
} }
fetchAvailableTjanster$(params: Params): Observable<AvropTjanst[]> { fetchAvailableTjanster$(params: Params): Observable<AvropTjanst[]> {

View File

@@ -190,15 +190,17 @@ export class EmployeeService extends UnsubscribeDirective {
} }
public updateEmployeeData(employeeData: Employee): Observable<string> { public updateEmployeeData(employeeData: Employee): Observable<string> {
return /* this.httpClient.put<{ id: string }>(`${this._apiBaseUrl}/${employeeData.id}`, return; /* this.httpClient.put<{ id: string }>(`${this._apiBaseUrl}/${employeeData.id}`,
mapEmployeeToRequestData(employeeData), API_HEADERS).pipe( mapEmployeeToRequestData(employeeData), API_HEADERS).pipe(
map(({ id }) => id), map(({ id }) => id),
catchError(error => throwError({ message: error as string, type: ErrorType.API })) catchError(error => throwError({ message: error as string, type: ErrorType.API }))
); */ ); */
} }
public getAllRoles(): Role[] { public get allRoles(): Role[] {
const allAuths: string[] = Object.keys(RoleEnum).filter((item) => {return isNaN(Number(item))}); const allAuths: string[] = Object.keys(RoleEnum).filter(item => {
return allAuths.map(key => mapRoleResponseToRoleObject(key)); return isNaN(Number(item));
});
return allAuths.map(key => mapRoleResponseToRoleObject(key));
} }
} }