menuComposer.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import MainMenuBuilder from "~/services/menuBuilder/mainMenuBuilder";
  2. import {AccessProfile, LayoutState, organizationState} from "~/types/interfaces";
  3. import WebsiteListMenuBuilder from "~/services/menuBuilder/websiteListMenuBuilder";
  4. import MyAccessesMenuBuilder from "~/services/menuBuilder/myAccessesMenuBuilder";
  5. import MyFamilyMenuBuilder from "~/services/menuBuilder/myFamilyMenuBuilder";
  6. import ConfigurationMenuBuilder from "~/services/menuBuilder/configurationMenuBuilder";
  7. import AccountMenuBuilder from "~/services/menuBuilder/accountMenuBuilder";
  8. import {RuntimeConfig} from "@nuxt/schema";
  9. import {AnyAbility} from "@casl/ability";
  10. import {MenuGroup} from "~/types/layout";
  11. export default class MenuComposer {
  12. /**
  13. * Construit l'ensemble des menus et les insère dans le store Layout
  14. * @param runtimeConfig
  15. * @param ability
  16. * @param organizationProfile
  17. * @param accessProfile
  18. * @param layoutState
  19. */
  20. public static build(
  21. runtimeConfig: RuntimeConfig,
  22. ability: AnyAbility,
  23. organizationProfile: organizationState,
  24. accessProfile: AccessProfile,
  25. layoutState: LayoutState
  26. ) {
  27. const builders = [
  28. MainMenuBuilder,
  29. WebsiteListMenuBuilder,
  30. MyAccessesMenuBuilder,
  31. MyFamilyMenuBuilder,
  32. ConfigurationMenuBuilder,
  33. AccountMenuBuilder
  34. ]
  35. const menus = builders.map(builder => new builder(runtimeConfig, ability, organizationProfile, accessProfile));
  36. for(let menu of menus){
  37. const menuBuilt = menu.build();
  38. if(menuBuilt){
  39. layoutState.menus[menu.getMenuName()] = menuBuilt
  40. // On enregistre l'état du menu dans le store de la page
  41. if ( ((menuBuilt as MenuGroup).children ?? []).length > 0 ) {
  42. layoutState.menusOpened[menu.getMenuName()] = false
  43. }
  44. }
  45. }
  46. }
  47. }