[ACS-8747] pass location as a query param (#4124)

This commit is contained in:
Mykyta Maliarchuk
2024-09-18 15:12:06 +02:00
committed by GitHub
parent 2286c722c8
commit e206727121
3 changed files with 28 additions and 20 deletions

View File

@@ -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;
});

View File

@@ -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'));
});
});
});

View File

@@ -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 }