Skip to content

Commit

Permalink
Merge pull request DSpace#3142 from atmire/w2p-115284_add-support-for…
Browse files Browse the repository at this point in the history
…-non-repeatable-relationships_dspace-8

Add support for non repeatable relationships
  • Loading branch information
tdonohue authored Jan 6, 2025
2 parents 53f4604 + 161daff commit 5bd8795
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ describe('EditRelationshipListComponent', () => {
},
};

function init(leftType: string, rightType: string): void {
function init(leftType: string, rightType: string, leftMaxCardinality?: number, rightMaxCardinality?: number): void {
entityTypeLeft = Object.assign(new ItemType(), {
id: leftType,
uuid: leftType,
Expand All @@ -130,6 +130,8 @@ describe('EditRelationshipListComponent', () => {
rightType: createSuccessfulRemoteDataObject$(entityTypeRight),
leftwardType: `is${rightType}Of${leftType}`,
rightwardType: `is${leftType}Of${rightType}`,
leftMaxCardinality: leftMaxCardinality,
rightMaxCardinality: rightMaxCardinality,
});

paginationOptions = Object.assign(new PaginationComponentOptions(), {
Expand Down Expand Up @@ -402,4 +404,31 @@ describe('EditRelationshipListComponent', () => {
}));
});
});

describe('Is repeatable relationship', () => {
beforeEach(waitForAsync(() => {
currentItemIsLeftItem$ = new BehaviorSubject<boolean>(true);
}));
describe('when max cardinality is 1', () => {
beforeEach(waitForAsync(() => init('Publication', 'OrgUnit', 1, undefined)));
it('should return false', () => {
const result = (comp as any).isRepeatable();
expect(result).toBeFalse();
});
});
describe('when max cardinality is 2', () => {
beforeEach(waitForAsync(() => init('Publication', 'OrgUnit', 2, undefined)));
it('should return true', () => {
const result = (comp as any).isRepeatable();
expect(result).toBeTrue();
});
});
describe('when max cardinality is undefined', () => {
beforeEach(waitForAsync(() => init('Publication', 'OrgUnit', undefined, undefined)));
it('should return true', () => {
const result = (comp as any).isRepeatable();
expect(result).toBeTrue();
});
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,22 @@ export class EditRelationshipListComponent implements OnInit, OnDestroy {
return update && update.field ? update.field.uuid : undefined;
}

/**
* Check whether the current entity can have multiple relationships of this type
* This is based on the max cardinality of the relationship
* @private
*/
private isRepeatable(): boolean {
const isLeft = this.currentItemIsLeftItem$.getValue();
if (isLeft) {
const leftMaxCardinality = this.relationshipType.leftMaxCardinality;
return hasNoValue(leftMaxCardinality) || leftMaxCardinality > 1;
} else {
const rightMaxCardinality = this.relationshipType.rightMaxCardinality;
return hasNoValue(rightMaxCardinality) || rightMaxCardinality > 1;
}
}

/**
* Open the dynamic lookup modal to search for items to add as relationships
*/
Expand All @@ -281,6 +297,7 @@ export class EditRelationshipListComponent implements OnInit, OnDestroy {
modalComp.toAdd = [];
modalComp.toRemove = [];
modalComp.isPending = false;
modalComp.repeatable = this.isRepeatable();
modalComp.hiddenQuery = '-search.resourceid:' + this.item.uuid;

this.item.owningCollection.pipe(
Expand Down

0 comments on commit 5bd8795

Please sign in to comment.