menuComposer.ts 2.3 KB

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