import { Injectable } from '@angular/core'; import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanLoad, Route, UrlSegment, CanActivateChild, UrlTree } from '@angular/router'; import {Observable} from 'rxjs'; import {ConnectHelper} from '../connectHelper'; import {properties} from "../../../../environments/environment"; import {CommunityService} from "../community/community.service"; import {map} from "rxjs/operators"; @Injectable() export class IsCommunity implements CanActivate, CanActivateChild { constructor(private router: Router, private communityService: CommunityService) { } check(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean { let community; if(properties.isDashboard) { community = route.params['community']; } else { community = ConnectHelper.getCommunityFromDomain(properties.domain); } if (community) { return this.communityService.getCommunity(community).pipe(map(community => { if(community) { return true; } else { this.router.navigate(['error'], {queryParams: {page: state.url}}); return false; } })); } else { this.router.navigate(['error'], {queryParams: {page: state.url}}); return false; } } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { return this.check(route, state); } canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { return this.check(childRoute, state); } }