import { Injectable } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Actions, Effect, ofType } from '@ngrx/effects'; import { Action } from '@ngrx/store'; import { from, Observable, of } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; import { CoreActionTypes, LoadReferenceDataAction, LoadReferenceDataFailAction, LoadReferenceDataSuccessAction } from '../actions/core.action'; import { CoreService } from '../services/core.service'; import { ReferenceData } from '../../shared/models/reference-data'; import { Entity } from '../../shared/models/entity'; import { TypedReferenceData } from '../../shared/models/typed-reference-data'; import { LoadCaseDetailsAction, CaseDetailsActionTypes, LoadCaseDetailsSuccessAction, LoadCaseDetailsFailAction } from '../actions/case-details.action'; import { CaseDetails } from '../models/case-details'; @Injectable() export class CoreEffects { @Effect() loadReferenceData$: Observable = this.actions$.pipe( ofType(CoreActionTypes.LoadReferenceData), map((action: LoadReferenceDataAction) => action.payload), switchMap((url: string) => { return this.coreService.loadReferenceData(url) .pipe(map((referenceData: TypedReferenceData[]) => new LoadReferenceDataSuccessAction(referenceData)), // tslint:disable-next-line:no-any catchError((err: any) => of(new LoadReferenceDataFailAction(err))), ); }), ); @Effect() loadCaseDetails$: Observable = this.actions$.pipe( ofType(CaseDetailsActionTypes.LoadCaseDetails), map((action: LoadCaseDetailsAction) => action.payload), switchMap((url: number) => { return this.coreService.getCaseDetails(url) .pipe( map((caseDetails: CaseDetails) => new LoadCaseDetailsSuccessAction(caseDetails)), // tslint:disable-next-line:no-any catchError((err: any) => of(new LoadCaseDetailsFailAction(err))), ); }), ); constructor(private actions$: Actions, private route: ActivatedRoute, private router: Router, private coreService: CoreService) { } }