Files
app-angular-ngrx/src/app/ngrx/employees.effects.ts
2022-04-04 17:04:59 +02:00

96 lines
3.5 KiB
TypeScript

import { Injectable } from '@angular/core';
import { EmployeesService } from '../services/employees.service';
import { createEffect, Actions, ofType } from '@ngrx/effects';
import { Observable, of, EMPTY } from 'rxjs';
import { Action } from '@ngrx/store';
import { EmployeesActionsTypes, EmployeesActions } from './employees.actions';
import { mergeMap, map, catchError } from 'rxjs/operators';
import { GetAllEmployeesActionSuccess,
GetAllEmployeesActionError,
SearchEmployeesActionSuccess,
SearchEmployeesActionError,
DeleteEmployeesActionSuccess,
DeleteEmployeesActionError,
NewEmployeeActionSuccess,
SaveEmployeeActionSuccess,
SaveEmployeeActionError,
EditEmployeeActionSuccess,
EditEmployeeActionError,
UpdateEmployeeActionSuccess,
UpdateEmployeeActionError} from './employees.actions';
@Injectable()
export class EmployeesEffects {
getAllEmployeesEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.GET_ALL_EMPLOYEES),
mergeMap((action:EmployeesActions) => {
return this.employeesService.getAllEmployees().pipe(
map(employees => new GetAllEmployeesActionSuccess(employees)),
catchError((err) => of(new GetAllEmployeesActionError(err.message)))
)
})
));
searchEmployeesEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.SEARCH_EMPLOYEES),
mergeMap((action:EmployeesActions) => {
return this.employeesService.searchEmployees(action.payload).pipe(
map(employees => new SearchEmployeesActionSuccess(employees)),
catchError((err) => of(new SearchEmployeesActionError(err.message)))
)
})
));
deleteEmployeesEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.DELETE_EMPLOYEES),
mergeMap((action:EmployeesActions) => {
return this.employeesService.deleteEmployee(action.payload).pipe(
map(() => new DeleteEmployeesActionSuccess(action.payload)),
catchError((err) => of(new DeleteEmployeesActionError(err.message)))
)
})
));
newEmployeesEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.NEW_EMPLOYEE),
map((action:EmployeesActions) => {
return new NewEmployeeActionSuccess({});
})
));
saveEmployeeEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.SAVE_EMPLOYEE),
mergeMap((action:EmployeesActions) => {
return this.employeesService.saveEmployee(action.payload).pipe(
map((employee) => new SaveEmployeeActionSuccess(employee)),
catchError((err) => of(new SaveEmployeeActionError(err.message)))
)
})
));
editEmployeeEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.EDIT_EMPLOYEE),
mergeMap((action:EmployeesActions) => {
return this.employeesService.getEmployee(action.payload).pipe(
map((employee) => new EditEmployeeActionSuccess(employee)),
catchError((err) => of(new EditEmployeeActionError(err.message)))
)
})
));
updateEmployeeEffect$:Observable<EmployeesActions> = createEffect(() => this.actions$.pipe(
ofType(EmployeesActionsTypes.UPDATE_EMPLOYEE),
mergeMap((action:EmployeesActions) => {
return this.employeesService.updateEmployee(action.payload).pipe(
map((employee) => new UpdateEmployeeActionSuccess(employee)),
catchError((err) => of(new UpdateEmployeeActionError(err.message)))
)
})
));
constructor(
private employeesService:EmployeesService,
private actions$:Actions
) {}
}