import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanLoad, Route, UrlSegment, } from '@angular/router'; import { map, take, filter } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { MwCorePreferenceService } from '../preference.service'; @Injectable() export class MwPreferenceLoadedGuard implements CanActivate, CanLoad { private readonly preferenceLoaded$ = this.preferenceService.preference$.pipe( filter((preference) => !!preference), map(() => true), take(1) ); constructor(private readonly preferenceService: MwCorePreferenceService) {} canLoad(route: Route, segments: UrlSegment[]): Observable { return this.preferenceLoaded$; } canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): Observable { return this.preferenceLoaded$; } }