aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/core/routing/menu-guard.service.ts
blob: 9df2856351133da0ab9a87ef09bbdb090a5dcb1e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { Injectable } from '@angular/core'
import { CanActivate, CanDeactivate } from '@angular/router'
import { MenuService } from '../menu'
import { ScreenService } from '../wrappers'

abstract class MenuGuard implements CanActivate, CanDeactivate<any> {
  display = true
  canDeactivate = this.canActivate

  constructor (protected menu: MenuService, protected screen: ScreenService, display: boolean) {
    this.display = display
  }

  canActivate (): boolean {
    // small screens already have the site-wide onResize from screenService
    // > medium screens have enough space to fit the administrative menus
    if (!this.screen.isInMobileView() && this.screen.isInMediumView()) {
      this.menu.isMenuDisplayed = this.display
    }
    return true
  }
}

@Injectable()
export class OpenMenuGuard extends MenuGuard {
  constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, true) }
}

@Injectable()
export class CloseMenuGuard extends MenuGuard {
  constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, false) }
}

@Injectable()
export class MenuGuards {
  public static guards = [
    OpenMenuGuard,
    CloseMenuGuard
  ]

  static open () {
    return OpenMenuGuard
  }

  static close () {
    return CloseMenuGuard
  }
}