mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
Merge pull request #3803 from DSpace/backport-3142-to-dspace-8_x
[Port dspace-8_x] Add support for non repeatable relationships
This commit is contained in:
@@ -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,
|
||||
@@ -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(), {
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -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
|
||||
*/
|
||||
@@ -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(
|
||||
|
Reference in New Issue
Block a user