diff --git a/src/app/core/data/comcol-data.service.ts b/src/app/core/data/comcol-data.service.ts index 8519bb2b2561aa7084b12916af685f8201f94170..0859d075ca9b78578d38f9b5e41c0ff6df070c3b 100644 --- a/src/app/core/data/comcol-data.service.ts +++ b/src/app/core/data/comcol-data.service.ts @@ -66,20 +66,4 @@ export abstract class ComColDataService<TNormalized extends NormalizedObject, TD } } - public buildFormData(comcol, parentUUID): FormData { - const form: FormData = new FormData(); - form.append('name', comcol.name); - if (isNotEmpty(parentUUID)) { - form.append('parent', parentUUID); - } - if (comcol.metadata) { - for (const i of Object.keys(comcol.metadata)) { - if (isNotEmpty(comcol.metadata[i].value)) { - form.append(comcol.metadata[i].key, comcol.metadata[i].value); - } - } - } - return form; - } - } diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts index b2946b2164977979248a7a2b839916e674f17b2c..13550b2358cf174592b48b908c553668afd2d3e4 100644 --- a/src/app/core/data/data.service.ts +++ b/src/app/core/data/data.service.ts @@ -121,12 +121,13 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain> const requestId = this.requestService.generateRequestId(); const endpoint$ = this.halService.getEndpoint(this.linkPath).pipe( isNotEmptyOperator(), - distinctUntilChanged() + distinctUntilChanged(), + map((endpoint: string) => parentUUID ? `${endpoint}?parent=${parentUUID}` : endpoint) ); const request$ = endpoint$.pipe( take(1), - map((endpoint: string) => new CreateRequest(requestId, endpoint, this.buildFormData(dso, parentUUID))), + map((endpoint: string) => new CreateRequest(requestId, endpoint, dso)), configureRequest(this.requestService) ); @@ -153,6 +154,4 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain> return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$); } - public abstract buildFormData(dso: TDomain, parentUUID: string): FormData; - } diff --git a/src/app/core/data/dspace-object-data.service.ts b/src/app/core/data/dspace-object-data.service.ts index 14540d0782c50d56ebdb00173c88a17b9d2cf7d5..d14d7f8a0b9432f8fae7a697eedc646ae9775464 100644 --- a/src/app/core/data/dspace-object-data.service.ts +++ b/src/app/core/data/dspace-object-data.service.ts @@ -37,10 +37,6 @@ class DataServiceImpl extends DataService<NormalizedDSpaceObject, DSpaceObject> getFindByIDHref(endpoint, resourceID): string { return endpoint.replace(/\{\?uuid\}/,`?uuid=${resourceID}`); } - - buildFormData(dso: DSpaceObject, parentUUID: string): FormData { - return undefined; - } } @Injectable() diff --git a/src/app/core/data/item-data.service.ts b/src/app/core/data/item-data.service.ts index c3c32691ce909558fee92ef9ae41e2754fad3f96..6b62fe6688633bb8d1e61fc74b343cb89dfdfd06 100644 --- a/src/app/core/data/item-data.service.ts +++ b/src/app/core/data/item-data.service.ts @@ -47,9 +47,4 @@ export class ItemDataService extends DataService<NormalizedItem, Item> { } } - buildFormData(dso: Item, parentUUID: string): FormData { - // TODO: build FormData for creating an Item - return undefined; - } - } diff --git a/src/app/core/data/request.effects.ts b/src/app/core/data/request.effects.ts index 9d27717dc699f829216f224f478200a6d74d5ba5..5fadd316f42288b9111635c4fbd7a8b572062d9f 100644 --- a/src/app/core/data/request.effects.ts +++ b/src/app/core/data/request.effects.ts @@ -38,7 +38,7 @@ export class RequestEffects { }), map((entry: RequestEntry) => entry.request), flatMap((request: RestRequest) => { - let body = request.body; + let body; if (isNotEmpty(request.body)) { const serializer = new DSpaceRESTv2Serializer(NormalizedObjectFactory.getConstructor(request.body.type)); body = serializer.serialize(request.body); diff --git a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts index 78c93b8c080ab66de1bac2c0f5ac582ae62f3cd1..c8cced9e8ae9bd64aedefe379e4ba0cc8181a723 100644 --- a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts +++ b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts @@ -6,6 +6,8 @@ import { RestRequestMethod } from '../data/request.models'; import { DSpaceRESTV2Response } from './dspace-rest-v2-response.model'; import { HttpObserve } from '@angular/common/http/src/client'; +import { isNotEmpty } from '../../shared/empty.util'; +import { DSpaceObject } from '../shared/dspace-object.model'; export interface HttpOptions { body?: any; @@ -59,6 +61,9 @@ export class DSpaceRESTv2Service { request(method: RestRequestMethod, url: string, body?: any, options?: HttpOptions): Observable<DSpaceRESTV2Response> { const requestOptions: HttpOptions = {}; requestOptions.body = body; + if (method === RestRequestMethod.Post && isNotEmpty(body)) { + requestOptions.body = this.buildFormData(body); + } requestOptions.observe = 'response'; if (options && options.headers) { requestOptions.headers = Object.assign(new HttpHeaders(), options.headers); @@ -74,4 +79,17 @@ export class DSpaceRESTv2Service { }); } + buildFormData(dso: DSpaceObject): FormData { + const form: FormData = new FormData(); + form.append('name', dso.name); + if (dso.metadata) { + for (const i of Object.keys(dso.metadata)) { + if (isNotEmpty(dso.metadata[i].value)) { + form.append(dso.metadata[i].key, dso.metadata[i].value); + } + } + } + return form; + } + }