import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Actions, Effect, ofType } from '@ngrx/effects'; import { Action } from '@ngrx/store'; import { get, join, map as _map } from 'lodash'; import { ToastrService } from 'ngx-toastr'; import { Observable, of } from 'rxjs'; import { catchError, map, switchMap, tap } from 'rxjs/internal/operators'; import { SeamsHttpResponse } from '../../shared/models/http-response'; import { SaveAssessmentDecisionAction, AssessmentDecisionActionTypes, SaveAssessmentDecisionSuccessAction, SaveAssessmentDecisionFailAction } from '../actions/exempt-ep.action'; import { ExemptEPService } from '../services/exempt-ep.service'; import {handleLoadFail, handleSuccess} from "../functions/handle-response"; @Injectable() export class ExemptEPEffects { @Effect() saveAssessmentDecision$: Observable = this.actions$.pipe( ofType(AssessmentDecisionActionTypes.SaveAssessmentDecision), map((action: SaveAssessmentDecisionAction) => action.payload), switchMap((payload: {assessmentId: number, isExempt: boolean}) => { return this.exemptEPService.saveAssessmentDecision( payload ).pipe( map((data: number) => new SaveAssessmentDecisionSuccessAction( data )), catchError((err: unknown) => { return of(new SaveAssessmentDecisionFailAction( new SeamsHttpResponse( get(err, 'error') ) )); } ), ); }), ); @Effect({ dispatch: false }) saveSuccessAction$: Observable = this.actions$.pipe( ofType(AssessmentDecisionActionTypes.SaveAssessmentDecisionSuccess), map((action: SaveAssessmentDecisionSuccessAction) => get(action, 'payload')), tap((data: number) => { handleSuccess(this.toastr); // this.assessmentDecisionService.dispatchLoadCaseNotes( data ); }), ); @Effect({ dispatch: false }) saveFailAction$: Observable = this.actions$.pipe( ofType(AssessmentDecisionActionTypes.SaveAssessmentDecisionFail), map((action: SaveAssessmentDecisionFailAction) => get(action, 'payload')), tap((response: SeamsHttpResponse) => { handleLoadFail(this.toastr, _map( get(response, 'seamsErrorCodes'), 'value' ) ); }), ); constructor(private actions$: Actions, private snackBar: MatSnackBar, private exemptEPService: ExemptEPService, private toastr: ToastrService) { } }