menuComposer.ts 2.3 KB

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