127655: Fix submission infinite loading

This commit is contained in:
Kristof De Langhe
2025-04-28 13:04:44 +02:00
parent 404ccd9b0e
commit 287d35cb26

View File

@@ -23,6 +23,23 @@ import { RemoteData } from '../data/remote-data';
import { SubmissionResponse } from './submission-response.model'; import { SubmissionResponse } from './submission-response.model';
import { RestRequest } from '../data/rest-request.model'; import { RestRequest } from '../data/rest-request.model';
/**
* Retrieve the first emitting payload's dataDefinition, or throw an error if the request failed
*/
export const getFirstDataDefinition = () =>
(source: Observable<RemoteData<SubmissionResponse>>): Observable<SubmitDataResponseDefinitionObject> =>
source.pipe(
getFirstCompletedRemoteData(),
map((response: RemoteData<SubmissionResponse>) => {
if (response.hasFailed) {
throw new Error(response.errorMessage);
} else {
return hasValue(response.payload) ? response.payload.dataDefinition : response.payload;
}
}),
distinctUntilChanged(),
);
/** /**
* The service handling all submission REST requests * The service handling all submission REST requests
*/ */
@@ -46,15 +63,7 @@ export class SubmissionRestService {
*/ */
protected fetchRequest(requestId: string): Observable<SubmitDataResponseDefinitionObject> { protected fetchRequest(requestId: string): Observable<SubmitDataResponseDefinitionObject> {
return this.rdbService.buildFromRequestUUID<SubmissionResponse>(requestId).pipe( return this.rdbService.buildFromRequestUUID<SubmissionResponse>(requestId).pipe(
getFirstCompletedRemoteData(), getFirstDataDefinition(),
map((response: RemoteData<SubmissionResponse>) => {
if (response.hasFailed) {
throw new Error(response.errorMessage);
} else {
return hasValue(response.payload) ? response.payload.dataDefinition : response.payload;
}
}),
distinctUntilChanged()
); );
} }
@@ -119,8 +128,9 @@ export class SubmissionRestService {
tap((request: RestRequest) => { tap((request: RestRequest) => {
this.requestService.send(request); this.requestService.send(request);
}), }),
mergeMap(() => this.fetchRequest(requestId)), mergeMap((request) => this.rdbService.buildSingle(request.href)),
distinctUntilChanged()); getFirstDataDefinition(),
);
} }
/** /**