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, private _http: HttpClient, private _router : Router) { } canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { 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 }