diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index c81926d83d9..542124b2b63 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -414,6 +414,19 @@ describe('EditBitstreamPageComponent', () => { comp.navigateToItemEditBitstreams(); expect(router.navigate).toHaveBeenCalledWith([getEntityEditRoute(null, 'some-uuid1'), 'bitstreams']); }); + + it('should resolve itemId from bundle.item when query param is missing', () => { + const mockItem = new Item(); + mockItem.uuid = 'resolved-uuid-456'; + const mockBundle = { + item: createSuccessfulRemoteDataObject$(mockItem) + }; + (comp as any).bundle = mockBundle; + comp.itemId = undefined; + comp.navigateToItemEditBitstreams(); + fixture.detectChanges(); + expect(router.navigate).toHaveBeenCalledWith([getEntityEditRoute(null, 'resolved-uuid-456'), 'bitstreams']); + }); }); }); diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 19c63a86898..b33b2c72776 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -745,7 +745,33 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { * otherwise retrieve the item ID based on the owning bundle's link */ navigateToItemEditBitstreams() { - this.router.navigate([getEntityEditRoute(this.entityType, this.itemId), 'bitstreams']); + const navigate = () => this.router.navigate([getEntityEditRoute(this.entityType, this.itemId), 'bitstreams']); + + if (hasValue(this.itemId)) { + navigate(); + return; + } + + if (hasValue(this.bundle) && hasValue(this.bundle.item)) { + this.subs.push( + this.bundle.item.pipe( + getFirstCompletedRemoteData(), + ).subscribe((itemRd: RemoteData) => { + if (itemRd.hasSucceeded && hasValue(itemRd.payload)) { + this.itemId = itemRd.payload.uuid; + if (!hasValue(this.entityType)) { + this.entityType = itemRd.payload.firstMetadataValue('dspace.entity.type'); + } + navigate(); + } else { + this.location.back(); + } + }), + ); + return; + } + + this.location.back(); } /** diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component.html b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component.html index 947d501dfa0..f41ebcfb16a 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component.html +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component.html @@ -112,7 +112,9 @@ [attr.data-test]="'download-button' | dsBrowserOnly"> -