From f03126b5500d1e22cd5ffd4a928b16ced262c7ee Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 17 May 2018 17:38:28 +0200 Subject: [PATCH 1/3] request.effects.ts pipeable operators --- src/app/core/data/request.effects.ts | 34 +++++++++++++++------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/app/core/data/request.effects.ts b/src/app/core/data/request.effects.ts index 379540c779..157173a71f 100644 --- a/src/app/core/data/request.effects.ts +++ b/src/app/core/data/request.effects.ts @@ -1,7 +1,7 @@ import { Inject, Injectable, Injector } from '@angular/core'; import { Request } from '@angular/http'; import { RequestArgs } from '@angular/http/src/interfaces'; -import { Actions, Effect } from '@ngrx/effects'; +import { Actions, Effect, ofType } from '@ngrx/effects'; // tslint:disable-next-line:import-blacklist import { Observable } from 'rxjs'; @@ -18,32 +18,34 @@ import { RequestEntry } from './request.reducer'; import { RequestService } from './request.service'; import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer'; import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; +import { catchError, flatMap, map, tap } from 'rxjs/operators'; @Injectable() export class RequestEffects { - @Effect() execute = this.actions$ - .ofType(RequestActionTypes.EXECUTE) - .flatMap((action: RequestExecuteAction) => { + @Effect() execute = this.actions$.ofType(RequestActionTypes.EXECUTE).pipe( + flatMap((action: RequestExecuteAction) => { return this.requestService.getByUUID(action.payload) .take(1); - }) - .map((entry: RequestEntry) => entry.request) - .flatMap((request: RestRequest) => { + }), + map((entry: RequestEntry) => entry.request), + flatMap((request: RestRequest) => { let body; if (isNotEmpty(request.body)) { const serializer = new DSpaceRESTv2Serializer(NormalizedObjectFactory.getConstructor(request.body.type)); body = JSON.stringify(serializer.serialize(request.body)); } - return this.restApi.request(request.method, request.href, body) - .map((data: DSpaceRESTV2Response) => - this.injector.get(request.getResponseParser()).parse(request, data)) - .do((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)) - .map((response: RestResponse) => new RequestCompleteAction(request.uuid)) - .catch((error: RequestError) => Observable.of(new ErrorResponse(error)) - .do((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)) - .map((response: RestResponse) => new RequestCompleteAction(request.uuid))); - }); + return this.restApi.request(request.method, request.href, body).pipe( + map((data: DSpaceRESTV2Response) => this.injector.get(request.getResponseParser()).parse(request, data)), + tap((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)), + map((response: RestResponse) => new RequestCompleteAction(request.uuid)), + catchError((error: RequestError) => Observable.of(new ErrorResponse(error)).pipe( + tap((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)), + map((response: RestResponse) => new RequestCompleteAction(request.uuid)) + )) + ); + }) + ); constructor( @Inject(GLOBAL_CONFIG) private EnvConfig: GlobalConfig, From 184d47bb41b917fb7de8dcb5ddc1b1bfc092c457 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 17 May 2018 17:56:06 +0200 Subject: [PATCH 2/3] request.effects.ts pipeable operators fine-tuning --- src/app/core/data/request.effects.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/app/core/data/request.effects.ts b/src/app/core/data/request.effects.ts index 157173a71f..f83851a737 100644 --- a/src/app/core/data/request.effects.ts +++ b/src/app/core/data/request.effects.ts @@ -18,15 +18,23 @@ import { RequestEntry } from './request.reducer'; import { RequestService } from './request.service'; import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer'; import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; -import { catchError, flatMap, map, tap } from 'rxjs/operators'; +import { catchError, flatMap, map, take, tap } from 'rxjs/operators'; + +export const addToResponseCacheAndCompleteAction = (request: RestRequest) => + (source: Observable): Observable => + source.pipe( + tap((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)), + map((response: RestResponse) => new RequestCompleteAction(request.uuid)) + ); @Injectable() export class RequestEffects { @Effect() execute = this.actions$.ofType(RequestActionTypes.EXECUTE).pipe( flatMap((action: RequestExecuteAction) => { - return this.requestService.getByUUID(action.payload) - .take(1); + return this.requestService.getByUUID(action.payload).pipe( + take(1) + ); }), map((entry: RequestEntry) => entry.request), flatMap((request: RestRequest) => { @@ -37,11 +45,9 @@ export class RequestEffects { } return this.restApi.request(request.method, request.href, body).pipe( map((data: DSpaceRESTV2Response) => this.injector.get(request.getResponseParser()).parse(request, data)), - tap((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)), - map((response: RestResponse) => new RequestCompleteAction(request.uuid)), + addToResponseCacheAndCompleteAction(request), catchError((error: RequestError) => Observable.of(new ErrorResponse(error)).pipe( - tap((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)), - map((response: RestResponse) => new RequestCompleteAction(request.uuid)) + addToResponseCacheAndCompleteAction(request) )) ); }) From c9c2e70c0058566e76fee5bef9a28f9dfb6ca22f Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Fri, 18 May 2018 10:09:47 +0200 Subject: [PATCH 3/3] request.effects.ts pipeable operators error fix --- src/app/core/data/request.effects.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/core/data/request.effects.ts b/src/app/core/data/request.effects.ts index f83851a737..57a97df4a8 100644 --- a/src/app/core/data/request.effects.ts +++ b/src/app/core/data/request.effects.ts @@ -20,10 +20,10 @@ import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.seriali import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory'; import { catchError, flatMap, map, take, tap } from 'rxjs/operators'; -export const addToResponseCacheAndCompleteAction = (request: RestRequest) => +export const addToResponseCacheAndCompleteAction = (request: RestRequest, responseCache: ResponseCacheService, envConfig: GlobalConfig) => (source: Observable): Observable => source.pipe( - tap((response: RestResponse) => this.responseCache.add(request.href, response, this.EnvConfig.cache.msToLive)), + tap((response: RestResponse) => responseCache.add(request.href, response, envConfig.cache.msToLive)), map((response: RestResponse) => new RequestCompleteAction(request.uuid)) ); @@ -45,9 +45,9 @@ export class RequestEffects { } return this.restApi.request(request.method, request.href, body).pipe( map((data: DSpaceRESTV2Response) => this.injector.get(request.getResponseParser()).parse(request, data)), - addToResponseCacheAndCompleteAction(request), + addToResponseCacheAndCompleteAction(request, this.responseCache, this.EnvConfig), catchError((error: RequestError) => Observable.of(new ErrorResponse(error)).pipe( - addToResponseCacheAndCompleteAction(request) + addToResponseCacheAndCompleteAction(request, this.responseCache, this.EnvConfig) )) ); })