diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts index 3e67675290..a7528bae0c 100644 --- a/src/app/core/data/data.service.ts +++ b/src/app/core/data/data.service.ts @@ -44,7 +44,7 @@ import { FindByIDRequest, FindListOptions, FindListRequest, - GetRequest + GetRequest, PatchRequest } from './request.models'; import { RequestEntry } from './request.reducer'; import { RequestService } from './request.service'; @@ -337,6 +337,32 @@ export abstract class DataService { this.objectCache.addPatch(href, operations); } + /** + * Send out an immediate patch request, instead of adding to the object cache first + * This is useful in cases where you need the returned response and an object cache update is not needed + * @param dso The dso to send the patch to + * @param operations The patch operations + */ + immediatePatch(dso: T, operations: Operation[]): Observable { + const requestId = this.requestService.generateRequestId(); + + const hrefObs = this.halService.getEndpoint(this.linkPath).pipe( + map((endpoint: string) => this.getIDHref(endpoint, dso.uuid))); + + hrefObs.pipe( + find((href: string) => hasValue(href)), + map((href: string) => { + const request = new PatchRequest(requestId, href, operations); + this.requestService.configure(request); + }) + ).subscribe(); + + return this.requestService.getByUUID(requestId).pipe( + find((request: RequestEntry) => request.completed), + map((request: RequestEntry) => request.response) + ); + } + /** * Add a new patch to the object cache * The patch is derived from the differences between the given object and its version in the object cache