Skip to content

Commit 7996b5b

Browse files
115046: Fixed related item not invalidating on relationship deletion & automatically invalidate the isSelected value after updating relationship on item
1 parent 06665dc commit 7996b5b

5 files changed

Lines changed: 48 additions & 4 deletions

File tree

src/app/core/data/relationship-data.service.spec.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ describe('RelationshipDataService', () => {
128128
const itemService = jasmine.createSpyObj('itemService', {
129129
findById: (uuid) => createSuccessfulRemoteDataObject(relatedItems.find((relatedItem) => relatedItem.id === uuid)),
130130
findByHref: createSuccessfulRemoteDataObject$(relatedItems[0]),
131+
getIDHrefObs: (uuid: string) => observableOf(`https://demo.dspace.org/server/api/core/items/${uuid}`),
131132
});
132133

133134
const getRequestEntry$ = (successful: boolean) => {
@@ -244,6 +245,16 @@ describe('RelationshipDataService', () => {
244245
});
245246
});
246247

248+
describe('searchByItemsAndType', () => {
249+
it('should call addDependency for each item to invalidate the request when one of the items is update', () => {
250+
spyOn(service as any, 'addDependency');
251+
252+
service.searchByItemsAndType(relationshipType.id, item.id, relationshipType.leftwardType, ['item-id-1', 'item-id-2']);
253+
254+
expect((service as any).addDependency).toHaveBeenCalledTimes(2);
255+
});
256+
});
257+
247258
describe('resolveMetadataRepresentation', () => {
248259
const parentItem: Item = Object.assign(new Item(), {
249260
id: 'parent-item',

src/app/core/data/relationship-data.service.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,13 +574,18 @@ export class RelationshipDataService extends IdentifiableDataService<Relationshi
574574
);
575575
});
576576

577-
return this.searchBy(
577+
const searchRD$: Observable<RemoteData<PaginatedList<Relationship>>> = this.searchBy(
578578
'byItemsAndType',
579579
{
580580
searchParams: searchParams,
581581
},
582582
) as Observable<RemoteData<PaginatedList<Relationship>>>;
583583

584+
arrayOfItemIds.forEach((itemId: string) => {
585+
this.addDependency(searchRD$, this.itemService.getIDHrefObs(encodeURIComponent(itemId)));
586+
});
587+
588+
return searchRD$;
584589
}
585590

586591
/**

src/app/item-page/edit-item-page/item-relationships/edit-item-relationships.service.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ describe('EditItemRelationshipsService', () => {
185185

186186
expect(itemService.invalidateByHref).toHaveBeenCalledWith(currentItem.self);
187187
expect(itemService.invalidateByHref).toHaveBeenCalledWith(relationshipItem1.self);
188+
expect(itemService.invalidateByHref).toHaveBeenCalledWith(relationshipItem2.self);
188189

189190
expect(notificationsService.success).toHaveBeenCalledTimes(1);
190191
});

src/app/item-page/edit-item-page/item-relationships/edit-item-relationships.service.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,17 @@ export class EditItemRelationshipsService {
7777
// process each update one by one, while waiting for the previous to finish
7878
concatMap((update: FieldUpdate) => {
7979
if (update.changeType === FieldChangeType.REMOVE) {
80-
return this.deleteRelationship(update.field as DeleteRelationship).pipe(take(1));
80+
return this.deleteRelationship(update.field as DeleteRelationship).pipe(
81+
take(1),
82+
switchMap((deleteRD: RemoteData<NoContent>) => {
83+
if (deleteRD.hasSucceeded) {
84+
return this.itemService.invalidateByHref((update.field as DeleteRelationship).relatedItem._links.self.href).pipe(
85+
map(() => deleteRD),
86+
);
87+
}
88+
return [deleteRD];
89+
}),
90+
);
8191
} else if (update.changeType === FieldChangeType.ADD) {
8292
return this.addRelationship(update.field as RelationshipIdentifiable).pipe(
8393
take(1),

src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import { Relationship } from '../../../../core/shared/item-relationships/relatio
5959
import { RelationshipType } from '../../../../core/shared/item-relationships/relationship-type.model';
6060
import {
6161
getAllSucceededRemoteData,
62+
getFirstCompletedRemoteData,
6263
getFirstSucceededRemoteData,
6364
getFirstSucceededRemoteDataPayload,
6465
getRemoteDataPayload,
@@ -364,6 +365,7 @@ export class EditRelationshipListComponent implements OnInit, OnDestroy {
364365
type: this.relationshipType,
365366
originalIsLeft: isLeft,
366367
originalItem: this.item,
368+
relatedItem,
367369
relationship,
368370
} as RelationshipIdentifiable;
369371
return this.objectUpdatesService.saveRemoveFieldUpdate(this.url,update);
@@ -518,10 +520,24 @@ export class EditRelationshipListComponent implements OnInit, OnDestroy {
518520
this.relationshipService.isLeftItem(relationship, this.item).pipe(
519521
// emit an array containing both the relationship and whether it's the left item,
520522
// as we'll need both
521-
map((isLeftItem: boolean) => [relationship, isLeftItem]),
523+
switchMap((isLeftItem: boolean) => {
524+
if (isLeftItem) {
525+
return relationship.rightItem.pipe(
526+
getFirstCompletedRemoteData(),
527+
getRemoteDataPayload(),
528+
map((relatedItem: Item) => [relationship, isLeftItem, relatedItem]),
529+
);
530+
} else {
531+
return relationship.leftItem.pipe(
532+
getFirstCompletedRemoteData(),
533+
getRemoteDataPayload(),
534+
map((relatedItem: Item) => [relationship, isLeftItem, relatedItem]),
535+
);
536+
}
537+
}),
522538
),
523539
),
524-
map(([relationship, isLeftItem]: [Relationship, boolean]) => {
540+
map(([relationship, isLeftItem, relatedItem]: [Relationship, boolean, Item]) => {
525541
// turn it into a RelationshipIdentifiable, an
526542
const nameVariant =
527543
isLeftItem ? relationship.rightwardValue : relationship.leftwardValue;
@@ -531,6 +547,7 @@ export class EditRelationshipListComponent implements OnInit, OnDestroy {
531547
relationship,
532548
originalIsLeft: isLeftItem,
533549
originalItem: this.item,
550+
relatedItem: relatedItem,
534551
nameVariant,
535552
} as RelationshipIdentifiable;
536553
}),

0 commit comments

Comments
 (0)