Fixed issue with sorting

This commit is contained in:
Erik Tiekstra
2021-08-18 14:55:41 +02:00
parent 456f305f0e
commit aa55ee80f4
4 changed files with 23 additions and 19 deletions

View File

@@ -1,5 +1,6 @@
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
import { SortOrder } from '@msfa-enums/sort-order.enum'; import { SortOrder } from '@msfa-enums/sort-order.enum';
import { EmployeeCompactResponse } from '@msfa-models/api/employee.response.model';
import { EmployeeCompact } from '@msfa-models/employee.model'; import { EmployeeCompact } from '@msfa-models/employee.model';
import { PaginationMeta } from '@msfa-models/pagination-meta.model'; import { PaginationMeta } from '@msfa-models/pagination-meta.model';
import { Sort } from '@msfa-models/sort.model'; import { Sort } from '@msfa-models/sort.model';
@@ -13,19 +14,19 @@ import { Sort } from '@msfa-models/sort.model';
export class EmployeesListComponent { export class EmployeesListComponent {
@Input() employees: EmployeeCompact[]; @Input() employees: EmployeeCompact[];
@Input() paginationMeta: PaginationMeta; @Input() paginationMeta: PaginationMeta;
@Input() sort: Sort<keyof EmployeeCompact>; @Input() sort: Sort<keyof EmployeeCompactResponse>;
@Output() sorted = new EventEmitter<keyof EmployeeCompact>(); @Output() sorted = new EventEmitter<keyof EmployeeCompactResponse>();
@Output() paginated = new EventEmitter<number>(); @Output() paginated = new EventEmitter<number>();
columnHeaders: { label: string; key: keyof EmployeeCompact }[] = [ columnHeaders: { label: string; key: keyof EmployeeCompactResponse }[] = [
{ label: 'Namn', key: 'fullName' }, { label: 'Namn', key: 'name' },
{ {
label: 'Tjänst', label: 'Tjänst',
key: 'tjanster', key: 'tjanst',
}, },
{ {
label: 'Utförandeverksamheter', label: 'Utförandeverksamheter',
key: 'utforandeVerksamheter', key: 'utforandeVerksamhet',
}, },
]; ];
@@ -52,7 +53,7 @@ export class EmployeesListComponent {
return end < this.count ? end : this.count; return end < this.count ? end : this.count;
} }
handleSort(key: keyof EmployeeCompact): void { handleSort(key: keyof EmployeeCompactResponse): void {
this.sorted.emit(key); this.sorted.emit(key);
} }

View File

@@ -1,6 +1,7 @@
import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ChangeDetectionStrategy, Component } from '@angular/core';
import { IconType } from '@msfa-enums/icon-type.enum'; import { IconType } from '@msfa-enums/icon-type.enum';
import { EmployeeCompact, EmployeesData } from '@msfa-models/employee.model'; import { EmployeeCompactResponse } from '@msfa-models/api/employee.response.model';
import { EmployeesData } from '@msfa-models/employee.model';
import { Sort } from '@msfa-models/sort.model'; import { Sort } from '@msfa-models/sort.model';
import { EmployeeService } from '@msfa-services/api/employee.service'; import { EmployeeService } from '@msfa-services/api/employee.service';
import { BehaviorSubject, Observable } from 'rxjs'; import { BehaviorSubject, Observable } from 'rxjs';
@@ -15,7 +16,7 @@ export class EmployeesComponent {
private _searchValue$ = new BehaviorSubject<string>(''); private _searchValue$ = new BehaviorSubject<string>('');
private _onlyEmployeesWithoutAuthorization$ = new BehaviorSubject<boolean>(false); private _onlyEmployeesWithoutAuthorization$ = new BehaviorSubject<boolean>(false);
employeesData$: Observable<EmployeesData> = this.employeeService.employeesData$; employeesData$: Observable<EmployeesData> = this.employeeService.employeesData$;
sort$: Observable<Sort<keyof EmployeeCompact>> = this.employeeService.sort$; sort$: Observable<Sort<keyof EmployeeCompactResponse>> = this.employeeService.sort$;
iconType = IconType; iconType = IconType;
constructor(private employeeService: EmployeeService) {} constructor(private employeeService: EmployeeService) {}
@@ -32,7 +33,7 @@ export class EmployeesComponent {
this._searchValue$.next($event.detail.target.value); this._searchValue$.next($event.detail.target.value);
} }
handleEmployeesSort(key: keyof EmployeeCompact): void { handleEmployeesSort(key: keyof EmployeeCompactResponse): void {
this.employeeService.setSort(key); this.employeeService.setSort(key);
} }

