diff --git a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts
index 9eca3f270d..6e81319f28 100644
--- a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts
+++ b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.spec.ts
@@ -1,5 +1,5 @@
import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, TestBed } from '@angular/core/testing';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule } from '@ngx-translate/core';
import { of as observableOf } from 'rxjs/internal/observable/of';
import { FieldChangeType } from '../../../../core/data/object-updates/object-updates.actions';
@@ -25,7 +25,7 @@ let fieldUpdate2;
let relationships;
let relationshipType;
-let fixture;
+let fixture: ComponentFixture;
let comp: EditRelationshipComponent;
let de;
let el;
@@ -91,11 +91,17 @@ describe('EditRelationshipComponent', () => {
});
fieldUpdate1 = {
- field: relationships[0],
+ field: {
+ uuid: relationships[0].uuid,
+ relationship: relationships[0],
+ },
changeType: undefined
};
fieldUpdate2 = {
- field: relationships[1],
+ field: {
+ uuid: relationships[1].uuid,
+ relationship: relationships[1],
+ },
changeType: FieldChangeType.REMOVE
};
diff --git a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.ts b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.ts
index 2badaf80b0..265bca7529 100644
--- a/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.ts
+++ b/src/app/+item-page/edit-item-page/item-relationships/edit-relationship/edit-relationship.component.ts
@@ -1,10 +1,13 @@
import { Component, Input, OnChanges, OnInit } from '@angular/core';
-import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
+import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs';
import { filter, map, switchMap, take, tap } from 'rxjs/operators';
import { FieldChangeType } from '../../../../core/data/object-updates/object-updates.actions';
-import { DeleteRelationship, FieldUpdate } from '../../../../core/data/object-updates/object-updates.reducer';
+import {
+ DeleteRelationship,
+ FieldUpdate,
+ RelationshipIdentifiable
+} from '../../../../core/data/object-updates/object-updates.reducer';
import { ObjectUpdatesService } from '../../../../core/data/object-updates/object-updates.service';
-import { Relationship } from '../../../../core/shared/item-relationships/relationship.model';
import { Item } from '../../../../core/shared/item.model';
import { getRemoteDataPayload, getSucceededRemoteData } from '../../../../core/shared/operators';
import { ViewMode } from '../../../../core/shared/view-mode.model';
@@ -36,8 +39,16 @@ export class EditRelationshipComponent implements OnChanges {
/**
* The relationship being edited
*/
- get relationship(): Relationship {
- return this.fieldUpdate.field as Relationship;
+ get relationship() {
+ return this.update.relationship;
+ }
+
+ get update() {
+ return this.fieldUpdate.field as RelationshipIdentifiable;
+ }
+
+ get nameVariant() {
+ return this.update.nameVariant;
}
public leftItem$: Observable- ;
@@ -68,24 +79,28 @@ export class EditRelationshipComponent implements OnChanges {
* Sets the current relationship based on the fieldUpdate input field
*/
ngOnChanges(): void {
- this.leftItem$ = this.relationship.leftItem.pipe(
- getSucceededRemoteData(),
- getRemoteDataPayload(),
- filter((item: Item) => hasValue(item) && isNotEmpty(item.uuid))
- );
- this.rightItem$ = this.relationship.rightItem.pipe(
- getSucceededRemoteData(),
- getRemoteDataPayload(),
- filter((item: Item) => hasValue(item) && isNotEmpty(item.uuid))
- );
- this.relatedItem$ = observableCombineLatest(
- this.leftItem$,
- this.rightItem$,
- ).pipe(
- map((items: Item[]) =>
- items.find((item) => item.uuid !== this.editItem.uuid)
- )
- );
+ if (this.relationship) {
+ this.leftItem$ = this.relationship.leftItem.pipe(
+ getSucceededRemoteData(),
+ getRemoteDataPayload(),
+ filter((item: Item) => hasValue(item) && isNotEmpty(item.uuid))
+ );
+ this.rightItem$ = this.relationship.rightItem.pipe(
+ getSucceededRemoteData(),
+ getRemoteDataPayload(),
+ filter((item: Item) => hasValue(item) && isNotEmpty(item.uuid))
+ );
+ this.relatedItem$ = observableCombineLatest(
+ this.leftItem$,
+ this.rightItem$,
+ ).pipe(
+ map((items: Item[]) =>
+ items.find((item) => item.uuid !== this.editItem.uuid)
+ )
+ );
+ } else {
+ this.relatedItem$ = of(this.update.relatedItem);
+ }
}
/**
@@ -136,7 +151,8 @@ export class EditRelationshipComponent implements OnChanges {
* Check if a user should be allowed to remove this field
*/
canRemove(): boolean {
- return this.fieldUpdate.changeType !== FieldChangeType.REMOVE;
+ return this.fieldUpdate.changeType !== FieldChangeType.REMOVE
+ && this.fieldUpdate.changeType !== FieldChangeType.ADD;
}
/**
diff --git a/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.html b/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.html
index 0c9d92dfbf..7692494fd8 100644
--- a/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.html
+++ b/src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.html
@@ -19,14 +19,19 @@
{{"item.edit.metadata.save-button" | translate}}
-
-
-
+
+
+
+
+
+
+
+