menuComposer.ts 2.2 KB

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