Project

General

Profile

1
import {Injectable} from "@angular/core";
2
import {BehaviorSubject, Observable, Subscriber} 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
  /**
30
   *  Add isFrontPage: true on data of route config, if current route is for front page.
31
   */
32
  private isFrontPageSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
33
  /**
34
   *  Add isSmallScreen: true on data of route config, if screen is small.
35
   */
36
  private isSmallScreenSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
37
  
38
  /**
39
   *  Add isDashboard: false on data of route config, if page is for a stakeholder but not for dashboard.
40
   */
41
  private isDashboardSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);
42
  
43
  sub: any;
44
  
45
  ngOnDestroy() {
46
    this.clearSubscriptions();
47
  }
48
  
49
  clearSubscriptions() {
50
    if (this.sub instanceof Subscriber) {
51
      this.sub.unsubscribe();
52
    }
53
  }
54
  
55
  constructor(private router: Router) {
56
    this.sub = this.router.events.subscribe(event => {
57
      if (event instanceof ActivationStart) {
58
        let data = event.snapshot.data;
59
        if (data['hasSidebar'] !== undefined &&
60
          data['hasSidebar'] === false) {
61
          this.setHasSidebar(false);
62
        } else {
63
          this.setHasSidebar(true);
64
        }
65
        if (data['hasHeader'] !== undefined &&
66
          data['hasHeader'] === false) {
67
          this.setHasHeader(false);
68
        } else {
69
          this.setHasHeader(true);
70
        }
71
        if (data['hasAdminMenu'] !== undefined &&
72
          data['hasAdminMenu'] === true) {
73
          this.setHasAdminMenu(true);
74
        } else {
75
          this.setHasAdminMenu(false);
76
        }
77
        if (data['isFrontPage'] !== undefined &&
78
          data['isFrontPage'] === true) {
79
          this.setFrontPage(true);
80
        } else {
81
          this.setFrontPage(false);
82
        }
83
        if (data['isSmallScreen'] !== undefined &&
84
          data['isSmallScreen'] === true) {
85
          this.setSmallScreen(true);
86
        } else {
87
          this.setSmallScreen(false);
88
        }
89
        if (data['isDashboard'] !== undefined &&
90
          data['isDashboard'] === false) {
91
          this.setDashboard(false);
92
        } else {
93
          this.setDashboard(true);
94
        }
95
      }
96
    });
97
  }
98
  
99
  get open(): boolean {
100
    return this.openSubject.getValue();
101
  }
102
  
103
  setOpen(value: boolean) {
104
    this.openSubject.next(value);
105
  }
106
  
107
  get hasSidebar(): Observable<boolean> {
108
    return this.hasSidebarSubject.asObservable();
109
  }
110
  
111
  setHasSidebar(value: boolean) {
112
    this.hasSidebarSubject.next(value);
113
  }
114
  
115
  get hasHeader(): Observable<boolean> {
116
    return this.hasHeaderSubject.asObservable();
117
  }
118
  
119
  setHasHeader(value: boolean) {
120
    this.hasHeaderSubject.next(value);
121
  }
122
  
123
  
124
  get hasAdminMenu(): Observable<boolean> {
125
    return this.hasAdminMenuSubject.asObservable();
126
  }
127
  
128
  setHasAdminMenu(value: boolean) {
129
    this.hasAdminMenuSubject.next(value);
130
  }
131
  
132
  get isFrontPage(): Observable<boolean> {
133
    return this.isFrontPageSubject.asObservable();
134
  }
135
  
136
  setFrontPage(value: boolean) {
137
    this.isFrontPageSubject.next(value);
138
  }
139
  
140
  get isDashboard(): Observable<boolean> {
141
    return this.isDashboardSubject.asObservable();
142
  }
143
  
144
  setDashboard(value: boolean) {
145
    this.isDashboardSubject.next(value);
146
  }
147
  
148
  get isSmallScreen(): boolean {
149
    return this.isSmallScreenSubject.getValue();
150
  }
151
  
152
  setSmallScreen(value: boolean) {
153
    this.isSmallScreenSubject.next(value);
154
  }
155
}
(1-1/4)