import {of as observableOf, Observable, Subject, Subscription} from 'rxjs'; import {map, filter, mergeMap, tap} from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { Router, CanActivate, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot, Route, Data } from '@angular/router'; import { ConfigurationService } from '../utils/configuration/configuration.service'; import { EnvironmentSpecificService} from '../utils/properties/environment-specific.service'; import {ConnectHelper} from '../connect/connectHelper'; import {properties} from "../../../environments/environment"; import {LoginErrorCodes} from "../login/utils/guardHelper.class"; import {of} from 'rxjs'; import {Page} from "../utils/entities/adminTool/page"; @Injectable() export class IsRouteEnabled implements CanActivate { sub: Subscription = null; constructor(private router: Router, private config: ConfigurationService, private propertiesService: EnvironmentSpecificService) {} // check(data: Data, community: string, path: string): Observable | boolean { // const customRedirect = data['redirect']; // // const redirect = customRedirect ? customRedirect : '/error'; // const obs = this.propertiesService.subscribeEnvironment().pipe(map(res => { // let communityDomain = null; // //if (!community) { // communityDomain = ConnectHelper.getCommunityFromDomain(res.domain); // //} // if(communityDomain) { // community = communityDomain; // } else if (!community && data['community']) { // for openaire or connect // community = data['community']; // } // return res; // }),mergeMap(prop => { // if (!community) { // community = prop.adminToolsCommunity; // } // return this.config.isPageEnabled(prop, community, '/' + path); // }),); // console.log("check isRouteEnabled.guard : call isPageEnabled"); // // obs.pipe(filter(enabled => !enabled)) // .subscribe(() => this.router.navigate([redirect], {queryParams: {'page': path}})); // return obs; // } check(data: Data, community: string, path: string): Observable | boolean { const customRedirect = data['redirect']; const redirect = customRedirect ? customRedirect : '/error'; let communityDomain = ConnectHelper.getCommunityFromDomain(properties.domain); if(communityDomain) { community = communityDomain; } else if (!community && data['community']) { // for openaire or connect community = data['community']; } if (!community) { community = properties.adminToolsCommunity; } const obs = //this.config.isPageEnabled(properties, community, '/' + path); this.config.isPageEnabledByState(properties, community, '/'+path); this.sub = obs //.pipe(tap((enabled) => console.log("aaa: "+enabled))) .pipe(filter(enabled => !enabled)) .subscribe(() => { this.router.navigate([redirect], {queryParams: {'page': path}}); }); return obs; } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean { return this.check(route.data, route.queryParams['communityId'], state.url); } canDeactivate() { if(this.sub) { this.sub.unsubscribe(); } return true; } }