65240: Set uploader method to PUT if object already contains a logo

This commit is contained in:
Kristof De Langhe
2019-10-01 16:53:21 +02:00
parent ecef1b35d1
commit eade3e7d37
5 changed files with 33 additions and 27 deletions

View File

@@ -30,13 +30,7 @@ export class MyDSpaceNewSubmissionComponent implements OnDestroy, OnInit {
/** /**
* The UploaderOptions object * The UploaderOptions object
*/ */
public uploadFilesOptions: UploaderOptions = { public uploadFilesOptions: UploaderOptions = new UploaderOptions();
url: '',
authToken: null,
disableMultipart: false,
itemAlias: null,
autoUpload: true
};
/** /**
* Subscription to unsubscribe from * Subscription to unsubscribe from

View File

@@ -1,16 +1,13 @@
import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
import { Location } from '@angular/common'; import { Location } from '@angular/common';
import { import { DynamicFormService, DynamicInputModel } from '@ng-dynamic-forms/core';
DynamicFormService,
DynamicInputModel
} from '@ng-dynamic-forms/core';
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { DynamicFormControlModel } from '@ng-dynamic-forms/core/src/model/dynamic-form-control.model'; import { DynamicFormControlModel } from '@ng-dynamic-forms/core/src/model/dynamic-form-control.model';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { MetadataMap, MetadataValue } from '../../../core/shared/metadata.models'; import { MetadataMap, MetadataValue } from '../../../core/shared/metadata.models';
import { ResourceType } from '../../../core/shared/resource-type'; import { ResourceType } from '../../../core/shared/resource-type';
import { hasValue, isNotEmpty, isUndefined } from '../../empty.util'; import { hasValue, isNotEmpty } from '../../empty.util';
import { UploaderOptions } from '../../uploader/uploader-options.model'; import { UploaderOptions } from '../../uploader/uploader-options.model';
import { NotificationsService } from '../../notifications/notifications.service'; import { NotificationsService } from '../../notifications/notifications.service';
import { ComColDataService } from '../../../core/data/comcol-data.service'; import { ComColDataService } from '../../../core/data/comcol-data.service';
@@ -22,6 +19,10 @@ import { UploaderComponent } from '../../uploader/uploader.component';
import { FileUploader } from 'ng2-file-upload'; import { FileUploader } from 'ng2-file-upload';
import { ErrorResponse, RestResponse } from '../../../core/cache/response.models'; import { ErrorResponse, RestResponse } from '../../../core/cache/response.models';
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject'; import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
import { RemoteData } from '../../../core/data/remote-data';
import { Bitstream } from '../../../core/shared/bitstream.model';
import { combineLatest as observableCombineLatest } from 'rxjs';
import { RestRequestMethod } from '../../../core/data/rest-request-method';
/** /**
* A form for creating and editing Communities or Collections * A form for creating and editing Communities or Collections
@@ -72,13 +73,10 @@ export class ComColFormComponent<T extends DSpaceObject> implements OnInit, OnDe
* The uploader configuration options * The uploader configuration options
* @type {UploaderOptions} * @type {UploaderOptions}
*/ */
uploadFilesOptions: UploaderOptions = { uploadFilesOptions: UploaderOptions = Object.assign(new UploaderOptions(), {
url: '',
authToken: null,
disableMultipart: true, disableMultipart: true,
itemAlias: null,
autoUpload: false autoUpload: false
}; });
/** /**
* Emits DSO and Uploader when the form is submitted * Emits DSO and Uploader when the form is submitted
@@ -133,9 +131,16 @@ export class ComColFormComponent<T extends DSpaceObject> implements OnInit, OnDe
if (hasValue(this.dso.id)) { if (hasValue(this.dso.id)) {
this.subs.push( this.subs.push(
this.dsoService.getLogoEndpoint(this.dso.id).subscribe((href: string) => { observableCombineLatest(
this.dsoService.getLogoEndpoint(this.dso.id),
(this.dso as any).logo
).subscribe(([href, logoRD]: [string, RemoteData<Bitstream>]) => {
this.uploadFilesOptions.url = href; this.uploadFilesOptions.url = href;
this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); this.uploadFilesOptions.authToken = this.authService.buildAuthHeader();
// If the object already contains a logo, send out a PUT request instead of POST for setting a new logo
if (hasValue(logoRD.payload)) {
this.uploadFilesOptions.method = RestRequestMethod.PUT;
}
this.initializedUploaderOptions.next(true); this.initializedUploaderOptions.next(true);
}) })
); );
@@ -232,6 +237,9 @@ export class ComColFormComponent<T extends DSpaceObject> implements OnInit, OnDe
this.finishUpload.emit(); this.finishUpload.emit();
} }
/**
* Cancel the form and return to the previous page
*/
onCancel() { onCancel() {
this.location.back(); this.location.back();
} }

View File

@@ -1,3 +1,4 @@
import { RestRequestMethod } from '../../core/data/rest-request-method';
export class UploaderOptions { export class UploaderOptions {
/** /**
@@ -9,7 +10,15 @@ export class UploaderOptions {
disableMultipart = false; disableMultipart = false;
itemAlias: string; itemAlias: string = null;
/**
* Automatically send out an upload request when adding files
*/
autoUpload = true; autoUpload = true;
/**
* The request method to use for the file upload request
*/
method: RestRequestMethod = RestRequestMethod.POST;
} }

View File

@@ -95,7 +95,8 @@ export class UploaderComponent {
disableMultipart: this.uploadFilesOptions.disableMultipart, disableMultipart: this.uploadFilesOptions.disableMultipart,
itemAlias: this.uploadFilesOptions.itemAlias, itemAlias: this.uploadFilesOptions.itemAlias,
removeAfterUpload: true, removeAfterUpload: true,
autoUpload: this.uploadFilesOptions.autoUpload autoUpload: this.uploadFilesOptions.autoUpload,
method: this.uploadFilesOptions.method
}); });
if (isUndefined(this.enableDragOverDocument)) { if (isUndefined(this.enableDragOverDocument)) {

View File

@@ -77,13 +77,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
* The uploader configuration options * The uploader configuration options
* @type {UploaderOptions} * @type {UploaderOptions}
*/ */
public uploadFilesOptions: UploaderOptions = { public uploadFilesOptions: UploaderOptions = new UploaderOptions();
url: '',
authToken: null,
disableMultipart: false,
itemAlias: null,
autoUpload: true
};
/** /**
* A boolean representing if component is active * A boolean representing if component is active