import { NgModule, inject } from '@angular/core'; import { CanActivateFn, Router, RouterModule, Routes } from '@angular/router'; import { UserService } from './core/services/user.service'; import { map } from 'rxjs'; const authGuard: CanActivateFn = () => { const userService: UserService = inject(UserService); const router: Router = inject(Router); return userService.isAuthenticated.pipe( map((isAuth) => isAuth || router.parseUrl('/login')) ); }; const loginGuard: CanActivateFn = () => { const userService: UserService = inject(UserService); const router: Router = inject(Router); return userService.isAuthenticated.pipe( map((isAuth) => { if (!isAuth) { return true; } return router.parseUrl('/dashboard'); }) ); }; const routes: Routes = [ { path: 'login', loadComponent: () => import('./core/auth/auth.component').then((m) => m.AuthComponent), canActivate: [loginGuard], }, { path: 'register', loadComponent: () => import('./core/auth/auth.component').then((m) => m.AuthComponent), canActivate: [loginGuard], }, { path: '', loadComponent: () => import('./core/layout/layout.component').then((m) => m.LayoutComponent), children: [ { path: '', pathMatch: 'full', redirectTo: 'dashboard', }, { path: 'dashboard', loadComponent: () => import('./features/dashboard/dashboard.component').then( (m) => m.DashboardComponent ), canActivate: [authGuard], }, ], }, { path: 'log', loadComponent: () => import('./features/changelog/changelog.component').then((m) => m.ChangelogComponent), } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule], }) export class AppRoutingModule {}