123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <script>
  2. import Ripple from 'primevue/ripple'
  3. import { Link } from '@inertiajs/inertia-vue3'
  4. export default {
  5. name: 'Menuitem',
  6. inheritAttrs: false,
  7. components: {
  8. Link,
  9. },
  10. emits: ['click'],
  11. props: {
  12. item: null,
  13. template: null,
  14. exact: null,
  15. },
  16. methods: {
  17. onClick(event, navigate) {
  18. this.$emit('click', {
  19. originalEvent: event,
  20. item: this.item,
  21. navigate: navigate,
  22. })
  23. },
  24. linkClass(item) {
  25. return [
  26. 'p-menuitem-link',
  27. {
  28. 'p-disabled': this.disabled(item),
  29. },
  30. ]
  31. },
  32. visible() {
  33. return typeof this.item.visible === 'function'
  34. ? this.item.visible()
  35. : this.item.visible !== false
  36. },
  37. disabled(item) {
  38. return typeof item.disabled === 'function'
  39. ? item.disabled()
  40. : item.disabled
  41. },
  42. label() {
  43. return typeof this.item.label === 'function'
  44. ? this.item.label()
  45. : this.item.label
  46. },
  47. },
  48. computed: {
  49. containerClass() {
  50. return ['p-menuitem', this.item.class]
  51. },
  52. },
  53. directives: {
  54. ripple: Ripple,
  55. },
  56. }
  57. </script>
  58. <template>
  59. <li :class="containerClass" role="none" :style="item.style" v-if="visible()">
  60. <template v-if="!template">
  61. <Link
  62. v-if="item.to && !disabled(item)"
  63. v-ripple
  64. role="menuitem"
  65. :href="item.to"
  66. :class="linkClass(item)"
  67. @click="onClick($event, navigate)"
  68. >
  69. <span :class="['p-menuitem-icon', item.icon]"></span>
  70. <span class="p-menuitem-text">{{ label() }}</span>
  71. </Link>
  72. <a
  73. v-else
  74. :href="item.url"
  75. :class="linkClass(item)"
  76. @click="onClick"
  77. :target="item.target"
  78. role="menuitem"
  79. :tabindex="disabled(item) ? null : '0'"
  80. v-ripple
  81. >
  82. <span :class="['p-menuitem-icon', item.icon]"></span>
  83. <span class="p-menuitem-text">{{ label() }}</span>
  84. </a>
  85. </template>
  86. <component v-else :is="template" :item="item"></component>
  87. </li>
  88. </template>