From 0bccc7c2019b71b550c13836cbe8748a48b462f0 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 21 Jun 2017 11:30:48 +0200 Subject: [PATCH] fixed an issue where sometimes the wrong resource would be returned if it was fetched as part of a list, and later queried as a single resource --- .../builders/remote-data-build.service.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/src/app/core/cache/builders/remote-data-build.service.ts index 0901c8b69b..03f6e50444 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/src/app/core/cache/builders/remote-data-build.service.ts @@ -64,9 +64,10 @@ export class RemoteDataBuildService { .map((entry: ResponseCacheEntry) => ( entry.response).pageInfo) .distinctUntilChanged(); + //always use self link if that is cached, only if it isn't, get it via the response. const payload = - Observable.race( - this.objectCache.getBySelfLink(href, normalizedType), + Observable.combineLatest( + this.objectCache.getBySelfLink(href, normalizedType).startWith(undefined), responseCacheObs .filter((entry: ResponseCacheEntry) => entry.response.isSuccessful) .map((entry: ResponseCacheEntry) => ( entry.response).resourceUUIDs) @@ -79,8 +80,18 @@ export class RemoteDataBuildService { } }) .distinctUntilChanged() - ).map((normalized: TNormalized) => { - return this.build(normalized); + .startWith(undefined), + (fromSelfLink, fromResponse) => { + if (hasValue(fromSelfLink)) { + return fromSelfLink; + } + else { + return fromResponse; + } + } + ).filter(normalized => hasValue(normalized)) + .map((normalized: TNormalized) => { + return this.build(normalized); });