Route guards for project-map page

This commit is contained in:
piotrpekala7 2020-02-19 11:23:18 +01:00
parent e11281ddf6
commit 0beff5f418
3 changed files with 38 additions and 2 deletions

View File

@ -61,6 +61,7 @@ import { PageNotFoundComponent } from './components/page-not-found/page-not-foun
import { Gns3vmComponent } from './components/preferences/gns3vm/gns3vm.component';
import { DirectLinkComponent } from './components/direct-link/direct-link.component';
import { SystemStatusComponent } from './components/system-status/system-status.component';
import { ProjectMapGuard } from './guards/project-map-guard';
const routes: Routes = [
{
@ -140,7 +141,9 @@ const routes: Routes = [
]
},
{
path: 'server/:server_id/project/:project_id', component: ProjectMapComponent,
path: 'server/:server_id/project/:project_id',
component: ProjectMapComponent,
canActivate: [ProjectMapGuard]
},
{
path: '**',

View File

@ -266,6 +266,7 @@ import { StatusChartComponent } from './components/system-status/status-chart/st
import { NgCircleProgressModule } from 'ng-circle-progress';
import { OpenFileExplorerActionComponent } from './components/project-map/context-menu/actions/open-file-explorer/open-file-explorer-action.component';
import { NgxChildProcessModule } from 'ngx-childprocess';
import { ProjectMapGuard } from './guards/project-map-guard';
if (environment.production) {
Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', {
@ -538,7 +539,8 @@ if (environment.production) {
NotificationService,
Gns3vmService,
ThemeService,
GoogleAnalyticsService
GoogleAnalyticsService,
ProjectMapGuard
],
entryComponents: [
AddServerDialogComponent,

View File

@ -0,0 +1,31 @@
import { Injectable } from "@angular/core";
import { CanDeactivate } from '@angular/router';
import { ProjectMapComponent } from '../components/project-map/project-map.component';
import { Observable, pipe, timer, from } from 'rxjs';
import { ProjectService } from '../services/project.service';
import { Server } from '../models/server';
import { ServerService } from '../services/server.service';
import { switchMap, map } from 'rxjs/operators';
@Injectable()
export class ProjectMapGuard implements CanDeactivate<ProjectMapComponent> {
constructor(
private projectService: ProjectService,
private serverService: ServerService
) {}
canDeactivate(
component: ProjectMapComponent,
currentRoute: import("@angular/router").ActivatedRouteSnapshot,
currentState: import("@angular/router").RouterStateSnapshot,
nextState?: import("@angular/router").RouterStateSnapshot): Observable<boolean>
{
const server_id = currentRoute.paramMap.get("server_id");
const project_id = currentRoute.paramMap.get("project_id");
return from(this.serverService.get(parseInt(server_id, 10))).pipe(
switchMap(response => this.projectService.list(response as Server)),
map(response => (response.find(n => n.project_id === project_id) ? true : false))
)
}
}