import {ref, useContext} from "@nuxtjs/composition-api"; import {ItemsMenu, OrganizationStore} from "~/types/interfaces"; import {getAccessMenu} from "~/use/layout/Menus/accessMenu"; import {getAgendaMenu} from "~/use/layout/Menus/agendaMenu"; import {getEquipmentMenu} from "~/use/layout/Menus/equipmentMenu"; import {getEducationalMenu} from "~/use/layout/Menus/educationalMenu"; import {getBillingMenu} from "~/use/layout/Menus/billingMenu"; import {getCommunicationMenu} from "~/use/layout/Menus/communicationMenu"; import {getDonorsMenu} from "~/use/layout/Menus/donorsMenu"; import {getMedalsMenu} from "~/use/layout/Menus/medalsMenu"; import {getStatsMenu} from "~/use/layout/Menus/statsMenu"; import {getCotisationsMenu} from "~/use/layout/Menus/cotisationsMenu"; import {getAdmin2iosMenu} from "~/use/layout/Menus/admin2iosMenu"; import {getWebsiteMenu} from "~/use/layout/Menus/websiteMenu"; import {getConfigurationMenu} from "~/use/layout/Menus/configurationMenu"; import {getMyFamilyMenu} from "~/use/layout/Menus/myFamilyMenu"; import {getMyAccessesMenu} from "~/use/layout/Menus/myAccessesMenu"; import {getAccountMenu} from "~/use/layout/Menus/accountMenu"; import {Ability} from "@casl/ability"; /** * @category Use/layout * @class Menu * Use Classe pour la construction du Menu */ class Menu{ private $ability!:Ability; private $config!:any; private $store!:OrganizationStore; /** * Initialise le context NUXT */ setUpContext(){ const {$ability, $config, store} = useContext(); this.$ability = $ability; this.$config = $config; this.$store = store; return this; } /** * Construit le menu et mets à jour le state du profile d'access */ useLateralMenuConstruct(){ let menu:ItemsMenu = [] const accessMenu = getAccessMenu(this.$config,this.$ability,this.$store) if(accessMenu) menu.push(accessMenu) const agendaMenu = getAgendaMenu(this.$config,this.$ability) if(agendaMenu) menu.push(agendaMenu) const equipmentMenu = getEquipmentMenu(this.$config,this.$ability) if(equipmentMenu) menu.push(equipmentMenu) const educationalMenu = getEducationalMenu(this.$config,this.$ability) if(educationalMenu) menu.push(educationalMenu) const billingMenu = getBillingMenu(this.$config,this.$ability) if(billingMenu) menu.push(billingMenu) const communicationMenu = getCommunicationMenu(this.$config,this.$ability) if(communicationMenu) menu.push(communicationMenu) const donorsMenu = getDonorsMenu(this.$config,this.$ability) if(donorsMenu) menu.push(donorsMenu) const medalsMenu = getMedalsMenu(this.$config,this.$ability) if(medalsMenu) menu.push(medalsMenu) const websiteMenu = getWebsiteMenu(this.$config,this.$ability,this.$store).getMenu() if(websiteMenu) menu.push(websiteMenu) const cotisationsMenu = getCotisationsMenu(this.$config,this.$ability) if(cotisationsMenu) menu.push(cotisationsMenu) const statsMenu = getStatsMenu(this.$config,this.$ability) if(statsMenu) menu.push(statsMenu) const admin2iosMenu = getAdmin2iosMenu(this.$config,this.$ability) if(admin2iosMenu) menu.push(admin2iosMenu) //Si l'utilisateur possède au moins un menu alors le menu latéral sera accessible this.$store.commit('profile/access/setHasLateralMenu', menu.length > 0) return ref(menu) } /** * Construit le menu configuration et mets à jour le state du profile d'access */ useConfigurationMenuConstruct() { const menu = getConfigurationMenu(this.$config,this.$ability,this.$store); //Si l'utilisateur possède au moins un menu alors le menu configuration sera accessible this.$store.commit('profile/access/setHasConfigurationMenu', menu != null) return ref(menu) } /** * Construit le menu Mon Compte */ useAccountMenuConstruct() { return ref(getAccountMenu(this.$config,this.$ability,this.$store)) } /** * Construit le menu Mes structure et mets à jour le state du profile d'access */ useMyAccessesMenuConstruct() { const menu = getMyAccessesMenu(this.$config,this.$ability,this.$store); //Si l'utilisateur possède au moins un menu alors le menu mes structures sera accessible this.$store.commit('profile/access/setHasAccessesMenu', menu != null) return ref(menu) } /** * Construit le menu Changement d'utilisateur et mets à jour le state du profile d'access */ useMyFamilyMenuConstruct() { const menu = getMyFamilyMenu(this.$config,this.$ability,this.$store); //Si l'utilisateur possède au moins un menu alors le menu changement d'utilisateur sera accessible this.$store.commit('profile/access/setHasFamilyMenu', menu != null) return ref(menu) } /** * Construit le menu site internet du header */ useWebSiteMenuConstruct() { return ref(getWebsiteMenu(this.$config,this.$ability,this.$store).getHeaderMenu()) } } export const $useMenu = new Menu()