From 67485fdac2f2130b2b0d2e8b729867d9416628cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Sat, 10 Feb 2024 11:13:15 +0200 Subject: [PATCH] Add loading indicator to orderedAsyncGuards --- src/lib/services/composite-route.guard.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/services/composite-route.guard.ts b/src/lib/services/composite-route.guard.ts index 5f425c9..2204906 100644 --- a/src/lib/services/composite-route.guard.ts +++ b/src/lib/services/composite-route.guard.ts @@ -3,6 +3,7 @@ import { inject, Injectable, InjectionToken, Injector, runInInjectionContext } f import { concatMap, firstValueFrom, from, last, of, takeWhile } from 'rxjs'; import { LoadingService } from '../loading'; import { SkeletonService } from './skeleton.service'; +import { tap } from 'rxjs/operators'; @Injectable({ providedIn: 'root', @@ -68,8 +69,10 @@ export type AsyncGuard = (route: ActivatedRouteSnapshot, state: RouterStateSnaps export function orderedAsyncGuards(guards: Array): CanActivateFn { return (route, state) => { const injector = inject(Injector); + const loadingService = inject(LoadingService); return from(guards).pipe( + tap(() => loadingService.start()), // For each guard, fire canActivate and wait for it // to complete. concatMap(guard => runInInjectionContext(injector, () => guard(route, state))), @@ -78,6 +81,7 @@ export function orderedAsyncGuards(guards: Array): CanActivateFn { takeWhile(value => value === true, /* inclusive */ true), // Return the last guard's result. last(), + tap(() => loadingService.stop()), ); }; }