11import { Injectable } from '@angular/core' ;
22
33import { Observable , skipWhile } from 'rxjs' ;
4- import { distinctUntilChanged , filter , map , mergeMap , tap } from 'rxjs/operators' ;
4+ import { distinctUntilChanged , filter , map , mergeMap , switchMap , tap } from 'rxjs/operators' ;
55
66import { RequestService } from '../data/request.service' ;
77import { hasValue , isNotEmpty } from '../../shared/empty.util' ;
@@ -21,7 +21,6 @@ import { getFirstCompletedRemoteData } from '../shared/operators';
2121import { URLCombiner } from '../url-combiner/url-combiner' ;
2222import { RemoteData } from '../data/remote-data' ;
2323import { SubmissionResponse } from './submission-response.model' ;
24- import { RestRequest } from '../data/rest-request.model' ;
2524
2625/**
2726 * Retrieve the first emitting payload's dataDefinition, or throw an error if the request failed
@@ -126,9 +125,12 @@ export class SubmissionRestService {
126125 filter ( ( href : string ) => isNotEmpty ( href ) ) ,
127126 distinctUntilChanged ( ) ,
128127 mergeMap ( ( endpointURL : string ) => {
129- const request = this . sendGetDataRequest ( endpointURL , useCachedVersionIfAvailable ) ;
128+ this . sendGetDataRequest ( endpointURL , useCachedVersionIfAvailable ) ;
130129 const startTime : number = new Date ( ) . getTime ( ) ;
131- return this . rdbService . buildSingle ( request . href ) . pipe (
130+ return this . requestService . getByHref ( endpointURL ) . pipe (
131+ map ( ( requestEntry ) => requestEntry . request . uuid ) ,
132+ distinctUntilChanged ( ) ,
133+ switchMap ( ( requestId ) => this . rdbService . buildFromRequestUUID < SubmissionResponse > ( requestId ) ) ,
132134 // This skip ensures that if a stale object is present in the cache when you do a
133135 // call it isn't immediately returned, but we wait until the remote data for the new request
134136 // is created. If useCachedVersionIfAvailable is false it also ensures you don't get a
@@ -152,14 +154,11 @@ export class SubmissionRestService {
152154 * Endpoint URL of the submission data
153155 * @param useCachedVersionIfAvailable
154156 * If this is true, the request will only be sent if there's no valid & cached version. Defaults to false
155- * @return RestRequest
156- * Request sent
157157 */
158- private sendGetDataRequest ( href : string , useCachedVersionIfAvailable = false ) : RestRequest {
158+ private sendGetDataRequest ( href : string , useCachedVersionIfAvailable = false ) {
159159 const requestId = this . requestService . generateRequestId ( ) ;
160160 const request = new SubmissionRequest ( requestId , href ) ;
161161 this . requestService . send ( request , useCachedVersionIfAvailable ) ;
162- return request ;
163162 }
164163
165164 /**
0 commit comments