layout.d.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import {MENU_LINK_TYPE} from "~/types/enum/layout";
  2. interface IconItem {
  3. name?: string
  4. // TODO: les avatars sont ils encore utiles?
  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. /** Modifie l'affichage de l'item pour signifier une action (ex: se déconnecter) */
  18. isAction: boolean
  19. // TODO: revoir l'utilité de avatar?
  20. avatar?: number
  21. /** Correspond à la page actuelle */
  22. active: boolean
  23. }
  24. /**
  25. * Sous-menu, regroupant d'autres MenuItem et/ou MenuGroup
  26. */
  27. interface MenuGroup {
  28. label: string
  29. icon?: IconItem
  30. children?: MenuItems
  31. /** Le sous-menu est-il déplié ou non */
  32. expanded: boolean
  33. }
  34. type MenuItems = Array<MenuItem | MenuGroup>
  35. /**
  36. * Service responsable de la génération d'un menu
  37. */
  38. interface MenuBuilder {
  39. build: () => MenuItem | MenuGroup | null
  40. }