Project

General

Profile

1
import {Injectable} from "@angular/core";
2
import {BehaviorSubject, Observable} from "rxjs";
3
import {ActivationStart, Router} from "@angular/router";
4

    
5
@Injectable({
6
  providedIn: 'root'
7
})
8
export class LayoutService {
9

    
10
  /**
11
   * Set this to true when sidebar items are ready.
12
   */
13
  private openSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
14

    
15
  /**
16
   *  Add hasSidebar: false on data of route config, if sidebar is not needed.
17
   */
18
  private hasSidebarSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);
19

    
20
  /**
21
   *  Add hasHeader: false on data of route config, if header is not needed.
22
   */
23
  private hasHeaderSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);
24

    
25
  constructor(private router: Router) {
26
    this.router.events.subscribe(event => {
27
      if (event instanceof ActivationStart) {
28
        let data = event.snapshot.data;
29
        if (this.hasSidebarSubject.value === true &&
30
          data['hasSidebar'] !== undefined &&
31
          data['hasSidebar'] === false) {
32
          this.setHasSidebar(false);
33
        } else if (this.hasSidebarSubject.value === false) {
34
          this.setHasSidebar(true);
35
        }
36
        if (this.hasHeaderSubject.value === true &&
37
          data['hasHeader'] !== undefined &&
38
          data['hasHeader'] === false) {
39
          this.setHasHeader(false);
40
        } else if (this.hasHeaderSubject.value === false) {
41
          this.setHasHeader(true);
42
        }
43
      }
44
    });
45
  }
46

    
47
  get open(): boolean {
48
    return this.openSubject.getValue();
49
  }
50

    
51
  setOpen(value: boolean) {
52
    this.openSubject.next(value);
53
  }
54

    
55
  get hasSidebar(): Observable<boolean> {
56
    return this.hasSidebarSubject.asObservable();
57
  }
58

    
59
  setHasSidebar(value: boolean) {
60
    this.hasSidebarSubject.next(value);
61
  }
62

    
63
  get hasHeader(): Observable<boolean> {
64
    return this.hasHeaderSubject.asObservable();
65
  }
66

    
67
  setHasHeader(value: boolean) {
68
    this.hasHeaderSubject.next(value);
69
  }
70
}
(1-1/4)