d486fb4fa594cf65cbf7ed92e4b8aad47b040ffe
[vid.git] / vid-webpack-master / src / app / drawingBoard / guards / servicePlanningGuard / drawingBoardGuard.ts
1 import {Injectable} from "@angular/core";
2 import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from "@angular/router";
3 import {NgRedux} from "@angular-redux/store";
4 import {Observable, of} from "rxjs";
5 import {HttpClient} from "@angular/common/http";
6 import {AppState} from "../../../shared/store/reducers";
7 import {updateDrawingBoardStatus} from "../../../shared/storeUtil/utils/global/global.actions";
8 import {DrawingBoardModes} from "../../service-planning/drawing-board.modes";
9
10 @Injectable()
11 export class DrawingBoardGuard implements CanActivate {
12   constructor(private store: NgRedux<AppState>, private _http: HttpClient, private _router : Router) { }
13   canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
14       let url : string = `../../roles/service_permissions?subscriberId=${next.queryParams['subscriberId']}&serviceType=${next.queryParams['serviceType']}`;
15       const viewMode = state.url.includes(DrawingBoardModes.RETRY_EDIT)? DrawingBoardModes.RETRY: DrawingBoardModes.VIEW;
16       return this._http.get(url)
17         .map((result : DrawingBoardPermissions) => {
18           if(!result.isEditPermitted){
19             this.navigateToNewViewEdit(next.queryParams, viewMode);
20             return false;
21           }else {
22             return true;
23           }
24         }).catch(err => {
25           this.navigateToNewViewEdit(next.queryParams, viewMode);
26           return of(false);
27         });
28   }
29
30   navigateToNewViewEdit(queryParams: any, mode: DrawingBoardModes): void{
31     this.store.dispatch(updateDrawingBoardStatus(mode));
32     const viewEditUrlTree = this.getNewViewEditUrlTree(queryParams, mode);
33     this._router.navigateByUrl(viewEditUrlTree);
34     window.parent.location.assign('../../serviceModels.htm#'+viewEditUrlTree.toString());
35   }
36
37   getNewViewEditUrlTree(queryParams: any, mode: DrawingBoardModes) {
38     return this._router.createUrlTree(
39       ['/servicePlanning/' +  mode],
40       {
41         queryParams:
42           {
43             serviceModelId: queryParams['serviceModelId'],
44             serviceInstanceId: queryParams['serviceInstanceId'],
45             serviceType : queryParams['serviceType'],
46             subscriberId : queryParams['subscriberId'],
47             jobId : queryParams['jobId'],
48           }
49       });
50   }
51 }
52
53 export class DrawingBoardPermissions {
54   isEditPermitted : boolean
55 }