menuComposer.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import type { RuntimeConfig } from '@nuxt/schema'
  2. import type { AnyAbility } from '@casl/ability'
  3. import type { Router } from 'vue-router'
  4. import MainMenuBuilder from '~/services/layout/menuBuilder/mainMenuBuilder'
  5. import type {
  6. AccessProfile,
  7. LayoutState,
  8. organizationState,
  9. } from '~/types/interfaces'
  10. import WebsiteListMenuBuilder from '~/services/layout/menuBuilder/websiteListMenuBuilder'
  11. import MyAccessesMenuBuilder from '~/services/layout/menuBuilder/myAccessesMenuBuilder'
  12. import MyFamilyMenuBuilder from '~/services/layout/menuBuilder/myFamilyMenuBuilder'
  13. import ConfigurationMenuBuilder from '~/services/layout/menuBuilder/configurationMenuBuilder'
  14. import AccountMenuBuilder from '~/services/layout/menuBuilder/accountMenuBuilder'
  15. import type { MenuBuilder, MenuGroup } from '~/types/layout'
  16. import ParametersMenuBuilder from '~/services/layout/menuBuilder/parametersMenuBuilder'
  17. /**
  18. * Gestionnaire principal des menus de l'application
  19. */
  20. export default class MenuComposer {
  21. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  22. protected static readonly builders: Array<any> = [
  23. MainMenuBuilder,
  24. WebsiteListMenuBuilder,
  25. MyAccessesMenuBuilder,
  26. MyFamilyMenuBuilder,
  27. ConfigurationMenuBuilder,
  28. AccountMenuBuilder,
  29. ParametersMenuBuilder,
  30. ]
  31. /**
  32. * Construit l'ensemble des menus et les insère dans le store Layout
  33. *
  34. * @param runtimeConfig
  35. * @param ability
  36. * @param organizationProfile
  37. * @param accessProfile
  38. * @param router
  39. * @param layoutState
  40. */
  41. public static build(
  42. runtimeConfig: RuntimeConfig,
  43. ability: AnyAbility,
  44. organizationProfile: organizationState,
  45. accessProfile: AccessProfile,
  46. router: Router,
  47. layoutState: LayoutState,
  48. ) {
  49. for (const builderClass of MenuComposer.builders) {
  50. // eslint-disable-next-line new-cap
  51. const builder: MenuBuilder = new builderClass(
  52. runtimeConfig,
  53. ability,
  54. organizationProfile,
  55. accessProfile,
  56. router,
  57. )
  58. const menuName = builder.getMenuName()
  59. const menu = builder.build()
  60. if (!menu) {
  61. continue
  62. }
  63. // Store a ref to the menu in the store
  64. layoutState.menus[menuName] = menu
  65. // On enregistre l'état du menu dans le store de la page
  66. if (((menu as MenuGroup).children ?? []).length > 0) {
  67. layoutState.menusOpened[menuName] = false
  68. }
  69. }
  70. }
  71. }