54472: Refactored create to work with new response cache

This commit is contained in:
Kristof De Langhe
2018-10-29 16:04:18 +01:00
parent b09fa0e8af
commit 1fc9359133

View File

@@ -25,7 +25,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { import {
configureRequest, configureRequest,
filterSuccessfulResponses, filterSuccessfulResponses, getResourceLinksFromResponse,
getResponseFromEntry getResponseFromEntry
} from '../shared/operators'; } from '../shared/operators';
import { DSOSuccessResponse, ErrorResponse, RestResponse } from '../cache/response.models'; import { DSOSuccessResponse, ErrorResponse, RestResponse } from '../cache/response.models';
@@ -138,13 +138,15 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
const request$ = endpoint$.pipe( const request$ = endpoint$.pipe(
take(1), take(1),
map((endpoint: string) => new CreateRequest(requestId, endpoint, dso)), map((endpoint: string) => new CreateRequest(requestId, endpoint, dso))
configureRequest(this.requestService)
); );
const selfLink$ = request$.pipe( // Execute the post request
map((restRequest: RestRequest) => restRequest.href), request$.pipe(
switchMap((href: string) => this.requestService.getByHref(href)), configureRequest(this.requestService)
).subscribe();
const selfLink$ = this.requestService.getByUUID(requestId).pipe(
getResponseFromEntry(), getResponseFromEntry(),
map((response: RestResponse) => { map((response: RestResponse) => {
if (!response.isSuccessful && response instanceof ErrorResponse) { if (!response.isSuccessful && response instanceof ErrorResponse) {
@@ -153,13 +155,17 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
return response; return response;
} }
}), }),
filterSuccessfulResponses(), map((response: any) => {
map((response: DSOSuccessResponse) => { if (isNotEmpty(response.resourceSelfLinks)) {
return response.resourceSelfLinks[0]; return response.resourceSelfLinks[0];
}
}), }),
distinctUntilChanged() distinctUntilChanged()
) as Observable<string>; ) as Observable<string>;
return this.rdbService.buildSingle(selfLink$) as Observable<RemoteData<TDomain>>;
return selfLink$.pipe(
switchMap((selfLink: string) => this.findByHref(selfLink)),
)
} }
} }