communicationMenuBuilder.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import AbstractMenuBuilder from '~/services/menuBuilder/abstractMenuBuilder'
  2. import {MENU_LINK_TYPE, MenuGroup, MenuItem, MenuItems} from "~/types/menus";
  3. /**
  4. * Menu Communication
  5. */
  6. export default class CommunicationMenuBuilder extends AbstractMenuBuilder {
  7. name() {
  8. return 'Communication'
  9. }
  10. /**
  11. * Construit le menu Communication ou null si aucune page accessible
  12. */
  13. build (): MenuItem | MenuGroup | null {
  14. const children: MenuItems = []
  15. if (this.ability.can('display', 'inbox_page')) {
  16. children.push(this.createItem('inbox', {name: 'fas fa-inbox'}, '/messages/list/', MENU_LINK_TYPE.V1))
  17. }
  18. if (this.ability.can('display', 'message_send_page')) {
  19. children.push(this.createItem('message_send', {name: 'fas fa-paper-plane'}, '/messagessends/list/', MENU_LINK_TYPE.V1))
  20. }
  21. if (this.ability.can('display', 'message_templates_page')) {
  22. children.push(this.createItem('message_templates', {name: 'fas fa-edit'}, '/templates/list/', MENU_LINK_TYPE.V1))
  23. }
  24. if (children.length > 1) {
  25. // Plusieurs éléments, on retourne un groupe
  26. return this.createGroup('communication', {name: 'fas fa-comments'}, children)
  27. }
  28. else if (children.length === 1) {
  29. // Un seul élément, on retourne cet élément seul
  30. return children[0]
  31. }
  32. return null
  33. }
  34. }