Project

General

Profile

1 57496 k.triantaf
import {Injectable} from "@angular/core";
2
import {BehaviorSubject, Observable} from "rxjs";
3 57606 k.triantaf
import {ActivationStart, Router} from "@angular/router";
4 57496 k.triantaf
5
@Injectable({
6
  providedIn: 'root'
7
})
8 57706 k.triantaf
export class LayoutService {
9 57496 k.triantaf
10 57591 k.triantaf
  /**
11
   * Set this to true when sidebar items are ready.
12
   */
13 57831 k.triantaf
  private openSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
14 57496 k.triantaf
15 57591 k.triantaf
  /**
16 57618 k.triantaf
   *  Add hasSidebar: false on data of route config, if sidebar is not needed.
17 57591 k.triantaf
   */
18 57837 k.triantaf
  private hasSidebarSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
19 57591 k.triantaf
20 57706 k.triantaf
  /**
21
   *  Add hasHeader: false on data of route config, if header is not needed.
22
   */
23 57837 k.triantaf
  private hasHeaderSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
24 57935 argiro.kok
  /**
25
   *  Add hasAdminMenu: false on data of route config, if header is not needed.
26
   */
27 57706 k.triantaf
28 57935 argiro.kok
  private _hasAdminMenuSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
29
30 57606 k.triantaf
  constructor(private router: Router) {
31
    this.router.events.subscribe(event => {
32
      if (event instanceof ActivationStart) {
33
        let data = event.snapshot.data;
34
        if (this.hasSidebarSubject.value === true &&
35
          data['hasSidebar'] !== undefined &&
36
          data['hasSidebar'] === false) {
37
          this.setHasSidebar(false);
38
        } else if (this.hasSidebarSubject.value === false) {
39
          this.setHasSidebar(true);
40
        }
41 57706 k.triantaf
        if (this.hasHeaderSubject.value === true &&
42
          data['hasHeader'] !== undefined &&
43
          data['hasHeader'] === false) {
44
          this.setHasHeader(false);
45
        } else if (this.hasHeaderSubject.value === false) {
46
          this.setHasHeader(true);
47
        }
48 57935 argiro.kok
        if (this._hasAdminMenuSubject.value === true &&
49
          data['hasAdminMenu'] !== undefined &&
50
          data['hasAdminMenu'] === false) {
51
          this.setHasAdminMenu(false);
52
        } else if (this.hasAdminMenu.value === false) {
53
          this.setHasAdminMenu(true);
54
        }
55 57606 k.triantaf
      }
56
    });
57
  }
58 57496 k.triantaf
59
  get open(): boolean {
60
    return this.openSubject.getValue();
61
  }
62
63
  setOpen(value: boolean) {
64
    this.openSubject.next(value);
65
  }
66
67
  get hasSidebar(): Observable<boolean> {
68
    return this.hasSidebarSubject.asObservable();
69
  }
70
71
  setHasSidebar(value: boolean) {
72
    this.hasSidebarSubject.next(value);
73
  }
74 57706 k.triantaf
75
  get hasHeader(): Observable<boolean> {
76
    return this.hasHeaderSubject.asObservable();
77
  }
78
79
  setHasHeader(value: boolean) {
80
    this.hasHeaderSubject.next(value);
81
  }
82 57935 argiro.kok
83
84
  get hasAdminMenu(): BehaviorSubject<boolean> {
85
    return this._hasAdminMenuSubject;
86
  }
87
88
  setHasAdminMenu(value: boolean) {
89
    this._hasAdminMenuSubject.next(value);
90
  }
91 57496 k.triantaf
}