]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/app/core/routing/menu-guard.service.ts
501e009c0925f25a08d8bc95c8b76466418d5d45
[github/Chocobozzz/PeerTube.git] / client / src / app / core / routing / menu-guard.service.ts
1 import { Injectable } from '@angular/core'
2 import { CanActivate, CanDeactivate } from '@angular/router'
3 import { MenuService } from '../menu'
4 import { ScreenService } from '../wrappers'
5
6 abstract class MenuGuard implements CanActivate, CanDeactivate<any> {
7 display = true
8 canDeactivate = this.canActivate
9
10 constructor (protected menu: MenuService, protected screen: ScreenService, display: boolean) {
11 this.display = display
12 }
13
14 canActivate (): boolean {
15 // small screens already have the site-wide onResize from screenService
16 // > medium screens have enough space to fit the administrative menus
17 if (!this.screen.isInMobileView() && this.screen.isInMediumView()) {
18 this.menu.setMenuDisplay(this.display)
19 }
20 return true
21 }
22 }
23
24 @Injectable()
25 export class OpenMenuGuard extends MenuGuard {
26 constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, true) }
27 }
28
29 @Injectable()
30 export class CloseMenuGuard extends MenuGuard {
31 constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, false) }
32 }
33
34 @Injectable()
35 export class MenuGuards {
36 public static guards = [
37 OpenMenuGuard,
38 CloseMenuGuard
39 ]
40
41 static open () {
42 return OpenMenuGuard
43 }
44
45 static close () {
46 return CloseMenuGuard
47 }
48 }