All files / lib/guards/feature-access feature-access.guard.ts

100% Statements 7/7
100% Branches 6/6
100% Functions 3/3
100% Lines 7/7

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(['']))),
    );
  }
}