mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-02-21 10:01:44 +00:00
Route guards for project-map page
This commit is contained in:
parent
e11281ddf6
commit
0beff5f418
@ -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: '**',
|
||||
|
@ -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,
|
||||
|
31
src/app/guards/project-map-guard.ts
Normal file
31
src/app/guards/project-map-guard.ts
Normal 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))
|
||||
)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user