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>(false);
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>(false);
24
  
25
  /**
26
   *  Add hasAdminMenu: true on data of route config, if global sidebar should be used.
27
   */
28
  private _hasAdminMenuSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
29
  private _hasMiniMenuSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
30
  private _isFrontPageSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
31

    
32
  constructor(private router: Router) {
33
    this.router.events.subscribe(event => {
34
      if (event instanceof ActivationStart) {
35
        let data = event.snapshot.data;
36
        if (data['hasSidebar'] !== undefined &&
37
          data['hasSidebar'] === false) {
38
          this.setHasSidebar(false);
39
        } else {
40
          this.setHasSidebar(true);
41
        }
42
        if (data['hasHeader'] !== undefined &&
43
          data['hasHeader'] === false) {
44
          this.setHasHeader(false);
45
        } else {
46
          this.setHasHeader(true);
47
        }
48
        if (data['hasAdminMenu'] !== undefined &&
49
          data['hasAdminMenu'] === true) {
50
          this.setHasAdminMenu(true);
51
        } else {
52
          this.setHasAdminMenu(false);
53
        }
54
        if (data['hasMiniMenu'] !== undefined &&
55
          data['hasMiniMenu'] === true) {
56
          this.setHasMiniMenu(true);
57
        } else {
58
          this.setHasMiniMenu(false);
59
        }
60
        if (data['isFrontPage'] !== undefined &&
61
          data['isFrontPage'] === true) {
62
          this.setFrontPage(true);
63
        } else {
64
          this.setFrontPage(false);
65
        }
66
      }
67
    });
68
  }
69

    
70
  get open(): boolean {
71
    return this.openSubject.getValue();
72
  }
73

    
74
  setOpen(value: boolean) {
75
    this.openSubject.next(value);
76
  }
77

    
78
  get hasSidebar(): Observable<boolean> {
79
    return this.hasSidebarSubject.asObservable();
80
  }
81

    
82
  setHasSidebar(value: boolean) {
83
    this.hasSidebarSubject.next(value);
84
  }
85

    
86
  get hasHeader(): Observable<boolean> {
87
    return this.hasHeaderSubject.asObservable();
88
  }
89

    
90
  setHasHeader(value: boolean) {
91
    this.hasHeaderSubject.next(value);
92
  }
93

    
94

    
95
  get hasAdminMenu(): Observable<boolean> {
96
    return this._hasAdminMenuSubject.asObservable();
97
  }
98

    
99
  setHasAdminMenu(value: boolean) {
100
    this._hasAdminMenuSubject.next(value);
101
  }
102

    
103
  get hasMiniMenu(): Observable<boolean> {
104
    return this._hasMiniMenuSubject.asObservable();
105
  }
106

    
107
  setHasMiniMenu(value: boolean) {
108
    this._hasMiniMenuSubject.next(value);
109
  }
110
  get isFrontPage(): Observable<boolean> {
111
    return this._isFrontPageSubject.asObservable();
112
  }
113

    
114
  setFrontPage(value: boolean) {
115
    this._isFrontPageSubject.next(value);
116
  }
117
}
(1-1/4)