From c054d620ddebbb5649abdb487ef4bc2ffa8230a6 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Thu, 13 Mar 2025 11:24:37 -0700 Subject: [PATCH] refactor(router): Update to use early return to reduce nesting (#60377) Updates a switchTap body to use early return to reduce nesting PR Close #60377 --- packages/router/src/navigation_transition.ts | 85 ++++++++++---------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/packages/router/src/navigation_transition.ts b/packages/router/src/navigation_transition.ts index e32ae8c794a..b17a64b8272 100644 --- a/packages/router/src/navigation_transition.ts +++ b/packages/router/src/navigation_transition.ts @@ -664,49 +664,50 @@ export class NavigationTransitions { // --- RESOLVE --- switchTap((t) => { - if (t.guards.canActivateChecks.length) { - return of(t).pipe( - tap((t) => { - const resolveStart = new ResolveStart( - t.id, - this.urlSerializer.serialize(t.extractedUrl), - this.urlSerializer.serialize(t.urlAfterRedirects!), - t.targetSnapshot!, - ); - this.events.next(resolveStart); - }), - switchMap((t) => { - let dataResolved = false; - return of(t).pipe( - resolveData(this.paramsInheritanceStrategy, this.environmentInjector), - tap({ - next: () => (dataResolved = true), - complete: () => { - if (!dataResolved) { - this.cancelNavigationTransition( - t, - typeof ngDevMode === 'undefined' || ngDevMode - ? `At least one route resolver didn't emit any value.` - : '', - NavigationCancellationCode.NoDataFromResolver, - ); - } - }, - }), - ); - }), - tap((t) => { - const resolveEnd = new ResolveEnd( - t.id, - this.urlSerializer.serialize(t.extractedUrl), - this.urlSerializer.serialize(t.urlAfterRedirects!), - t.targetSnapshot!, - ); - this.events.next(resolveEnd); - }), - ); + if (t.guards.canActivateChecks.length === 0) { + return undefined; } - return undefined; + + return of(t).pipe( + tap((t) => { + const resolveStart = new ResolveStart( + t.id, + this.urlSerializer.serialize(t.extractedUrl), + this.urlSerializer.serialize(t.urlAfterRedirects!), + t.targetSnapshot!, + ); + this.events.next(resolveStart); + }), + switchMap((t) => { + let dataResolved = false; + return of(t).pipe( + resolveData(this.paramsInheritanceStrategy, this.environmentInjector), + tap({ + next: () => (dataResolved = true), + complete: () => { + if (!dataResolved) { + this.cancelNavigationTransition( + t, + typeof ngDevMode === 'undefined' || ngDevMode + ? `At least one route resolver didn't emit any value.` + : '', + NavigationCancellationCode.NoDataFromResolver, + ); + } + }, + }), + ); + }), + tap((t) => { + const resolveEnd = new ResolveEnd( + t.id, + this.urlSerializer.serialize(t.extractedUrl), + this.urlSerializer.serialize(t.urlAfterRedirects!), + t.targetSnapshot!, + ); + this.events.next(resolveEnd); + }), + ); }), // --- LOAD COMPONENTS ---