File

projects/ngrx-data-lib/src/lib/state/effects.ts

Index

Properties

Constructor

constructor(actions$: Actions, dataService: DataService, configService: NgrxDataConfigurationService, store: Store)
Parameters :
Name Type Optional
actions$ Actions No
dataService DataService No
configService NgrxDataConfigurationService No
store Store<any> No

Properties

makeRequest$
Default value : this.actions$.pipe(ofType(RequestActions.ActionTypes.MakeRequest), mergeMap((action)=>{ let makeRequestAction = action as RequestActions.MakeRequest; let providerUid = makeRequestAction.providerUid; let uniqueName = makeRequestAction.uniqueName; //get the provider from the service let provider = this.configService.getRequestProvider(providerUid); //make the http request with the provider return this.dataService.makeRequest(makeRequestAction.baseUrl, provider) .pipe(mergeMap(response=>{ return <Action[]>[new RequestActions.RequestSuccess(providerUid, response, uniqueName)]; }), catchError(err=>{ //delete the provider from the service very important this.configService.deleteRequestProvider(providerUid); return of(new RequestActions.RequestError([err], uniqueName)); })); }))
Decorators :
@Effect()
requestSuccess
Default value : this.actions$.pipe(ofType(RequestActions.ActionTypes.RequestSuccess), withLatestFrom(this.store), mergeMap(([action, state])=>{ let requestSuccessAction = action as RequestActions.RequestSuccess; let data = requestSuccessAction.data; let uniqueName = requestSuccessAction.uniqueName; //get the provider from the service let provider = this.configService.getRequestProvider(requestSuccessAction.providerUid); //delete the provider from the service very important this.configService.deleteRequestProvider(requestSuccessAction.providerUid); let method = provider.requestType; let dataMapper = provider.dataMapper; try { let crudActions = dataMapper(data, uniqueName, method, state.entityDb); let result : Action[] = crudActions; result.push(new RequestActions.SuccessMapping(uniqueName)); return <Action[]>crudActions; } catch(error) { return <Action[]>[new RequestActions.RequestError([error], uniqueName)]; } }))
Decorators :
@Effect()
import { Injectable } from '@angular/core';
import { DataService } from '../services/entity-data.service';
import * as RequestActions from './request-actions';
import { Actions, ofType, Effect } from '@ngrx/effects';
import { mergeMap, map, catchError, withLatestFrom } from 'rxjs/operators';
import { NgrxDataConfigurationService } from '../services/configuaration.service';
import { of } from 'rxjs';
import { Action, Store } from '@ngrx/store';

@Injectable()
export class NgrxDataEffects
{    
    constructor(private actions$: Actions, private dataService: DataService, private configService: NgrxDataConfigurationService, private store: Store<any>){
      
    }

    @Effect()
    requestSuccess = this.actions$.pipe(ofType(RequestActions.ActionTypes.RequestSuccess),
    withLatestFrom(this.store),
    mergeMap(([action, state])=>{

      let requestSuccessAction = action as RequestActions.RequestSuccess;

      let data = requestSuccessAction.data;      
      let uniqueName = requestSuccessAction.uniqueName;

      //get the provider from the service
      let provider = this.configService.getRequestProvider(requestSuccessAction.providerUid);
      //delete the provider from the service very important
      this.configService.deleteRequestProvider(requestSuccessAction.providerUid);

      let method = provider.requestType;

      let dataMapper = provider.dataMapper;

      try
      {
         let crudActions = dataMapper(data, uniqueName, method, state.entityDb);

         let result : Action[] = crudActions;
         result.push(new RequestActions.SuccessMapping(uniqueName));

         return <Action[]>crudActions;
      }
      catch(error)
      {
         return <Action[]>[new RequestActions.RequestError([error], uniqueName)];
      }

    }));

    @Effect()
    makeRequest$ = this.actions$.pipe(ofType(RequestActions.ActionTypes.MakeRequest), 
    mergeMap((action)=>{

       let makeRequestAction = action as RequestActions.MakeRequest;

       let providerUid = makeRequestAction.providerUid;
       let uniqueName = makeRequestAction.uniqueName;

       //get the provider from the service
       let provider = this.configService.getRequestProvider(providerUid);

       //make the http request with the provider
       return this.dataService.makeRequest(makeRequestAction.baseUrl, provider)

       .pipe(mergeMap(response=>{

         return <Action[]>[new RequestActions.RequestSuccess(providerUid, response, uniqueName)];

       }), catchError(err=>{

         //delete the provider from the service very important
         this.configService.deleteRequestProvider(providerUid);
         return of(new RequestActions.RequestError([err], uniqueName));

       }));
       

    }))

}

result-matching ""

    No results matching ""