From a8b5cfce145f6c29c544da37ec3687e6a778ff60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Wed, 7 Aug 2024 21:30:41 +0300 Subject: [PATCH] Unordered async guards --- src/lib/services/composite-route.guard.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lib/services/composite-route.guard.ts b/src/lib/services/composite-route.guard.ts index 0d7f9d7..510e99f 100644 --- a/src/lib/services/composite-route.guard.ts +++ b/src/lib/services/composite-route.guard.ts @@ -86,3 +86,23 @@ export function orderedAsyncGuards(guards: Array): CanActivateFn { ); }; } + +export function unorderedAsyncGuards(guards: Array): CanActivateFn { + return async (route, state) => { + const injector = inject(Injector); + const loadingService = inject(LoadingService); + + loadingService.start(); + + try { + const result = await Promise.all(guards.map(guard => runInInjectionContext(injector, () => guard(route, state)))); + loadingService.stop(); + return result.every(Boolean); + } catch (error) { + console.error(error); + loadingService.stop(); + } + + return false; + }; +}