diff --git a/projects/aca-content/src/lib/store/effects/viewer.effects.spec.ts b/projects/aca-content/src/lib/store/effects/viewer.effects.spec.ts index bd341c925..e37cfc112 100644 --- a/projects/aca-content/src/lib/store/effects/viewer.effects.spec.ts +++ b/projects/aca-content/src/lib/store/effects/viewer.effects.spec.ts @@ -89,5 +89,14 @@ describe('ViewerEffects', () => { expect(router.navigateByUrl['calls'].argsFor(0)[0].toString()).toEqual('/view/(viewer:nodeId)?path=absolute-path'); })); + + it('should navigate to the parent route and preserve the original location when opening the viewer', fakeAsync(() => { + store.dispatch(new ViewNodeAction('nodeId', { location: 'personal-files/details/abc123/permissions' })); + tick(100); + + expect(router.navigateByUrl['calls'].argsFor(0)[0].toString()).toEqual( + '/personal-files/(viewer:view/nodeId)?location=personal-files%2Fdetails%2Fabc123%2Fpermissions' + ); + })); }); }); diff --git a/projects/aca-content/src/lib/store/effects/viewer.effects.ts b/projects/aca-content/src/lib/store/effects/viewer.effects.ts index 472c58159..8ce9a85c3 100644 --- a/projects/aca-content/src/lib/store/effects/viewer.effects.ts +++ b/projects/aca-content/src/lib/store/effects/viewer.effects.ts @@ -215,6 +215,11 @@ export class ViewerEffects { const urlSegments: UrlSegment[] = urlSegmentGroup.segments; + const detailsIndex = urlSegments.findIndex((segment) => segment.path === 'details'); + if (detailsIndex > -1) { + urlSegments.splice(detailsIndex); + } + return urlSegments.reduce(function (acc, item) { acc.push(item.path, item.parameters); return acc;