From ca7e8798a061bff329fd1b714ebb6159d305026d Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 19 Apr 2019 17:40:51 +0200 Subject: [PATCH] Created MyDSpaceRequest to avoid use of forceBypassCache flag --- .../my-dspace-page.component.ts | 3 +- .../search-service/search.service.ts | 46 ++++++++++--------- src/app/core/data/request.models.ts | 4 ++ 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/app/+my-dspace-page/my-dspace-page.component.ts b/src/app/+my-dspace-page/my-dspace-page.component.ts index c2de29052a..9c5132727c 100644 --- a/src/app/+my-dspace-page/my-dspace-page.component.ts +++ b/src/app/+my-dspace-page/my-dspace-page.component.ts @@ -20,6 +20,7 @@ import { RoleType } from '../core/roles/role-types'; import { SearchConfigurationService } from '../+search-page/search-service/search-configuration.service'; import { MyDSpaceConfigurationService } from './my-dspace-configuration.service'; import { ViewMode } from '../core/shared/view-mode.model'; +import { MyDSpaceRequest } from '../core/data/request.models'; export const MYDSPACE_ROUTE = '/mydspace'; export const SEARCH_CONFIG_SERVICE: InjectionToken = new InjectionToken('searchConfigurationService'); @@ -87,7 +88,7 @@ export class MyDSpacePageComponent implements OnInit { private windowService: HostWindowService, @Inject(SEARCH_CONFIG_SERVICE) public searchConfigService: MyDSpaceConfigurationService) { this.isXsOrSm$ = this.windowService.isXsOrSm(); - this.service.setServiceOptions(MyDSpaceResponseParsingService, true); + this.service.setServiceOptions(MyDSpaceResponseParsingService, MyDSpaceRequest); } /** diff --git a/src/app/+search-page/search-service/search.service.ts b/src/app/+search-page/search-service/search.service.ts index 99866c3a22..751b46a92d 100644 --- a/src/app/+search-page/search-service/search.service.ts +++ b/src/app/+search-page/search-service/search.service.ts @@ -1,6 +1,6 @@ import { combineLatest as observableCombineLatest, Observable, of as observableOf } from 'rxjs'; import { Injectable, OnDestroy } from '@angular/core'; -import { ActivatedRoute, NavigationExtras, PRIMARY_OUTLET, Router, UrlSegmentGroup } from '@angular/router'; +import { NavigationExtras, PRIMARY_OUTLET, Router, UrlSegmentGroup } from '@angular/router'; import { first, map, switchMap } from 'rxjs/operators'; import { RemoteDataBuildService } from '../../core/cache/builders/remote-data-build.service'; import { @@ -17,7 +17,8 @@ import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { GenericConstructor } from '../../core/shared/generic-constructor'; import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; import { - configureRequest, filterSuccessfulResponses, + configureRequest, + filterSuccessfulResponses, getResponseFromEntry, getSucceededRemoteData } from '../../core/shared/operators'; @@ -58,16 +59,16 @@ export class SearchService implements OnDestroy { */ private facetLinkPathPrefix = 'discover/facets/'; - /** - * When true, a new search request is always dispatched - */ - private forceBypassCache = false; - /** * The ResponseParsingService constructor name */ private parser: GenericConstructor = SearchResponseParsingService; + /** + * The RestRequest constructor name + */ + private request: GenericConstructor = GetRequest; + /** * Subscription to unsubscribe from */ @@ -85,15 +86,16 @@ export class SearchService implements OnDestroy { /** * Method to set service options - * @param {GenericConstructor} parser The configuration necessary to perform this search - * @param {boolean} forceBypassCache When true, a new search request is always dispatched - * @returns {Observable>>>} Emits a paginated list with all search results found + * @param {GenericConstructor} parser The ResponseParsingService constructor name + * @param {boolean} request The RestRequest constructor name */ - setServiceOptions(parser: GenericConstructor, forceBypassCache: boolean) { + setServiceOptions(parser: GenericConstructor, request: GenericConstructor) { if (parser) { this.parser = parser; } - this.forceBypassCache = forceBypassCache; + if (request) { + this.request = request; + } } /** @@ -107,7 +109,8 @@ export class SearchService implements OnDestroy { if (hasValue(searchOptions)) { url = (searchOptions as PaginatedSearchOptions).toRestUrl(url); } - const request = new GetRequest(this.requestService.generateRequestId(), url); + const request = new this.request(this.requestService.generateRequestId(), url); + const getResponseParserFn: () => GenericConstructor = () => { return this.parser; }; @@ -116,7 +119,7 @@ export class SearchService implements OnDestroy { getResponseParser: getResponseParserFn }); }), - configureRequest(this.requestService, this.forceBypassCache), + configureRequest(this.requestService), ); const requestEntryObs = requestObs.pipe( switchMap((request: RestRequest) => this.requestService.getByHref(request.href)) @@ -176,9 +179,10 @@ export class SearchService implements OnDestroy { /** * Request the filter configuration for a given scope or the whole repository * @param {string} scope UUID of the object for which config the filter config is requested, when no scope is provided the configuration for the whole repository is loaded + * @param {string} configurationName the name of the configuration * @returns {Observable>} The found filter configuration */ - getConfig(scope?: string, configuration?: string): Observable> { + getConfig(scope?: string, configurationName?: string): Observable> { const requestObs = this.halService.getEndpoint(this.facetLinkPathPrefix).pipe( map((url: string) => { const args: string[] = []; @@ -187,22 +191,22 @@ export class SearchService implements OnDestroy { args.push(`scope=${scope}`); } - if (isNotEmpty(configuration)) { - args.push(`configuration=${configuration}`); + if (isNotEmpty(configurationName)) { + args.push(`configuration=${configurationName}`); } if (isNotEmpty(args)) { url = new URLCombiner(url, `?${args.join('&')}`).toString(); } - const request = new GetRequest(this.requestService.generateRequestId(), url); + const request = new this.request(this.requestService.generateRequestId(), url); return Object.assign(request, { getResponseParser(): GenericConstructor { return FacetConfigResponseParsingService; } }); }), - configureRequest(this.requestService, this.forceBypassCache) + configureRequest(this.requestService) ); const requestEntryObs = requestObs.pipe( @@ -238,14 +242,14 @@ export class SearchService implements OnDestroy { url = searchOptions.toRestUrl(url, args); } - const request = new GetRequest(this.requestService.generateRequestId(), url); + const request = new this.request(this.requestService.generateRequestId(), url); return Object.assign(request, { getResponseParser(): GenericConstructor { return FacetValueResponseParsingService; } }); }), - configureRequest(this.requestService, this.forceBypassCache), + configureRequest(this.requestService), first() ); diff --git a/src/app/core/data/request.models.ts b/src/app/core/data/request.models.ts index f8cc0a4fd8..cfed2dcbea 100644 --- a/src/app/core/data/request.models.ts +++ b/src/app/core/data/request.models.ts @@ -412,6 +412,10 @@ export class TaskDeleteRequest extends DeleteRequest { } } +export class MyDSpaceRequest extends GetRequest { + public responseMsToLive = 0; +} + export class RequestError extends Error { statusCode: number; statusText: string;