layout.d.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. /** Indique si l'item est à la fin d'une sous-section (bordure basse plus épaisse) */
  23. endOfSubsection?: boolean
  24. /** Sous-éléments du menu */
  25. children?: MenuItems
  26. /** Actions du menu */
  27. actions?: MenuItems
  28. /** Indique si le menu est étendu */
  29. expanded?: boolean
  30. }
  31. /**
  32. * Sous-menu, regroupant d'autres MenuItem et/ou MenuGroup
  33. */
  34. interface MenuGroup {
  35. label: string
  36. icon?: IconItem
  37. children?: MenuItems
  38. actions?: MenuItems
  39. target?: LINK_TARGET
  40. /** Lien de navigation */
  41. to?: string
  42. /** Indique si le menu est étendu */
  43. expanded?: boolean
  44. }
  45. type MenuItems = Array<MenuItem | MenuGroup>
  46. /**
  47. * Service responsable de la génération d'un menu
  48. */
  49. interface MenuBuilder {
  50. getMenuName: () => string
  51. build: () => MenuItem | MenuGroup | null
  52. }
  53. interface TreeSelectItem {
  54. id: string
  55. label: string
  56. normalizedLabel?: string
  57. value?: number | string
  58. type: 'category' | 'subcategory' | 'item'
  59. parentId?: string
  60. level: number
  61. }