| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import type { RuntimeConfig } from '@nuxt/schema'
- import type { AnyAbility } from '@casl/ability'
- import type { Router } from 'vue-router'
- import MainMenuBuilder from '~/services/layout/menuBuilder/mainMenuBuilder'
- import type {
- AccessProfile,
- LayoutState,
- organizationState,
- } from '~/types/interfaces'
- import WebsiteListMenuBuilder from '~/services/layout/menuBuilder/websiteListMenuBuilder'
- import MyAccessesMenuBuilder from '~/services/layout/menuBuilder/myAccessesMenuBuilder'
- import MyFamilyMenuBuilder from '~/services/layout/menuBuilder/myFamilyMenuBuilder'
- import ConfigurationMenuBuilder from '~/services/layout/menuBuilder/configurationMenuBuilder'
- import AccountMenuBuilder from '~/services/layout/menuBuilder/accountMenuBuilder'
- import type { MenuBuilder, MenuGroup } from '~/types/layout'
- import ParametersMenuBuilder from '~/services/layout/menuBuilder/parametersMenuBuilder'
- /**
- * Gestionnaire principal des menus de l'application
- */
- export default class MenuComposer {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- protected static readonly builders: Array<any> = [
- MainMenuBuilder,
- WebsiteListMenuBuilder,
- MyAccessesMenuBuilder,
- MyFamilyMenuBuilder,
- ConfigurationMenuBuilder,
- AccountMenuBuilder,
- ParametersMenuBuilder,
- ]
- /**
- * Construit l'ensemble des menus et les insère dans le store Layout
- *
- * @param runtimeConfig
- * @param ability
- * @param organizationProfile
- * @param accessProfile
- * @param router
- * @param layoutState
- */
- public static build(
- runtimeConfig: RuntimeConfig,
- ability: AnyAbility,
- organizationProfile: organizationState,
- accessProfile: AccessProfile,
- router: Router,
- layoutState: LayoutState,
- ) {
- for (const builderClass of MenuComposer.builders) {
-
- const builder: MenuBuilder = new builderClass(
- runtimeConfig,
- ability,
- organizationProfile,
- accessProfile,
- router,
- )
- const menuName = builder.getMenuName()
- const menu = builder.build()
- if (!menu) {
- continue
- }
- // Store a ref to the menu in the store
- layoutState.menus[menuName] = menu
- // On enregistre l'état du menu dans le store de la page
- if (((menu as MenuGroup).children ?? []).length > 0) {
- layoutState.menusOpened[menuName] = false
- }
- }
- }
- }
|