Squashed commit of the following: commit 9473ca4e23eb6c5967d9df3403cc071d48e0ab73 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Jun 1 08:18:39 2021 +0200 Adding footer commit 8f13809ad3928fd09fd67d713a61c2ca4ef27bc4 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Tue Jun 1 06:57:34 2021 +0200 Added footer commit ee8a5be048786843e3c5672368a0663ead424852 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon May 31 16:07:14 2021 +0200 Added size to edit icon commit b8e99713bc0190075cfe201f8cd515dca78e184e Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon May 24 15:54:15 2021 +0200 Renamed create account to employee form and fixed some validation commit 935509bc5dd6bc7f6533b580197da2f8c15affc3 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Mon May 24 08:28:40 2021 +0200 More changes to mock-api and views commit d0bb8e1c0130c996ee89413f5ddda015fcf49ec5 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Fri May 21 11:22:40 2021 +0200 Modified mock-api and implemented a part inside employee-list
92 lines
3.4 KiB
TypeScript
92 lines
3.4 KiB
TypeScript
import { HttpClient } from '@angular/common/http';
|
|
import { Injectable } from '@angular/core';
|
|
import { ErrorType } from '@dafa-enums/error-type.enum';
|
|
import { environment } from '@dafa-environment';
|
|
import {
|
|
Employee,
|
|
EmployeeApiResponse,
|
|
mapEmployeeReponseToEmployee,
|
|
mapEmployeeToEmployeeApiRequestData,
|
|
PegaEmployeeApiPostResponse,
|
|
} from '@dafa-models/employee.model';
|
|
import { SortBy } from '@dafa-models/sort-by.model';
|
|
import { sort } from '@dafa-utils/sort.util';
|
|
import { BehaviorSubject, combineLatest, Observable, throwError } from 'rxjs';
|
|
import { catchError, map } from 'rxjs/operators';
|
|
|
|
function filterEmployees(employees: Employee[], searchFilter: string): Employee[] {
|
|
return employees.filter(person => person.fullName.toLowerCase().includes(searchFilter.toLowerCase()));
|
|
}
|
|
|
|
const API_HEADERS = { headers: environment.api.headers };
|
|
@Injectable({
|
|
providedIn: 'root',
|
|
})
|
|
export class EmployeeService {
|
|
private _employeeApiUrl = `${environment.api.url}/employee`;
|
|
private _employeesRawData: Observable<EmployeeApiResponse[]> = this.httpClient.get<EmployeeApiResponse[]>(
|
|
this._employeeApiUrl,
|
|
API_HEADERS
|
|
);
|
|
private _allEmployees$: Observable<Employee[]> = this._employeesRawData.pipe(
|
|
map(results => results.map(result => mapEmployeeReponseToEmployee(result)))
|
|
);
|
|
|
|
private _employeesSortBy$ = new BehaviorSubject<SortBy | null>({ key: 'fullName', reverse: false });
|
|
public employeesSortBy$: Observable<SortBy> = this._employeesSortBy$.asObservable();
|
|
private _searchFilter$ = new BehaviorSubject<string>('');
|
|
public searchFilter$: Observable<string> = this._searchFilter$.asObservable();
|
|
|
|
private _filteredEmployees$: Observable<Employee[]> = combineLatest([this._allEmployees$, this._searchFilter$]).pipe(
|
|
map(([employees, searchFilter]) => filterEmployees(employees, searchFilter))
|
|
);
|
|
|
|
public resultCount$: Observable<number> = this._employeesRawData.pipe(map(results => results.length)); // TODO: need META
|
|
public filteredEmployees$: Observable<Employee[]> = combineLatest([
|
|
this._filteredEmployees$,
|
|
this._employeesSortBy$,
|
|
]).pipe(
|
|
map(([employees, sortBy]) => {
|
|
return sortBy ? sort(employees, sortBy) : employees;
|
|
})
|
|
);
|
|
|
|
constructor(private httpClient: HttpClient) {}
|
|
|
|
public getDetailedEmployeeData(id: string): Observable<Employee> {
|
|
return this.httpClient
|
|
.get<EmployeeApiResponse>(`${this._employeeApiUrl}/${id}`, { ...API_HEADERS })
|
|
.pipe(map(result => mapEmployeeReponseToEmployee(result)));
|
|
}
|
|
|
|
public setSearchFilter(value: string) {
|
|
this._searchFilter$.next(value);
|
|
}
|
|
|
|
public setEmployeesSortKey(key: keyof Employee) {
|
|
const currentSortBy = this._employeesSortBy$.getValue();
|
|
const reverse = currentSortBy?.key === key ? !currentSortBy.reverse : false;
|
|
this._employeesSortBy$.next({ key, reverse });
|
|
}
|
|
|
|
public postNewEmployee(employeeData: Employee): Observable<string> {
|
|
console.log(employeeData);
|
|
return;
|
|
return this.httpClient
|
|
.post<PegaEmployeeApiPostResponse>(
|
|
this._employeeApiUrl,
|
|
mapEmployeeToEmployeeApiRequestData(employeeData),
|
|
API_HEADERS
|
|
)
|
|
.pipe(
|
|
map(data => {
|
|
if (data.pyHasError === 'true') {
|
|
throw new Error(data.pyErrorMessage);
|
|
}
|
|
return data.pyUserIdentifier;
|
|
}),
|
|
catchError(error => throwError({ message: error, type: ErrorType.API }))
|
|
);
|
|
}
|
|
}
|