Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 1x 5x 5x 4x 4x 4x 4x | import { inject, Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; import { Store } from '@ngrx/store'; import { first, map, Observable } from 'rxjs'; import { IFeatureAccessState } from '../../feature-access.interface'; import { featureAccessSelector } from '../../feature-access.selectors'; @Injectable({ providedIn: 'root', }) export class AppFeatureAccessGuard { private readonly router = inject(Router); private readonly store = inject(Store<IFeatureAccessState>); public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> { const value: string | undefined = (state.root.data as { feature?: string }).feature; const featureSelector = typeof value === 'undefined' || value === '' ? featureAccessSelector.enable : featureAccessSelector.enableFeature(value); return this.store.select(featureSelector).pipe( first(), map(enable => (enable ? enable : this.router.createUrlTree(['']))), ); } } |