menu.ts 5.8 KB

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