renamed section upload inner components

This commit is contained in:
Giuseppe Digilio
2019-03-17 17:16:53 +01:00
parent c6d16abbbd
commit d90f69d15e
15 changed files with 20 additions and 20 deletions

View File

@@ -0,0 +1,207 @@
import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, ViewChild } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { filter, first, flatMap, take } from 'rxjs/operators';
import { DynamicFormControlModel, } from '@ng-dynamic-forms/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { SectionUploadService } from '../section-upload.service';
import { isNotEmpty, isNotNull, isNotUndefined } from '../../../../shared/empty.util';
import { FormService } from '../../../../shared/form/form.service';
import { JsonPatchOperationsBuilder } from '../../../../core/json-patch/builder/json-patch-operations-builder';
import { JsonPatchOperationPathCombiner } from '../../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { WorkspaceitemSectionUploadFileObject } from '../../../../core/submission/models/workspaceitem-section-upload-file.model';
import { SubmissionFormsModel } from '../../../../core/config/models/config-submission-forms.model';
import { deleteProperty } from '../../../../shared/object.util';
import { dateToISOFormat } from '../../../../shared/date.util';
import { SubmissionService } from '../../../submission.service';
import { FileService } from '../../../../core/shared/file.service';
import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service';
import { SubmissionJsonPatchOperationsService } from '../../../../core/submission/submission-json-patch-operations.service';
import { SubmissionObject } from '../../../../core/submission/models/submission-object.model';
import { WorkspaceitemSectionUploadObject } from '../../../../core/submission/models/workspaceitem-section-upload.model';
import { UploadSectionFileEditComponent } from './edit/section-upload-file-edit.component';
import { Group } from '../../../../core/eperson/models/group.model';
@Component({
selector: 'ds-submission-upload-section-file',
styleUrls: ['./section-upload-file.component.scss'],
templateUrl: './section-upload-file.component.html',
})
export class UploadSectionFileComponent implements OnChanges, OnInit {
@Input() availableAccessConditionOptions: any[];
@Input() availableAccessConditionGroups: Map<string, Group[]>;
@Input() collectionId;
@Input() collectionPolicyType;
@Input() configMetadataForm: SubmissionFormsModel;
@Input() fileId;
@Input() fileIndex;
@Input() fileName;
@Input() sectionId;
@Input() submissionId;
public fileData: WorkspaceitemSectionUploadFileObject;
public formId;
public readMode;
public formModel: DynamicFormControlModel[];
public processingDelete$ = new BehaviorSubject<boolean>(false);
protected pathCombiner: JsonPatchOperationPathCombiner;
protected subscriptions = [];
@ViewChild(UploadSectionFileEditComponent) fileEditComp: UploadSectionFileEditComponent;
constructor(private cdr: ChangeDetectorRef,
private fileService: FileService,
private formService: FormService,
private halService: HALEndpointService,
private modalService: NgbModal,
private operationsBuilder: JsonPatchOperationsBuilder,
private operationsService: SubmissionJsonPatchOperationsService,
private submissionService: SubmissionService,
private uploadService: SectionUploadService) {
this.readMode = true;
}
ngOnChanges() {
if (this.availableAccessConditionOptions && this.availableAccessConditionGroups) {
// Retrieve file state
this.subscriptions.push(
this.uploadService
.getFileData(this.submissionId, this.sectionId, this.fileId).pipe(
filter((bitstream) => isNotUndefined(bitstream)))
.subscribe((bitstream) => {
this.fileData = bitstream;
}
)
);
}
}
ngOnInit() {
this.formId = this.formService.getUniqueId(this.fileId);
this.pathCombiner = new JsonPatchOperationPathCombiner('sections', this.sectionId, 'files', this.fileIndex);
}
protected deleteFile() {
this.operationsBuilder.remove(this.pathCombiner.getPath());
this.subscriptions.push(this.operationsService.jsonPatchByResourceID(
this.submissionService.getSubmissionObjectLinkName(),
this.submissionId,
this.pathCombiner.rootElement,
this.pathCombiner.subRootElement)
.subscribe(() => {
this.uploadService.removeUploadedFile(this.submissionId, this.sectionId, this.fileId);
this.processingDelete$.next(false);
}));
}
public confirmDelete(content) {
this.modalService.open(content).result.then(
(result) => {
if (result === 'ok') {
this.processingDelete$.next(true);
this.deleteFile();
}
}
);
}
public downloadBitstreamFile() {
this.halService.getEndpoint('bitstreams').pipe(
first())
.subscribe((url) => {
const fileUrl = `${url}/${this.fileData.uuid}/content`;
this.fileService.downloadFile(fileUrl);
});
}
public saveBitstreamData(event) {
event.preventDefault();
this.formService.validateAllFormFields(this.fileEditComp.formRef.formGroup);
this.subscriptions.push(this.formService.isValid(this.formId).pipe(
take(1),
filter((isValid) => isValid),
flatMap(() => this.formService.getFormData(this.formId)),
take(1),
flatMap((formData: any) => {
Object.keys((formData.metadata))
.filter((key) => isNotEmpty(formData.metadata[key]))
.forEach((key) => {
const metadataKey = key.replace(/_/g, '.');
const path = `metadata/${metadataKey}`;
this.operationsBuilder.add(this.pathCombiner.getPath(path), formData.metadata[key], true);
});
const accessConditionsToSave = [];
formData.accessConditions
.filter((accessCondition) => isNotEmpty(accessCondition))
.forEach((accessCondition) => {
let accessConditionOpt;
this.availableAccessConditionOptions
.filter((element) => isNotNull(accessCondition.name) && element.name === accessCondition.name[0].value)
.forEach((element) => accessConditionOpt = element);
if (accessConditionOpt) {
if (accessConditionOpt.hasStartDate !== true && accessConditionOpt.hasEndDate !== true) {
accessConditionOpt = deleteProperty(accessConditionOpt, 'hasStartDate');
accessConditionOpt = deleteProperty(accessConditionOpt, 'hasEndDate');
accessConditionsToSave.push(accessConditionOpt);
} else {
accessConditionOpt = Object.assign({}, accessCondition);
accessConditionOpt.name = this.retrieveValueFromField(accessCondition.name);
accessConditionOpt.groupUUID = this.retrieveValueFromField(accessCondition.groupUUID);
if (accessCondition.startDate) {
const startDate = this.retrieveValueFromField(accessCondition.startDate);
accessConditionOpt.startDate = dateToISOFormat(startDate);
accessConditionOpt = deleteProperty(accessConditionOpt, 'endDate');
}
if (accessCondition.endDate) {
const endDate = this.retrieveValueFromField(accessCondition.endDate);
accessConditionOpt.endDate = dateToISOFormat(endDate);
accessConditionOpt = deleteProperty(accessConditionOpt, 'startDate');
}
accessConditionsToSave.push(accessConditionOpt);
}
}
});
if (isNotEmpty(accessConditionsToSave)) {
this.operationsBuilder.add(this.pathCombiner.getPath('accessConditions'), accessConditionsToSave, true);
}
return this.operationsService.jsonPatchByResourceID(
this.submissionService.getSubmissionObjectLinkName(),
this.submissionId,
this.pathCombiner.rootElement,
this.pathCombiner.subRootElement)
})
).subscribe((result: SubmissionObject[]) => {
if (result[0].sections.upload) {
Object.keys((result[0].sections.upload as WorkspaceitemSectionUploadObject).files)
.filter((key) => (result[0].sections.upload as WorkspaceitemSectionUploadObject).files[key].uuid === this.fileId)
.forEach((key) => this.uploadService.updateFileData(
this.submissionId,
this.sectionId,
this.fileId,
(result[0].sections.upload as WorkspaceitemSectionUploadObject).files[key]));
}
this.switchMode();
}));
}
private retrieveValueFromField(field) {
const temp = Array.isArray(field) ? field[0] : field;
return (temp) ? temp.value : undefined;
}
public switchMode() {
this.readMode = !this.readMode;
this.cdr.detectChanges();
}
}