feat(employee): Now possible to submit edit employee form. (TV-513)
Squashed commit of the following: commit fc79d20601988735b407a54009426e10e233df39 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Sep 7 13:24:30 2021 +0200 Small fixes commit bc8741bab9b3161d356d1375b7ab869b202a8195 Merge: 1ad9db8cac0515Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Sep 7 13:16:21 2021 +0200 Merged develop commit 1ad9db87e7f1f19fdb2cd3e2cfcc17e08c9ccfef Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Sep 7 12:49:37 2021 +0200 Stylechanges commit 5a3b863f87f956ed90564fecbef9abe9460558bd Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Sep 7 11:26:35 2021 +0200 Now possible to edit employee-accounts commit 0677f2ebeee12adeba6cb65a673781dea7a6c06d Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Sep 7 10:05:35 2021 +0200 Updated models to include new structure commit 76bde9e0afbbf44a09348ee8e4849b4816b0c39d Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Sep 7 08:43:25 2021 +0200 edit employee commit c8cf93b6bbeef0a3b4b6f141f36aea7ea86f399e Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Sep 6 16:22:46 2021 +0200 WIP commit fe5cff4aa209c4da0025ebfb70b79d6a95c8d1f1 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Sep 6 15:46:26 2021 +0200 Fixed issue not fetching new utforande verksamheter on page load commit c997dbe80c8f9f5ec84aad2ac18805918b7ab6f5 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Sep 6 15:35:34 2021 +0200 Added scrollPositionRestoration commit 58ee0147ff553f2a97fdf143ddcbdf1b0241d26f Merge: 27b595c9a73ffeAuthor: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Sep 6 15:30:08 2021 +0200 Merge branch 'develop' into feature/TV-513 commit 27b595cbf94dc1d95ad32a0da1943e2e6fce61c4 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Sep 6 14:28:10 2021 +0200 WIP commit 81cb9df1869784a80f6747ac68bfdc81ae5d777a Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon Sep 6 13:21:41 2021 +0200 Fixed roles
This commit is contained in:
@@ -1,20 +1,13 @@
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { environment } from '@msfa-environment';
|
||||
import { AvropTjanstResponse } from '@msfa-models/api/avrop-tjanst.response.model';
|
||||
import { AvropFilterResponse } from '@msfa-models/api/avrop-filter.response.model';
|
||||
import { AvropApiResponse } from '@msfa-models/api/avrop.response.model';
|
||||
import { HandledareResponse } from '@msfa-models/api/handledare.response.model';
|
||||
import { KommunResponse } from '@msfa-models/api/kommun.response.model';
|
||||
import { Params } from '@msfa-models/api/params.model';
|
||||
import { UtforandeVerksamhetResponse } from '@msfa-models/api/utforande-verksamhet.response.model';
|
||||
import { AvropTjanst, mapResponseToAvropTjanst } from '@msfa-models/avrop-tjanst.model';
|
||||
import { AvropFilter, mapResponseToAvropFilter } from '@msfa-models/avrop-filter.model';
|
||||
import { AvropCompact, AvropCompactData, mapAvropResponseToAvrop } from '@msfa-models/avrop.model';
|
||||
import { Handledare, mapHandledareResponseToHandledare } from '@msfa-models/handledare.model';
|
||||
import { Kommun, mapKommunResponseToKommun } from '@msfa-models/kommun.model';
|
||||
import {
|
||||
mapUtforandeVerksamhetResponseToUtforandeVerksamhet,
|
||||
UtforandeVerksamhet,
|
||||
} from '@msfa-models/utforande-verksamhet.model';
|
||||
import { BehaviorSubject, Observable, of } from 'rxjs';
|
||||
import { filter, map, tap } from 'rxjs/operators';
|
||||
|
||||
@@ -62,32 +55,30 @@ export class AvropApiService {
|
||||
);
|
||||
}
|
||||
|
||||
fetchAvailableTjanster$(params: Params): Observable<AvropTjanst[]> {
|
||||
fetchAvailableTjanster$(params: Params): Observable<AvropFilter[]> {
|
||||
return this.httpClient
|
||||
.get<{ data: AvropTjanstResponse[] }>(`${this._apiBaseUrl}/tjanster`, { params })
|
||||
.get<{ data: AvropFilterResponse[] }>(`${this._apiBaseUrl}/tjanster`, { params })
|
||||
.pipe(
|
||||
filter(response => !!response?.data),
|
||||
map(({ data }) => data.map(tjanster => mapResponseToAvropTjanst(tjanster)))
|
||||
map(({ data }) => data.map(tjanster => mapResponseToAvropFilter(tjanster)))
|
||||
);
|
||||
}
|
||||
|
||||
fetchAvailableUtforandeVerksamheter$(params: Params): Observable<UtforandeVerksamhet[]> {
|
||||
fetchAvailableUtforandeVerksamheter$(params: Params): Observable<AvropFilter[]> {
|
||||
return this.httpClient
|
||||
.get<{ data: UtforandeVerksamhetResponse[] }>(`${this._apiBaseUrl}/utforandeverksamheter`, { params })
|
||||
.get<{ data: AvropFilterResponse[] }>(`${this._apiBaseUrl}/utforandeverksamheter`, { params })
|
||||
.pipe(
|
||||
filter(response => !!response?.data),
|
||||
map(({ data }) =>
|
||||
data.map(utforandeverksamheter => mapUtforandeVerksamhetResponseToUtforandeVerksamhet(utforandeverksamheter))
|
||||
)
|
||||
map(({ data }) => data.map(utforandeverksamheter => mapResponseToAvropFilter(utforandeverksamheter)))
|
||||
);
|
||||
}
|
||||
|
||||
fetchAvailableKommuner$(params: Params): Observable<Kommun[]> {
|
||||
fetchAvailableKommuner$(params: Params): Observable<AvropFilter[]> {
|
||||
return this.httpClient
|
||||
.get<{ data: KommunResponse[] }>(`${this._apiBaseUrl}/kommuner`, { params })
|
||||
.get<{ data: AvropFilterResponse[] }>(`${this._apiBaseUrl}/kommuner`, { params })
|
||||
.pipe(
|
||||
filter(response => !!response?.data),
|
||||
map(({ data }) => data.map(kommun => mapKommunResponseToKommun(kommun)))
|
||||
map(({ data }) => data.map(kommun => mapResponseToAvropFilter(kommun)))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,30 +1,29 @@
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { UnsubscribeDirective } from '@msfa-directives/unsubscribe.directive';
|
||||
import { ErrorType } from '@msfa-enums/error-type.enum';
|
||||
import { RoleEnum } from '@msfa-enums/role.enum';
|
||||
import { SortOrder } from '@msfa-enums/sort-order.enum';
|
||||
import { environment } from '@msfa-environment';
|
||||
import { EmployeeEditRequest } from '@msfa-models/api/employee-edit.request.model';
|
||||
import { EmployeeInviteResponse } from '@msfa-models/api/employee-invite.response.model';
|
||||
import {
|
||||
EmployeeCompactResponse,
|
||||
EmployeeResponse,
|
||||
EmployeesApiResponse,
|
||||
EmployeesDataResponse,
|
||||
} from '@msfa-models/api/employee.response.model';
|
||||
import { Params } from '@msfa-models/api/params.model';
|
||||
import {
|
||||
Employee,
|
||||
EmployeesData,
|
||||
mapEmployeeToRequestData,
|
||||
mapResponseToEmployee,
|
||||
mapResponseToEmployeeCompact,
|
||||
} from '@msfa-models/employee.model';
|
||||
import { errorToCustomError } from '@msfa-models/error/custom-error';
|
||||
import { mapRoleResponseToRoleObject, Role } from '@msfa-models/role.model';
|
||||
import { mapResponseToRoles, Role } from '@msfa-models/role.model';
|
||||
import { Sort } from '@msfa-models/sort.model';
|
||||
import { ErrorService } from '@msfa-services/error.service';
|
||||
import { BehaviorSubject, combineLatest, Observable, of, throwError } from 'rxjs';
|
||||
import { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';
|
||||
import { catchError, distinctUntilChanged, filter, map, switchMap, take, tap } from 'rxjs/operators';
|
||||
import { TjanstService } from './tjanst.service';
|
||||
|
||||
@Injectable({
|
||||
@@ -42,6 +41,8 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
public onlyEmployeesWithoutAuthorization$: Observable<boolean> = this._onlyEmployeesWithoutAuthorization$.asObservable();
|
||||
private _employee$ = new BehaviorSubject<Employee>(null);
|
||||
public employee$: Observable<Employee> = this._employee$.asObservable();
|
||||
private _lastUpdatedEmployeeId$ = new BehaviorSubject<string>(null);
|
||||
public lastUpdatedEmployeeId$: Observable<string> = this._lastUpdatedEmployeeId$.asObservable();
|
||||
private _lastDeletedEmployee$ = new BehaviorSubject<Employee>(null);
|
||||
public lastDeletedEmployee$: Observable<Employee> = this._lastDeletedEmployee$.asObservable();
|
||||
private _employeeToDelete$ = new BehaviorSubject<Employee>(null);
|
||||
@@ -54,10 +55,14 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
) {
|
||||
super();
|
||||
super.unsubscribeOnDestroy(
|
||||
this._currentEmployeeId$
|
||||
combineLatest([this._currentEmployeeId$, this._lastUpdatedEmployeeId$])
|
||||
.pipe(
|
||||
filter(currentEmployeeId => !!currentEmployeeId),
|
||||
switchMap(currentEmployeeId =>
|
||||
filter(([currentEmployeeId]) => !!currentEmployeeId),
|
||||
distinctUntilChanged(
|
||||
([prevEmployeeId], [currEmployeeId, currLastUpdatedEmployeeId]) =>
|
||||
!currLastUpdatedEmployeeId && prevEmployeeId === currEmployeeId
|
||||
),
|
||||
switchMap(([currentEmployeeId]) =>
|
||||
combineLatest([this._fetchEmployee$(currentEmployeeId), this.tjanstService.tjanster$]).pipe(
|
||||
filter(([employee, allTjanster]) => !!(employee && allTjanster?.length)),
|
||||
map(([employee, allTjanster]) => {
|
||||
@@ -77,6 +82,29 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
.subscribe(employee => {
|
||||
this._employee$.next(employee as Employee);
|
||||
})
|
||||
// this._currentEmployeeId$
|
||||
// .pipe(
|
||||
// filter(currentEmployeeId => !!currentEmployeeId),
|
||||
// switchMap(currentEmployeeId =>
|
||||
// combineLatest([this._fetchEmployee$(currentEmployeeId), this.tjanstService.tjanster$]).pipe(
|
||||
// filter(([employee, allTjanster]) => !!(employee && allTjanster?.length)),
|
||||
// map(([employee, allTjanster]) => {
|
||||
// const tjanster = [];
|
||||
// employee.tjanstCodes?.forEach(code => {
|
||||
// const currentTjanst = allTjanster.find(tjanst => tjanst.code === code);
|
||||
|
||||
// if (currentTjanst) {
|
||||
// tjanster.push(currentTjanst);
|
||||
// }
|
||||
// });
|
||||
// return { ...employee, tjanster };
|
||||
// })
|
||||
// )
|
||||
// )
|
||||
// )
|
||||
// .subscribe(employee => {
|
||||
// this._employee$.next(employee as Employee);
|
||||
// })
|
||||
);
|
||||
}
|
||||
|
||||
@@ -100,6 +128,10 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
}
|
||||
}
|
||||
|
||||
public resetLastUpdatedEmployeeId(): void {
|
||||
this._lastUpdatedEmployeeId$.next(null);
|
||||
}
|
||||
|
||||
private _fetchEmployees$(
|
||||
limit: number,
|
||||
page: number,
|
||||
@@ -123,7 +155,7 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
}
|
||||
|
||||
return this.httpClient
|
||||
.get<EmployeesApiResponse>(this._apiBaseUrl, { params })
|
||||
.get<EmployeesDataResponse>(this._apiBaseUrl, { params })
|
||||
.pipe(
|
||||
map(({ data, meta }) => {
|
||||
return { data: data.map(employee => mapResponseToEmployeeCompact(employee)), meta };
|
||||
@@ -175,14 +207,7 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
this._page$.next(page);
|
||||
}
|
||||
|
||||
public postNewEmployee(employeeData: Employee): Observable<string> {
|
||||
return this.httpClient.post<{ id: string }>(this._apiBaseUrl, mapEmployeeToRequestData(employeeData)).pipe(
|
||||
map(({ id }) => id),
|
||||
catchError(error => throwError({ message: error as string, type: ErrorType.API }))
|
||||
);
|
||||
}
|
||||
|
||||
public postEmployeeInvitation(emails: string[]): Observable<EmployeeInviteResponse> {
|
||||
public postEmployeeInvitation(emails: string[]): Observable<EmployeeInviteResponse | null> {
|
||||
return this.httpClient
|
||||
.patch<{ data: EmployeeInviteResponse }>(`${this._apiBaseUrl}/invite`, { emails })
|
||||
.pipe(
|
||||
@@ -195,18 +220,22 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
);
|
||||
}
|
||||
|
||||
public updateEmployeeData(employeeData: Employee): Observable<string> {
|
||||
return; /* this.httpClient.put<{ id: string }>(`${this._apiBaseUrl}/${employeeData.id}`,
|
||||
mapEmployeeToRequestData(employeeData), API_HEADERS).pipe(
|
||||
map(({ id }) => id),
|
||||
catchError(error => throwError({ message: error as string, type: ErrorType.API }))
|
||||
); */
|
||||
public updateEmployee$(id: string, data: EmployeeEditRequest): Observable<boolean> {
|
||||
return this.httpClient.put<boolean>(`${this._apiBaseUrl}/${id}`, data).pipe(
|
||||
take(1),
|
||||
tap(() => {
|
||||
this._employee$.next(null);
|
||||
this._lastUpdatedEmployeeId$.next(id);
|
||||
}),
|
||||
map(() => true),
|
||||
catchError(error => {
|
||||
this.errorService.add(errorToCustomError(error));
|
||||
return of(false);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public get allRoles(): Role[] {
|
||||
const allAuths: string[] = Object.keys(RoleEnum).filter(item => {
|
||||
return isNaN(Number(item));
|
||||
});
|
||||
return allAuths.map(key => mapRoleResponseToRoleObject(key));
|
||||
return mapResponseToRoles(Object.keys(RoleEnum) as RoleEnum[]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { HttpClient, HttpParams } from '@angular/common/http';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { environment } from '@msfa-environment';
|
||||
import { Params } from '@msfa-models/api/params.model';
|
||||
import {
|
||||
TreeNode,
|
||||
TreeNodesSelectorService,
|
||||
@@ -27,20 +28,21 @@ export class UtforandeVerksamheterService {
|
||||
constructor(private treeNodesSelectorService: TreeNodesSelectorService, private httpClient: HttpClient) {}
|
||||
|
||||
getUtforandeVerksamheter(tjanstIds: Array<number>): Observable<Array<UtforandeVerksamhet>> {
|
||||
let params = new HttpParams();
|
||||
let i: number;
|
||||
|
||||
if (!tjanstIds) {
|
||||
if (!tjanstIds.length) {
|
||||
return of<Array<UtforandeVerksamhet>>([]);
|
||||
}
|
||||
|
||||
for (i = 0; i < tjanstIds.length; i++) {
|
||||
params = params.append('tjansteIds', tjanstIds[i].toString());
|
||||
}
|
||||
const params: Params = { tjansteIds: tjanstIds.map(tjanstId => tjanstId.toString()) };
|
||||
|
||||
return this.httpClient.get<Array<UtforandeVerksamhet>>(`${this.apiBaseUrl}`, { params });
|
||||
}
|
||||
|
||||
getSelectedAdressIdsFromTreeNode(treeNode: TreeNode): number[] {
|
||||
const selectedUtforandeVerksamheter = this.getSelectedUtforandeVerksamheterFromTreeNode(treeNode);
|
||||
|
||||
return selectedUtforandeVerksamheter.map(uv => uv.adresser.map(adress => adress.id)).flat();
|
||||
}
|
||||
|
||||
getTreeNodeDataFromUtforandeVerksamheter(utforandeVerksamhetList: Array<UtforandeVerksamhet>): TreeNode | null {
|
||||
let treeNode: TreeNode | null = null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user