diff --git a/frontend/src/app/feature/transaction-history/transaction-history.component.ts b/frontend/src/app/feature/transaction-history/transaction-history.component.ts index dabc255..338ef4e 100644 --- a/frontend/src/app/feature/transaction-history/transaction-history.component.ts +++ b/frontend/src/app/feature/transaction-history/transaction-history.component.ts @@ -1,4 +1,11 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + inject, + Input, + Output, +} from '@angular/core'; import { TransactionService } from '@service/transaction.service'; import { Observable } from 'rxjs'; import { AsyncPipe, CurrencyPipe, DatePipe, NgIf } from '@angular/common'; diff --git a/frontend/src/app/service/auth.service.ts b/frontend/src/app/service/auth.service.ts index 1066008..47e1fd3 100644 --- a/frontend/src/app/service/auth.service.ts +++ b/frontend/src/app/service/auth.service.ts @@ -18,21 +18,24 @@ export class AuthService { private authUrl = `${environment.apiUrl}/auth`; private userUrl = `${environment.apiUrl}/users`; - userSubject: BehaviorSubject; + private currentUserSubject: BehaviorSubject; + public currentUser: Observable; constructor( private http: HttpClient, private router: Router ) { - this.userSubject = new BehaviorSubject(this.getUserFromStorage()); + this.currentUserSubject = new BehaviorSubject(this.getUserFromStorage()); + this.currentUser = this.currentUserSubject.asObservable(); + // Check if token exists and load user data if (this.getToken()) { this.loadCurrentUser(); } } public get currentUserValue(): User | null { - return this.userSubject.value; + return this.currentUserSubject.value; } login(loginRequest: LoginRequest): Observable { @@ -51,7 +54,7 @@ export class AuthService { logout(): void { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem(USER_KEY); - this.userSubject.next(null); + this.currentUserSubject.next(null); this.router.navigate(['/']); } @@ -80,7 +83,7 @@ export class AuthService { private setUser(user: User): void { localStorage.setItem(USER_KEY, JSON.stringify(user)); - this.userSubject.next(user); + this.currentUserSubject.next(user); } private getUserFromStorage(): User | null { diff --git a/frontend/src/app/shared/components/navbar/navbar.component.ts b/frontend/src/app/shared/components/navbar/navbar.component.ts index 5d44f60..494b61f 100644 --- a/frontend/src/app/shared/components/navbar/navbar.component.ts +++ b/frontend/src/app/shared/components/navbar/navbar.component.ts @@ -10,6 +10,7 @@ import { RouterModule } from '@angular/router'; import { AuthService } from '@service/auth.service'; import { Subscription } from 'rxjs'; import { AnimatedNumberComponent } from '@blackjack/components/animated-number/animated-number.component'; +import { UserService } from '@service/user.service'; @Component({ selector: 'app-navbar', @@ -23,19 +24,29 @@ export class NavbarComponent implements OnInit, OnDestroy { private authService: AuthService = inject(AuthService); isLoggedIn = this.authService.isLoggedIn(); - private authSubscription!: Subscription; + private userSubscription: Subscription | undefined; + private authSubscription: Subscription | undefined; public balance = signal(0); + private userService = inject(UserService); ngOnInit() { - this.authSubscription = this.authService.userSubject.subscribe({ - next: (user) => { - this.balance.set(user?.balance ?? 0); - }, + // Subscribe to auth changes + this.authSubscription = this.authService.currentUser.subscribe((user) => { + this.isLoggedIn = !!user; + this.balance.set(user?.balance ?? 0); + console.log('Updated navbar balance:', user?.balance); }); + + this.userService.refreshCurrentUser(); } ngOnDestroy() { - this.authSubscription.unsubscribe(); + if (this.userSubscription) { + this.userSubscription.unsubscribe(); + } + if (this.authSubscription) { + this.authSubscription.unsubscribe(); + } } logout() {