menu.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import {ref, useContext, Ref} from "@nuxtjs/composition-api";
  2. import {ItemMenu, ItemsMenu, OrganizationStore} from "~/types/interfaces";
  3. import {getAccessMenu} from "~/use/layout/Menus/accessMenu";
  4. import {getAgendaMenu} from "~/use/layout/Menus/agendaMenu";
  5. import {getEquipmentMenu} from "~/use/layout/Menus/equipmentMenu";
  6. import {getEducationalMenu} from "~/use/layout/Menus/educationalMenu";
  7. import {getBillingMenu} from "~/use/layout/Menus/billingMenu";
  8. import {getCommunicationMenu} from "~/use/layout/Menus/communicationMenu";
  9. import {getDonorsMenu} from "~/use/layout/Menus/donorsMenu";
  10. import {getMedalsMenu} from "~/use/layout/Menus/medalsMenu";
  11. import {getStatsMenu} from "~/use/layout/Menus/statsMenu";
  12. import {getCotisationsMenu} from "~/use/layout/Menus/cotisationsMenu";
  13. import {getAdmin2iosMenu} from "~/use/layout/Menus/admin2iosMenu";
  14. import {getWebsiteMenu} from "~/use/layout/Menus/websiteMenu";
  15. import {getConfigurationMenu} from "~/use/layout/Menus/configurationMenu";
  16. import {getMyFamilyMenu} from "~/use/layout/Menus/myFamilyMenu";
  17. import {getMyAccessesMenu} from "~/use/layout/Menus/myAccessesMenu";
  18. import {getAccountMenu} from "~/use/layout/Menus/accountMenu";
  19. import {Ability} from "@casl/ability";
  20. /**
  21. * @category Use/layout
  22. * @class Menu
  23. * Use Classe pour la construction du Menu
  24. */
  25. class Menu{
  26. private $ability!:Ability;
  27. private $config!:any;
  28. private $store!:OrganizationStore;
  29. /**
  30. * Initialise le context NUXT
  31. */
  32. setUpContext(){
  33. const {$ability, $config, store} = useContext();
  34. this.$ability = $ability;
  35. this.$config = $config;
  36. this.$store = store;
  37. return this;
  38. }
  39. /**
  40. * Construit le menu et mets à jour le state du profile d'access
  41. */
  42. useLateralMenuConstruct():Ref{
  43. let menu:ItemsMenu = []
  44. const accessMenu:ItemMenu | null = getAccessMenu(this.$config,this.$ability,this.$store)
  45. if(accessMenu) menu.push(accessMenu)
  46. const agendaMenu:ItemMenu | null = getAgendaMenu(this.$config,this.$ability)
  47. if(agendaMenu) menu.push(agendaMenu)
  48. const equipmentMenu:ItemMenu | null = getEquipmentMenu(this.$config,this.$ability)
  49. if(equipmentMenu) menu.push(equipmentMenu)
  50. const educationalMenu:ItemMenu | null = getEducationalMenu(this.$config,this.$ability)
  51. if(educationalMenu) menu.push(educationalMenu)
  52. const billingMenu:ItemMenu | null = getBillingMenu(this.$config,this.$ability)
  53. if(billingMenu) menu.push(billingMenu)
  54. const communicationMenu:ItemMenu | null = getCommunicationMenu(this.$config,this.$ability)
  55. if(communicationMenu) menu.push(communicationMenu)
  56. const donorsMenu:ItemMenu | null = getDonorsMenu(this.$config,this.$ability)
  57. if(donorsMenu) menu.push(donorsMenu)
  58. const medalsMenu:ItemMenu | null = getMedalsMenu(this.$config,this.$ability)
  59. if(medalsMenu) menu.push(medalsMenu)
  60. const websiteMenu:ItemMenu | null = getWebsiteMenu(this.$config,this.$ability,this.$store).getMenu()
  61. if(websiteMenu) menu.push(websiteMenu)
  62. const cotisationsMenu:ItemMenu | null = getCotisationsMenu(this.$config,this.$ability)
  63. if(cotisationsMenu) menu.push(cotisationsMenu)
  64. const statsMenu:ItemMenu | null = getStatsMenu(this.$config,this.$ability)
  65. if(statsMenu) menu.push(statsMenu)
  66. const admin2iosMenu:ItemMenu | null = getAdmin2iosMenu(this.$config,this.$ability)
  67. if(admin2iosMenu) menu.push(admin2iosMenu)
  68. //Si l'utilisateur possède au moins un menu alors le menu latéral sera accessible
  69. this.$store.commit('profile/access/setHasLateralMenu', menu.length > 0)
  70. return ref(menu)
  71. }
  72. /**
  73. * Construit le menu configuration et mets à jour le state du profile d'access
  74. */
  75. useConfigurationMenuConstruct():Ref {
  76. const menu:ItemMenu | null = getConfigurationMenu(this.$config,this.$ability,this.$store);
  77. //Si l'utilisateur possède au moins un menu alors le menu configuration sera accessible
  78. this.$store.commit('profile/access/setHasConfigurationMenu', menu != null)
  79. return ref(menu)
  80. }
  81. /**
  82. * Construit le menu Mon Compte
  83. */
  84. useAccountMenuConstruct():Ref {
  85. return ref(getAccountMenu(this.$config,this.$ability,this.$store))
  86. }
  87. /**
  88. * Construit le menu Mes structure et mets à jour le state du profile d'access
  89. */
  90. useMyAccessesMenuConstruct():Ref {
  91. const menu:ItemMenu | null = getMyAccessesMenu(this.$config,this.$ability,this.$store);
  92. //Si l'utilisateur possède au moins un menu alors le menu mes structures sera accessible
  93. this.$store.commit('profile/access/setHasAccessesMenu', menu != null)
  94. return ref(menu)
  95. }
  96. /**
  97. * Construit le menu Changement d'utilisateur et mets à jour le state du profile d'access
  98. */
  99. useMyFamilyMenuConstruct():Ref {
  100. const menu:ItemMenu | null = getMyFamilyMenu(this.$config,this.$ability,this.$store);
  101. //Si l'utilisateur possède au moins un menu alors le menu changement d'utilisateur sera accessible
  102. this.$store.commit('profile/access/setHasFamilyMenu', menu != null)
  103. return ref(menu)
  104. }
  105. /**
  106. * Construit le menu site internet du header
  107. */
  108. useWebSiteMenuConstruct():Ref {
  109. return ref(getWebsiteMenu(this.$config,this.$ability,this.$store).getHeaderMenu())
  110. }
  111. }
  112. export const $useMenu = new Menu()