View File

@@ -4,11 +4,14 @@ import { ErrorType } from '@msfa-enums/error-type.enum';
import { SortOrder } from '@msfa-enums/sort-order.enum'; import { SortOrder } from '@msfa-enums/sort-order.enum';
import { environment } from '@msfa-environment'; import { environment } from '@msfa-environment';
import { EmployeeInviteMockApiResponse } from '@msfa-models/api/employee-invite.response.model'; import { EmployeeInviteMockApiResponse } from '@msfa-models/api/employee-invite.response.model';
import { EmployeeResponse, EmployeesApiResponse } from '@msfa-models/api/employee.response.model'; import {
EmployeeCompactResponse,
EmployeeResponse,
EmployeesApiResponse,
} from '@msfa-models/api/employee.response.model';
import { EmployeeInviteMockaData } from '@msfa-models/employee-invite-mock-data.model'; import { EmployeeInviteMockaData } from '@msfa-models/employee-invite-mock-data.model';
import { import {
Employee, Employee,
EmployeeCompact,
EmployeesData, EmployeesData,
mapEmployeeToRequestData, mapEmployeeToRequestData,
mapResponseToEmployee, mapResponseToEmployee,
@@ -27,8 +30,8 @@ export class EmployeeService {
private _apiUrl = `${environment.api.url}/users`; private _apiUrl = `${environment.api.url}/users`;
private _limit$ = new BehaviorSubject<number>(20); private _limit$ = new BehaviorSubject<number>(20);
private _page$ = new BehaviorSubject<number>(1); private _page$ = new BehaviorSubject<number>(1);
private _sort$ = new BehaviorSubject<Sort<keyof EmployeeCompact>>({ key: 'fullName', order: SortOrder.ASC }); private _sort$ = new BehaviorSubject<Sort<keyof EmployeeCompactResponse>>({ key: 'name', order: SortOrder.ASC });
public sort$: Observable<Sort<keyof EmployeeCompact>> = this._sort$.asObservable(); public sort$: Observable<Sort<keyof EmployeeCompactResponse>> = this._sort$.asObservable();
private _searchFilter$ = new BehaviorSubject<string>(''); private _searchFilter$ = new BehaviorSubject<string>('');
private _onlyEmployeesWithoutAuthorization$ = new BehaviorSubject<boolean>(false); private _onlyEmployeesWithoutAuthorization$ = new BehaviorSubject<boolean>(false);
@@ -47,7 +50,7 @@ export class EmployeeService {
private _fetchEmployees$( private _fetchEmployees$(
limit: number, limit: number,
page: number, page: number,
sort: Sort<keyof EmployeeCompact>, sort: Sort<keyof EmployeeCompactResponse>,
searchFilter: string, searchFilter: string,
onlyEmployeesWithoutAuthorization?: boolean onlyEmployeesWithoutAuthorization?: boolean
): Observable<EmployeesData> { ): Observable<EmployeesData> {
@@ -94,7 +97,7 @@ export class EmployeeService {
this._onlyEmployeesWithoutAuthorization$.next(value); this._onlyEmployeesWithoutAuthorization$.next(value);
} }
public setSort(newSortKey: keyof EmployeeCompact): void { public setSort(newSortKey: keyof EmployeeCompactResponse): void {
const currentSort = this._sort$.getValue(); const currentSort = this._sort$.getValue();
const order = const order =
currentSort.key === newSortKey && currentSort.order === SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC; currentSort.key === newSortKey && currentSort.order === SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;

View File

@@ -9,9 +9,8 @@ server.use(middlewares);
server.use( server.use(
jsonServer.rewriter({ jsonServer.rewriter({
'/api/*': '/$1', '/api/*': '/$1',
'*sort=fullName*': '$1sort=name$2', '*sort=utforandeVerksamhet*': '$1sort=utforandeVerksamhet[0]$2',
'*sort=utforandeVerksamheter*': '$1sort=utforandeVerksamhet[0]$2', '*sort=tjanst*': '$1sort=tjanst[0]$2',
'*sort=tjanster*': '$1sort=tjanst[0]$2',
'/users/:id': '/employees?ciamUserId=:id', '/users/:id': '/employees?ciamUserId=:id',
'/users*': '/employees$1', '/users*': '/employees$1',
'/employees*search=*': '/employees$1fullName_like=$2', '/employees*search=*': '/employees$1fullName_like=$2',