2020-03-07 13:50:26 +01:00
|
|
|
import { Injectable } from '@angular/core'
|
|
|
|
import { CanActivate, CanDeactivate } from '@angular/router'
|
2020-06-23 14:10:17 +02:00
|
|
|
import { MenuService } from '../menu'
|
|
|
|
import { ScreenService } from '../wrappers'
|
2020-03-07 13:50:26 +01:00
|
|
|
|
|
|
|
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()) {
|
2020-08-17 10:17:54 +02:00
|
|
|
this.menu.setMenuDisplay(this.display)
|
2020-03-07 13:50:26 +01:00
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
export class OpenMenuGuard extends MenuGuard {
|
|
|
|
constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, true) }
|
|
|
|
}
|
|
|
|
|
2020-12-03 13:13:46 +01:00
|
|
|
@Injectable()
|
|
|
|
export class OpenMenuAlwaysGuard extends MenuGuard {
|
|
|
|
constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, true) }
|
|
|
|
|
|
|
|
canActivate (): boolean {
|
|
|
|
this.menu.setMenuDisplay(this.display)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-07 13:50:26 +01:00
|
|
|
@Injectable()
|
|
|
|
export class CloseMenuGuard extends MenuGuard {
|
|
|
|
constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, false) }
|
|
|
|
}
|
|
|
|
|
2020-12-03 13:13:46 +01:00
|
|
|
@Injectable()
|
|
|
|
export class CloseMenuAlwaysGuard extends MenuGuard {
|
|
|
|
constructor (menu: MenuService, screen: ScreenService) { super(menu, screen, false) }
|
|
|
|
|
|
|
|
canActivate (): boolean {
|
|
|
|
this.menu.setMenuDisplay(this.display)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-07 13:50:26 +01:00
|
|
|
@Injectable()
|
|
|
|
export class MenuGuards {
|
|
|
|
public static guards = [
|
|
|
|
OpenMenuGuard,
|
2020-12-03 13:13:46 +01:00
|
|
|
OpenMenuAlwaysGuard,
|
|
|
|
CloseMenuGuard,
|
|
|
|
CloseMenuAlwaysGuard
|
2020-03-07 13:50:26 +01:00
|
|
|
]
|
|
|
|
|
2020-12-03 13:13:46 +01:00
|
|
|
static open (always?: boolean) {
|
|
|
|
return always
|
|
|
|
? OpenMenuAlwaysGuard
|
|
|
|
: OpenMenuGuard
|
2020-03-07 13:50:26 +01:00
|
|
|
}
|
|
|
|
|
2020-12-03 13:13:46 +01:00
|
|
|
static close (always?: boolean) {
|
|
|
|
return always
|
|
|
|
? CloseMenuAlwaysGuard
|
|
|
|
: CloseMenuGuard
|
2020-03-07 13:50:26 +01:00
|
|
|
}
|
|
|
|
}
|