user.state.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {Injectable} from '@angular/core';
  2. import {BehaviorSubject, Observable} from 'rxjs';
  3. import {User} from '../models/user';
  4. import {LoginService} from '../../shared/api/endpoints/services/login.service';
  5. import {ToastService} from '../../shared/services/toast.service';
  6. @Injectable({
  7. providedIn: 'root'
  8. })
  9. export class UserState {
  10. private userState$: BehaviorSubject<User> = new BehaviorSubject<User>(null);
  11. constructor(
  12. private loginService: LoginService,
  13. private toastService: ToastService
  14. ) {}
  15. setUser(user: User): void {
  16. this.userState$.next(user);
  17. }
  18. setLoggedIn(loggedIn: boolean) {
  19. this.userState$.next({...this.userState$.getValue(), isLoggedIn: loggedIn})
  20. }
  21. getUser(): User {
  22. return this.userState$.getValue();
  23. }
  24. /**
  25. * Get user, if not exists fetch from server
  26. * @param refresh force refresh user status from backend
  27. */
  28. getUser$(refresh: boolean = false): Observable<User> {
  29. if (this.userState$.getValue()){
  30. this.loginService.getUserInfo$Response().subscribe(res => {
  31. this.userState$.next({...this.userState$.getValue(), userInfo: res.body});
  32. }, err => this.toastService.showError(err.error.message));
  33. }
  34. return this.userState$.asObservable();
  35. }
  36. getLoggedIn(): boolean {
  37. return this.userState$.getValue().isLoggedIn;
  38. }
  39. }