menu-guard.service.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { Injectable } from '@angular/core'
  2. import { MenuService } from '../menu'
  3. import { ScreenService } from '../wrappers'
  4. abstract class MenuGuard {
  5. canDeactivate = this.canActivate.bind(this)
  6. constructor (protected menu: MenuService, protected screen: ScreenService, protected display: boolean) {
  7. }
  8. canActivate (): boolean {
  9. // small screens already have the site-wide onResize from screenService
  10. // > medium screens have enough space to fit the administrative menus
  11. if (!this.screen.isInMobileView() && this.screen.isInMediumView()) {
  12. this.menu.setMenuDisplay(this.display)
  13. }
  14. return true
  15. }
  16. }
  17. @Injectable()
  18. export class OpenMenuGuard extends MenuGuard {
  19. constructor (menu: MenuService, screen: ScreenService) {
  20. super(menu, screen, true)
  21. }
  22. }
  23. @Injectable()
  24. export class OpenMenuAlwaysGuard extends MenuGuard {
  25. constructor (menu: MenuService, screen: ScreenService) {
  26. super(menu, screen, true)
  27. }
  28. canActivate (): boolean {
  29. this.menu.setMenuDisplay(this.display)
  30. return true
  31. }
  32. }
  33. @Injectable()
  34. export class CloseMenuGuard extends MenuGuard {
  35. constructor (menu: MenuService, screen: ScreenService) {
  36. super(menu, screen, false)
  37. }
  38. }
  39. @Injectable()
  40. export class CloseMenuAlwaysGuard extends MenuGuard {
  41. constructor (menu: MenuService, screen: ScreenService) {
  42. super(menu, screen, false)
  43. }
  44. canActivate (): boolean {
  45. this.menu.setMenuDisplay(this.display)
  46. return true
  47. }
  48. }
  49. @Injectable()
  50. export class MenuGuards {
  51. public static guards = [
  52. OpenMenuGuard,
  53. OpenMenuAlwaysGuard,
  54. CloseMenuGuard,
  55. CloseMenuAlwaysGuard
  56. ]
  57. static open (always?: boolean) {
  58. return always
  59. ? OpenMenuAlwaysGuard
  60. : OpenMenuGuard
  61. }
  62. static close (always?: boolean) {
  63. return always
  64. ? CloseMenuAlwaysGuard
  65. : CloseMenuGuard
  66. }
  67. }