diff --git a/src/app/core/data/comcol-data.service.ts b/src/app/core/data/comcol-data.service.ts index c47d48dc07ec7df61210b1c754597bc3a27c2720..c9dff8fbe1a5da667060520af7a2f3b7b90fa4d9 100644 --- a/src/app/core/data/comcol-data.service.ts +++ b/src/app/core/data/comcol-data.service.ts @@ -66,19 +66,23 @@ export abstract class ComColDataService<TNormalized extends NormalizedObject, TD } } - public buildCreateParams(comcol): Observable<string> { + public buildCreateBody(comcol): Observable<any> { return comcol.owner.pipe( map((rd: RemoteData<Community | Collection>) => { - let urlParams = '?name=' + comcol.name; + const form: any = { + name: comcol.name + }; if (rd.payload.id) { - urlParams += '&parent=' + rd.payload.id; + form.parent = rd.payload.id; } if (comcol.metadata) { for (const i of Object.keys(comcol.metadata)) { - urlParams += '&' + comcol.metadata[i].key + '=' + comcol.metadata[i].value; + if (isNotEmpty(comcol.metadata[i].value)) { + form[comcol.metadata[i].key] = comcol.metadata[i].value; + } } } - return urlParams; + return form; }) ); } diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts index 9d7422cbe1c75d70e689917621b1750581611dc9..3dc32e9e696fd6cee536beee1bedc064395045af 100644 --- a/src/app/core/data/data.service.ts +++ b/src/app/core/data/data.service.ts @@ -14,24 +14,21 @@ import { FindAllRequest, FindByIDRequest, GetRequest, - PostRequest, RestRequest } from './request.models'; import { RequestService } from './request.service'; import { NormalizedObject } from '../cache/models/normalized-object.model'; -import { distinctUntilChanged, map, share, switchMap, take, withLatestFrom } from 'rxjs/operators'; +import { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators'; import { configureRequest, - filterSuccessfulResponses, getRequestFromSelflink, getRequestFromUUID, + filterSuccessfulResponses, getResponseFromSelflink } from '../shared/operators'; import { ResponseCacheEntry } from '../cache/response-cache.reducer'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; import { HttpHeaders } from '@angular/common/http'; -import { DSOSuccessResponse, ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models'; +import { ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models'; import { AuthService } from '../auth/auth.service'; -import { Collection } from '../shared/collection.model'; -import { Community } from '../shared/community.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; @@ -123,19 +120,18 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain> const requestId = this.requestService.generateRequestId(); const endpoint$ = this.halService.getEndpoint(this.linkPath).pipe( isNotEmptyOperator(), - distinctUntilChanged(), - withLatestFrom(this.buildCreateParams(dso)), - map(([endpointURL, params]) => endpointURL + params) + distinctUntilChanged() ); const request$ = endpoint$.pipe( take(1), - map((endpoint) => { + withLatestFrom(this.buildCreateBody(dso)), + map(([endpoint, formdata]) => { const options: HttpOptions = Object.create({}); - const headers = new HttpHeaders(); - headers.append('Authentication', this.authService.buildAuthHeader()); + let headers = new HttpHeaders(); + headers = headers.append('Content-Type','multipart/form-data'); options.headers = headers; - return new CreateRequest(requestId, endpoint, options); + return new CreateRequest(requestId, endpoint, formdata, options); }), configureRequest(this.requestService) ); @@ -162,6 +158,6 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain> return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$); } - public abstract buildCreateParams(dso: TDomain): Observable<string>; + public abstract buildCreateBody(dso: TDomain): Observable<any>; } diff --git a/src/app/core/data/dspace-object-data.service.ts b/src/app/core/data/dspace-object-data.service.ts index eb657e1737a8d32b5d7e8cf2106e66196b1af0bb..8bae4e56ede2e0a54bfdd449f0dfac0bc668bbf7 100644 --- a/src/app/core/data/dspace-object-data.service.ts +++ b/src/app/core/data/dspace-object-data.service.ts @@ -36,7 +36,7 @@ class DataServiceImpl extends DataService<NormalizedDSpaceObject, DSpaceObject> return endpoint.replace(/\{\?uuid\}/,`?uuid=${resourceID}`); } - buildCreateParams(dso: DSpaceObject): Observable<string> { + buildCreateBody(dso: DSpaceObject): Observable<FormData> { return undefined; } } diff --git a/src/app/core/data/item-data.service.ts b/src/app/core/data/item-data.service.ts index 448d3fc84b1907ee85707cc131d48283aff18e08..343d4efede9a82d0901b41f2e5cc03fe427fbc8d 100644 --- a/src/app/core/data/item-data.service.ts +++ b/src/app/core/data/item-data.service.ts @@ -45,8 +45,8 @@ export class ItemDataService extends DataService<NormalizedItem, Item> { } } - buildCreateParams(dso: Item): Observable<string> { - // TODO: Build parameters for creating an Item on the REST service + buildCreateBody(dso: Item): Observable<FormData> { + // TODO: Build http body for creating an Item on the REST service return undefined; }