Updated some models and changed to custom api

This commit is contained in:
Erik Tiekstra
2021-05-05 14:19:57 +02:00
parent cd60e9383a
commit f24ab48943
21 changed files with 125 additions and 89 deletions

View File

@@ -1,14 +1,14 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from '@dafa-environment';
import { EmployeeResponse } from '@dafa-models/api/employee-response.model';
import { EmployeeDetail, mapEmployeeReponseToEmployee, User } from '@dafa-models/employee.model';
import { EmployeesApiResponse } from '@dafa-models/api/employee-response.model';
import { Employee, EmployeeDetail, mapEmployeeReponseToEmployee } 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: User[], searchFilter: string): User[] {
function filterEmployees(employees: Employee[], searchFilter: string): Employee[] {
return employees.filter(person => person.fullName.toLowerCase().includes(searchFilter.toLowerCase()));
}
@@ -16,23 +16,26 @@ function filterEmployees(employees: User[], searchFilter: string): User[] {
providedIn: 'root',
})
export class EmployeeService {
private _employeesApiUrl = `${environment.apiBase}/D_pxOperatorsList`;
private _allEmployees$: Observable<User[]> = this.httpClient
.get<{ pxResults: EmployeeResponse[] }>(this._employeesApiUrl, {
headers: environment.apiHeaders,
})
.pipe(map(({ pxResults }) => pxResults.map(result => mapEmployeeReponseToEmployee(result))));
private _employeesApiUrl = `${environment.api.meet}/employees`;
private _employeesRawData: Observable<EmployeesApiResponse> = this.httpClient.get<EmployeesApiResponse>(
this._employeesApiUrl,
{ headers: environment.api.headers }
);
private _allEmployees$: Observable<Employee[]> = this._employeesRawData.pipe(
map(({ pxResults }) => pxResults.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<User[]> = combineLatest([this._allEmployees$, this._searchFilter$]).pipe(
private _filteredEmployees$: Observable<Employee[]> = combineLatest([this._allEmployees$, this._searchFilter$]).pipe(
map(([employees, searchFilter]) => filterEmployees(employees, searchFilter))
);
public filteredEmployees$: Observable<User[]> = combineLatest([
public resultCount$: Observable<number> = this._employeesRawData.pipe(map(({ pxResultCount }) => +pxResultCount));
public filteredEmployees$: Observable<Employee[]> = combineLatest([
this._filteredEmployees$,
this._employeesSortBy$,
]).pipe(
@@ -43,15 +46,15 @@ export class EmployeeService {
constructor(private httpClient: HttpClient) {}
public getDetailedEmployeeData(id: string): Observable<User> {
return this.httpClient.get<User>(`${this._employeesApiUrl}/${id}`, { params: { _embed: 'participants' } });
public getDetailedEmployeeData(id: string): Observable<Employee> {
return this.httpClient.get<Employee>(`${this._employeesApiUrl}/${id}`, { params: { _embed: 'participants' } });
}
public setSearchFilter(value: string) {
this._searchFilter$.next(value);
}
public setEmployeesSortKey(key: keyof User) {
public setEmployeesSortKey(key: keyof Employee) {
const currentSortBy = this._employeesSortBy$.getValue();
const reverse = currentSortBy?.key === key ? !currentSortBy.reverse : false;
this._employeesSortBy$.next({ key, reverse });