Projekt

Obecné

Profil

Stáhnout (1.3 KB) Statistiky
| Větev: | Tag: | Revize:
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

    
7
@Injectable({
8
  providedIn: 'root'
9
})
10
export class UserState {
11
  private userState$: BehaviorSubject<User> = new BehaviorSubject<User>(null);
12

    
13
  constructor(
14
    private loginService: LoginService,
15
    private toastService: ToastService
16
  ) {}
17

    
18
  setUser(user: User): void {
19
    this.userState$.next(user);
20
  }
21

    
22
  setLoggedIn(loggedIn: boolean) {
23
    this.userState$.next({...this.userState$.getValue(), isLoggedIn: loggedIn})
24
  }
25

    
26
  getUser(): User {
27
    return this.userState$.getValue();
28
  }
29

    
30
  /**
31
   * Get user, if not exists fetch from server
32
   * @param refresh force refresh user status from backend
33
   */
34
  getUser$(refresh: boolean = false): Observable<User> {
35
   if (this.userState$.getValue()){
36
      this.loginService.getUserInfo$Response().subscribe(res => {
37
        this.userState$.next({...this.userState$.getValue(), userInfo: res.body});
38
      }, err => this.toastService.showError(err.error.message));
39
   }
40
    return this.userState$.asObservable();
41
  }
42

    
43
  getLoggedIn(): boolean {
44
    return this.userState$.getValue().isLoggedIn;
45
  }
46
}
    (1-1/1)