| import {Injectable} from "@angular/core"; |
| import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from "@angular/router"; |
| import {NgRedux} from "@angular-redux/store"; |
| import {Observable, of} from "rxjs"; |
| import {HttpClient} from "@angular/common/http"; |
| import {AppState} from "../../../shared/store/reducers"; |
| import {updateDrawingBoardStatus} from "../../../shared/storeUtil/utils/global/global.actions"; |
| import {DrawingBoardModes} from "../../service-planning/drawing-board.modes"; |
| |
| @Injectable() |
| export class DrawingBoardGuard implements CanActivate { |
| constructor(private store: NgRedux<AppState>, private _http: HttpClient, private _router : Router) { } |
| canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { |
| let url : string = `../../roles/service_permissions?subscriberId=${next.queryParams['subscriberId']}&serviceType=${next.queryParams['serviceType']}`; |
| const viewMode = state.url.includes(DrawingBoardModes.RETRY_EDIT)? DrawingBoardModes.RETRY: DrawingBoardModes.VIEW; |
| return this._http.get(url) |
| .map((result : DrawingBoardPermissions) => { |
| if(!result.isEditPermitted){ |
| this.navigateToNewViewEdit(next.queryParams, viewMode); |
| return false; |
| }else { |
| return true; |
| } |
| }).catch(err => { |
| this.navigateToNewViewEdit(next.queryParams, viewMode); |
| return of(false); |
| }); |
| } |
| |
| navigateToNewViewEdit(queryParams: any, mode: DrawingBoardModes): void{ |
| this.store.dispatch(updateDrawingBoardStatus(mode)); |
| const viewEditUrlTree = this.getNewViewEditUrlTree(queryParams, mode); |
| this._router.navigateByUrl(viewEditUrlTree); |
| window.parent.location.assign('../../serviceModels.htm#'+viewEditUrlTree.toString()); |
| } |
| |
| getNewViewEditUrlTree(queryParams: any, mode: DrawingBoardModes) { |
| return this._router.createUrlTree( |
| ['/servicePlanning/' + mode], |
| { |
| queryParams: |
| { |
| serviceModelId: queryParams['serviceModelId'], |
| serviceInstanceId: queryParams['serviceInstanceId'], |
| serviceType : queryParams['serviceType'], |
| subscriberId : queryParams['subscriberId'], |
| jobId : queryParams['jobId'], |
| } |
| }); |
| } |
| } |
| |
| export class DrawingBoardPermissions { |
| isEditPermitted : boolean |
| } |