diff --git a/projects/aca-content/src/lib/components/details/details.component.ts b/projects/aca-content/src/lib/components/details/details.component.ts index 8c068b67a0..f4773dbb18 100644 --- a/projects/aca-content/src/lib/components/details/details.component.ts +++ b/projects/aca-content/src/lib/components/details/details.component.ts @@ -98,7 +98,7 @@ export class DetailsComponent extends PageComponent implements OnInit, OnDestroy }); this.extensions .getAllowedSidebarActions() - .pipe(takeUntil(this.onDestroy$)) + .pipe(first()) .subscribe((aspectActions) => { this.aspectActions = aspectActions; }); diff --git a/projects/aca-content/src/lib/store/effects/node.effects.spec.ts b/projects/aca-content/src/lib/store/effects/node.effects.spec.ts index 091082ccbc..e2b8d38f75 100644 --- a/projects/aca-content/src/lib/store/effects/node.effects.spec.ts +++ b/projects/aca-content/src/lib/store/effects/node.effects.spec.ts @@ -55,7 +55,7 @@ import { } from '@alfresco/aca-shared/store'; import { RenditionService } from '@alfresco/adf-content-services'; import { ViewerEffects } from './viewer.effects'; -import { NavigationEnd, Router } from '@angular/router'; +import { NavigationEnd, Router, ActivatedRoute } from '@angular/router'; import { of } from 'rxjs'; import { MatDialogModule } from '@angular/material/dialog'; import { MatSnackBarModule } from '@angular/material/snack-bar'; @@ -75,7 +75,7 @@ describe('NodeEffects', () => { MatDialogModule, MatSnackBarModule ], - providers: [RenditionService] + providers: [RenditionService, { provide: ActivatedRoute, useValue: { queryParams: of({ location: 'test-page' }) } }] }); store = TestBed.inject(Store); @@ -561,7 +561,7 @@ describe('NodeEffects', () => { const node: any = { entry: { isFile: true, id: 'node-id' } }; store.dispatch(new ExpandInfoDrawerAction(node)); - expect(store.dispatch).toHaveBeenCalledWith(new NavigateUrlAction('personal-files/details/node-id')); + expect(store.dispatch).toHaveBeenCalledWith(new NavigateUrlAction('personal-files/details/node-id?location=test-page')); }); }); }); diff --git a/projects/aca-content/src/lib/store/effects/node.effects.ts b/projects/aca-content/src/lib/store/effects/node.effects.ts index bbd0b2afc1..816b2f75e0 100644 --- a/projects/aca-content/src/lib/store/effects/node.effects.ts +++ b/projects/aca-content/src/lib/store/effects/node.effects.ts @@ -23,7 +23,7 @@ */ import { Actions, ofType, createEffect } from '@ngrx/effects'; -import { Injectable } from '@angular/core'; +import { Injectable, SecurityContext } from '@angular/core'; import { first, map, take } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { @@ -55,7 +55,8 @@ import { } from '@alfresco/aca-shared/store'; import { ContentManagementService } from '../../services/content-management.service'; import { RenditionService } from '@alfresco/adf-content-services'; -import { NavigationEnd, Router } from '@angular/router'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { DomSanitizer } from '@angular/platform-browser'; @Injectable() export class NodeEffects { @@ -64,7 +65,9 @@ export class NodeEffects { private actions$: Actions, private router: Router, private contentService: ContentManagementService, - private renditionViewer: RenditionService + private renditionViewer: RenditionService, + private activatedRoute: ActivatedRoute, + private sanitizer: DomSanitizer ) {} shareNode$ = createEffect( @@ -314,20 +317,25 @@ export class NodeEffects { this.router.events .pipe(first((event) => event instanceof NavigationEnd)) .subscribe(() => this.store.dispatch(new SetInfoDrawerStateAction(true))); - if (action?.payload) { + + this.activatedRoute.queryParams.pipe(take(1)).subscribe((params) => { + const location = params.location || this.router.url; + const sanitizedLocation = this.sanitizer.sanitize(SecurityContext.URL, location); const route = 'personal-files/details'; - this.store.dispatch(new NavigateUrlAction([route, action.payload.entry.id].join('/'))); - } else { - this.store - .select(getAppSelection) - .pipe(take(1)) - .subscribe((selection) => { - if (selection && !selection.isEmpty) { - const route = 'personal-files/details'; - this.store.dispatch(new NavigateUrlAction([route, selection.last.entry.id].join('/'))); - } - }); - } + + if (action?.payload) { + this.store.dispatch(new NavigateUrlAction([route, action.payload.entry.id].join('/') + `?location=${sanitizedLocation}`)); + } else { + this.store + .select(getAppSelection) + .pipe(take(1)) + .subscribe((selection) => { + if (selection && !selection.isEmpty) { + this.store.dispatch(new NavigateUrlAction([route, selection.last.entry.id].join('/') + `?location=${sanitizedLocation}`)); + } + }); + } + }); }) ), { dispatch: false }