diff --git a/src/app/item-page/versions/notice/item-versions-notice.component.spec.ts b/src/app/item-page/versions/notice/item-versions-notice.component.spec.ts index 2c526e8d9d2..ea5f1881a59 100644 --- a/src/app/item-page/versions/notice/item-versions-notice.component.spec.ts +++ b/src/app/item-page/versions/notice/item-versions-notice.component.spec.ts @@ -12,7 +12,8 @@ import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.u import { createPaginatedList } from '../../../shared/testing/utils.test'; import { of } from 'rxjs'; import { take } from 'rxjs/operators'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MockActivatedRoute } from '../../../shared/mocks/active-router.mock'; describe('ItemVersionsNoticeComponent', () => { let component: ItemVersionsNoticeComponent; @@ -58,6 +59,8 @@ describe('ItemVersionsNoticeComponent', () => { ); let router: Router; + let activatedRoute: ActivatedRoute; + beforeEach(waitForAsync(() => { router = jasmine.createSpyObj('router', ['createUrlTree']); @@ -66,7 +69,8 @@ describe('ItemVersionsNoticeComponent', () => { imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([])], providers: [ { provide: VersionHistoryDataService, useValue: versionHistoryServiceSpy }, - { provide: Router, useValue: router } + { provide: Router, useValue: router }, + { provide: ActivatedRoute, useValue: new MockActivatedRoute() }, ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/item-page/versions/notice/item-versions-notice.component.ts b/src/app/item-page/versions/notice/item-versions-notice.component.ts index b8aa29d6ce5..6a127f73b53 100644 --- a/src/app/item-page/versions/notice/item-versions-notice.component.ts +++ b/src/app/item-page/versions/notice/item-versions-notice.component.ts @@ -14,7 +14,7 @@ import { map, startWith, switchMap } from 'rxjs/operators'; import { VersionHistoryDataService } from '../../../core/data/version-history-data.service'; import { AlertType } from '../../../shared/alert/alert-type'; import { getItemPageRoute } from '../../item-page-routing-paths'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; @Component({ selector: 'ds-item-versions-notice', @@ -67,7 +67,8 @@ export class ItemVersionsNoticeComponent implements OnInit { destinationUrl$: Observable; constructor(private versionHistoryService: VersionHistoryDataService, - private router: Router) { + private router: Router, + private activatedRoute: ActivatedRoute) { } /** @@ -97,12 +98,14 @@ export class ItemVersionsNoticeComponent implements OnInit { } // Compute the destination URL from latestVersion$ with the namespace this.destinationUrl$ = this.latestVersion$.pipe( - switchMap(latestVersion => latestVersion?.item || of(null)), // Handle the nested observable + switchMap(latestVersion => latestVersion?.item || of(null)), map(item => { - const payload = item?.payload; - if (!payload) { return ''; } // Fallback if no payload - const routeCommands = [this.getItemPage(payload)]; // Generate route commands - return this.router.createUrlTree(routeCommands).toString(); // Convert to full URL + const routeCommands = [this.getItemPage(item?.payload)]; // e.g., ['/items/xyz'] + + // Use the current ActivatedRoute to make it work like [routerLink] + const urlTree = this.router.createUrlTree(routeCommands, { relativeTo: this.activatedRoute }); + + return this.router.serializeUrl(urlTree); // Get the final URL string }) ); }