mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-15 05:53:03 +00:00
Merge branch 'master' into w2p-59334_edit-item-metadata-branch
Conflicts: src/app/+community-page/community-page.component.ts src/app/core/auth/server-auth.service.ts src/app/core/data/dso-response-parsing.service.ts src/app/core/data/item-data.service.ts src/app/core/data/metadata-schema-data.service.ts src/app/core/data/request.models.ts src/app/core/metadata/metadata.service.spec.ts src/app/core/metadata/normalized-metadata-schema.model.ts src/app/core/shared/metadatum.model.ts src/app/core/shared/operators.spec.ts src/app/shared/shared.module.ts
This commit is contained in:
@@ -11,7 +11,6 @@ import { ResourceType } from '../../../core/shared/resource-type';
|
||||
import { ComColFormComponent } from './comcol-form.component';
|
||||
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
|
||||
import { hasValue } from '../../empty.util';
|
||||
import { Metadatum } from '../../../core/shared/metadatum.model';
|
||||
|
||||
describe('ComColFormComponent', () => {
|
||||
let comp: ComColFormComponent<DSpaceObject>;
|
||||
@@ -29,23 +28,24 @@ describe('ComColFormComponent', () => {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
const titleMD = { key: 'dc.title', value: 'Community Title' } as Metadatum;
|
||||
const randomMD = { key: 'dc.random', value: 'Random metadata excluded from form' } as Metadatum;
|
||||
const abstractMD = {
|
||||
key: 'dc.description.abstract',
|
||||
value: 'Community description'
|
||||
} as Metadatum;
|
||||
const newTitleMD = { key: 'dc.title', value: 'New Community Title' } as Metadatum;
|
||||
const dcTitle = 'dc.title';
|
||||
const dcRandom = 'dc.random';
|
||||
const dcAbstract = 'dc.description.abstract';
|
||||
|
||||
const titleMD = { [dcTitle]: [ { value: 'Community Title', language: null } ] };
|
||||
const randomMD = { [dcRandom]: [ { value: 'Random metadata excluded from form', language: null } ] };
|
||||
const abstractMD = { [dcAbstract]: [ { value: 'Community description', language: null } ] };
|
||||
const newTitleMD = { [dcTitle]: [ { value: 'New Community Title', language: null } ] };
|
||||
const formModel = [
|
||||
new DynamicInputModel({
|
||||
id: 'title',
|
||||
name: newTitleMD.key,
|
||||
value: 'New Community Title'
|
||||
name: dcTitle,
|
||||
value: newTitleMD[dcTitle][0].value
|
||||
}),
|
||||
new DynamicInputModel({
|
||||
id: 'abstract',
|
||||
name: abstractMD.key,
|
||||
value: abstractMD.value
|
||||
name: dcAbstract,
|
||||
value: abstractMD[dcAbstract][0].value
|
||||
})
|
||||
];
|
||||
|
||||
@@ -84,10 +84,10 @@ describe('ComColFormComponent', () => {
|
||||
comp.dso = Object.assign(
|
||||
new Community(),
|
||||
{
|
||||
metadata: [
|
||||
titleMD,
|
||||
randomMD
|
||||
]
|
||||
metadata: {
|
||||
...titleMD,
|
||||
...randomMD
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -98,11 +98,11 @@ describe('ComColFormComponent', () => {
|
||||
{},
|
||||
new Community(),
|
||||
{
|
||||
metadata: [
|
||||
randomMD,
|
||||
newTitleMD,
|
||||
abstractMD
|
||||
],
|
||||
metadata: {
|
||||
...newTitleMD,
|
||||
...randomMD,
|
||||
...abstractMD
|
||||
},
|
||||
type: ResourceType.Community
|
||||
},
|
||||
)
|
||||
|
@@ -8,6 +8,7 @@ import { FormGroup } from '@angular/forms';
|
||||
import { DynamicFormControlModel } from '@ng-dynamic-forms/core/src/model/dynamic-form-control.model';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
|
||||
import { MetadataMap, MetadataValue } from '../../../core/shared/metadata.interfaces';
|
||||
import { isNotEmpty } from '../../empty.util';
|
||||
import { ResourceType } from '../../../core/shared/resource-type';
|
||||
|
||||
@@ -64,7 +65,7 @@ export class ComColFormComponent<T extends DSpaceObject> implements OnInit {
|
||||
ngOnInit(): void {
|
||||
this.formModel.forEach(
|
||||
(fieldModel: DynamicInputModel) => {
|
||||
fieldModel.value = this.dso.findMetadata(fieldModel.name);
|
||||
fieldModel.value = this.dso.firstMetadataValue(fieldModel.name);
|
||||
}
|
||||
);
|
||||
this.formGroup = this.formService.createFormGroup(this.formModel);
|
||||
@@ -77,20 +78,24 @@ export class ComColFormComponent<T extends DSpaceObject> implements OnInit {
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks which new fields where added and sends the updated version of the DSO to the parent component
|
||||
* Checks which new fields were added and sends the updated version of the DSO to the parent component
|
||||
*/
|
||||
onSubmit() {
|
||||
const metadata = this.formModel.map(
|
||||
(fieldModel: DynamicInputModel) => {
|
||||
return { key: fieldModel.name, value: fieldModel.value }
|
||||
const formMetadata = new Object() as MetadataMap;
|
||||
this.formModel.forEach((fieldModel: DynamicInputModel) => {
|
||||
const value: MetadataValue = { value: fieldModel.value as string, language: null };
|
||||
if (formMetadata.hasOwnProperty(fieldModel.name)) {
|
||||
formMetadata[fieldModel.name].push(value);
|
||||
} else {
|
||||
formMetadata[fieldModel.name] = [ value ];
|
||||
}
|
||||
);
|
||||
const filteredOldMetadata = this.dso.metadata.filter((filter) => !metadata.map((md) => md.key).includes(filter.key));
|
||||
const filteredNewMetadata = metadata.filter((md) => isNotEmpty(md.value));
|
||||
});
|
||||
|
||||
const newMetadata = [...filteredOldMetadata, ...filteredNewMetadata];
|
||||
const updatedDSO = Object.assign({}, this.dso, {
|
||||
metadata: newMetadata,
|
||||
metadata: {
|
||||
...this.dso.metadata,
|
||||
...formMetadata
|
||||
},
|
||||
type: ResourceType.Community
|
||||
});
|
||||
this.submitForm.emit(updatedDSO);
|
||||
|
Reference in New Issue
Block a user