menuComposer.ts 2.3 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. const builder: MenuBuilder = new builderClass(
  51. runtimeConfig,
  52. ability,
  53. organizationProfile,
  54. accessProfile,
  55. router,
  56. )
  57. const menuName = builder.getMenuName()
  58. const menu = builder.build()
  59. if (!menu) {
  60. continue
  61. }
  62. // Store a ref to the menu in the store
  63. layoutState.menus[menuName] = menu
  64. // On enregistre l'état du menu dans le store de la page
  65. if (((menu as MenuGroup).children ?? []).length > 0) {
  66. layoutState.menusOpened[menuName] = false
  67. }
  68. }
  69. }
  70. }