layout.d.ts 959 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import type { MENU_LINK_TYPE } from '~/types/enum/layout'
  2. import type { LINK_TARGET } from '~/types/enum/enums'
  3. interface IconItem {
  4. name?: string
  5. avatarId?: number | null
  6. avatarByDefault?: string
  7. }
  8. /**
  9. * Entrée d'un menu, correspondant à un lien de navigation
  10. */
  11. interface MenuItem {
  12. label: string
  13. icon?: IconItem
  14. to?: string
  15. /** Type de lien (interne, externe, v1) */
  16. type: MENU_LINK_TYPE
  17. avatar?: number
  18. /** Correspond à la page actuelle */
  19. active: boolean
  20. /** Définit l'attribut 'target' du lien */
  21. target?: LINK_TARGET
  22. }
  23. /**
  24. * Sous-menu, regroupant d'autres MenuItem et/ou MenuGroup
  25. */
  26. interface MenuGroup {
  27. label: string
  28. icon?: IconItem
  29. children?: MenuItems
  30. actions?: MenuItems
  31. target?: LINK_TARGET
  32. }
  33. type MenuItems = Array<MenuItem | MenuGroup>
  34. /**
  35. * Service responsable de la génération d'un menu
  36. */
  37. interface MenuBuilder {
  38. getMenuName: () => string
  39. build: () => MenuItem | MenuGroup | null
  40. }