import MainMenuBuilder from "~/services/menuBuilder/mainMenuBuilder"; import {AccessProfile, LayoutState, organizationState} from "~/types/interfaces"; import WebsiteListMenuBuilder from "~/services/menuBuilder/websiteListMenuBuilder"; import MyAccessesMenuBuilder from "~/services/menuBuilder/myAccessesMenuBuilder"; import {RuntimeConfig} from "@nuxt/schema"; import {AnyAbility} from "@casl/ability"; import {MenuGroup} from "~/types/layout"; export default class MenuComposer { /** * Construit l'ensemble des menus et les insère dans le store Layout * @param runtimeConfig * @param ability * @param organizationProfile * @param accessProfile * @param layoutState */ public static build( runtimeConfig: RuntimeConfig, ability: AnyAbility, organizationProfile: organizationState, accessProfile: AccessProfile, layoutState: LayoutState ) { const builders = [MainMenuBuilder, WebsiteListMenuBuilder, MyAccessesMenuBuilder] const menus = builders.map(builder => new builder(runtimeConfig, ability, organizationProfile, accessProfile as AccessProfile)); for(let menu of menus){ const menuBuilt = menu.build(); if(menuBuilt){ layoutState.menus[menu.getMenuName()] = menuBuilt // On enregistre l'état du menu dans le store de la page if ( ((menuBuilt as MenuGroup).children ?? []).length > 0 ) { layoutState.menusOpened[menu.getMenuName()] = false } } } } }