54472: form-data intermediate commit

This commit is contained in:
Kristof De Langhe
2018-09-11 14:50:23 +02:00
parent 2740f69025
commit ad9852f194
4 changed files with 22 additions and 22 deletions

View File

@@ -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;
})
);
}

View File

@@ -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>;
}

View File

@@ -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;
}
}

View File

@@ -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;
}