menuComposer.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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 {RuntimeConfig} from "@nuxt/schema";
  6. import {AnyAbility} from "@casl/ability";
  7. import {MenuGroup} from "~/types/layout";
  8. export default class MenuComposer {
  9. /**
  10. * Construit l'ensemble des menus et les insère dans le store Layout
  11. * @param runtimeConfig
  12. * @param ability
  13. * @param organizationProfile
  14. * @param accessProfile
  15. * @param layoutState
  16. */
  17. public static build(
  18. runtimeConfig: RuntimeConfig,
  19. ability: AnyAbility,
  20. organizationProfile: organizationState,
  21. accessProfile: AccessProfile,
  22. layoutState: LayoutState
  23. ) {
  24. const builders = [MainMenuBuilder, WebsiteListMenuBuilder, MyAccessesMenuBuilder]
  25. const menus = builders.map(builder => new builder(runtimeConfig, ability, organizationProfile, accessProfile as AccessProfile));
  26. for(let menu of menus){
  27. const menuBuilt = menu.build();
  28. if(menuBuilt){
  29. layoutState.menus[menu.getMenuName()] = menuBuilt
  30. // On enregistre l'état du menu dans le store de la page
  31. if ( ((menuBuilt as MenuGroup).children ?? []).length > 0 ) {
  32. layoutState.menusOpened[menu.getMenuName()] = false
  33. }
  34. }
  35. }
  36. }
  37. }