From c76f582f3323868074f443f235061121169384d8 Mon Sep 17 00:00:00 2001 From: Tsironis Ioannis Date: Thu, 5 Mar 2026 18:19:07 +0200 Subject: [PATCH 1/2] feat: add angular async redirect challenge solution --- .../60-async-redirect/src/app/dashboard.ts | 18 ++++---------- .../60-async-redirect/src/app/routes.ts | 24 ++++++++++++++++++- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/apps/angular/60-async-redirect/src/app/dashboard.ts b/apps/angular/60-async-redirect/src/app/dashboard.ts index 377c5e81d..47f0764e4 100644 --- a/apps/angular/60-async-redirect/src/app/dashboard.ts +++ b/apps/angular/60-async-redirect/src/app/dashboard.ts @@ -1,6 +1,5 @@ -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { Router, RouterLink, RouterOutlet } from '@angular/router'; -import { UserProfileService } from './user-profile.service'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { RouterLink, RouterOutlet } from '@angular/router'; @Component({ selector: 'app-dashboard', @@ -13,7 +12,7 @@ import { UserProfileService } from './user-profile.service'; @@ -22,13 +21,4 @@ import { UserProfileService } from './user-profile.service'; changeDetection: ChangeDetectionStrategy.OnPush, imports: [RouterOutlet, RouterLink], }) -export class Dashboard { - private router = inject(Router); - private userProfile = inject(UserProfileService); - - navigate() { - this.userProfile.getProfile().subscribe((profile) => { - void this.router.navigate(['/', profile]); - }); - } -} +export class Dashboard {} diff --git a/apps/angular/60-async-redirect/src/app/routes.ts b/apps/angular/60-async-redirect/src/app/routes.ts index 4a0f11835..b809c3358 100644 --- a/apps/angular/60-async-redirect/src/app/routes.ts +++ b/apps/angular/60-async-redirect/src/app/routes.ts @@ -1,9 +1,27 @@ -import { Routes } from '@angular/router'; +import { inject } from '@angular/core'; +import { Router, Routes } from '@angular/router'; +import { distinctUntilChanged, map } from 'rxjs'; import { AdminPage } from './admin-page'; import { App } from './app'; import { Dashboard } from './dashboard'; import { ProfilePage } from './profile-page'; import { UserPage } from './user-page'; +import { UserProfileService } from './user-profile.service'; + +const redirectTo = () => { + const router = inject(Router); + + return inject(UserProfileService) + .getProfile() + .pipe( + distinctUntilChanged(), + map((profile) => + profile === 'admin' + ? router.createUrlTree(['/admin']) + : router.createUrlTree(['/user']), + ), + ); +}; export const routes: Routes = [ { @@ -12,6 +30,10 @@ export const routes: Routes = [ children: [ { path: '', pathMatch: 'full', component: Dashboard }, { path: 'profile', component: ProfilePage }, + { + path: 'navigateTo', + redirectTo, + }, { path: 'admin', component: AdminPage }, { path: 'user', component: UserPage }, ], From b8d4665804bff0afd2b3dabdee6c317895025900 Mon Sep 17 00:00:00 2001 From: Tsironis Ioannis Date: Tue, 10 Mar 2026 09:37:33 +0200 Subject: [PATCH 2/2] feat: remove rxjs operator --- apps/angular/60-async-redirect/src/app/routes.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/angular/60-async-redirect/src/app/routes.ts b/apps/angular/60-async-redirect/src/app/routes.ts index b809c3358..dd9dde67e 100644 --- a/apps/angular/60-async-redirect/src/app/routes.ts +++ b/apps/angular/60-async-redirect/src/app/routes.ts @@ -1,6 +1,6 @@ import { inject } from '@angular/core'; import { Router, Routes } from '@angular/router'; -import { distinctUntilChanged, map } from 'rxjs'; +import { map } from 'rxjs'; import { AdminPage } from './admin-page'; import { App } from './app'; import { Dashboard } from './dashboard'; @@ -14,7 +14,6 @@ const redirectTo = () => { return inject(UserProfileService) .getProfile() .pipe( - distinctUntilChanged(), map((profile) => profile === 'admin' ? router.createUrlTree(['/admin'])