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 = 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 = 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 = 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 = createEffect(() => this.actions$.pipe( ofType(EmployeesActionsTypes.NEW_EMPLOYEE), map((action:EmployeesActions) => { return new NewEmployeeActionSuccess({}); }) )); saveEmployeeEffect$:Observable = 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 = 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 = 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 ) {} }