SubSidebar.vue 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <script setup>
  2. import { Link } from '@inertiajs/inertia-vue3'
  3. defineProps({
  4. items: Array,
  5. root: {
  6. type: Boolean,
  7. default: false,
  8. },
  9. })
  10. </script>
  11. <template>
  12. <ul v-if="items">
  13. <template v-for="(item, i) of items">
  14. <li
  15. v-if="item"
  16. :key="i"
  17. :class="[{ 'layout-menuitem-category': root }]"
  18. role="none"
  19. >
  20. <template v-if="root">
  21. <div class="layout-menuitem-root-text" :aria-label="item.label">
  22. {{ item.label }}
  23. </div>
  24. <SubSidebar :items="item.items"></SubSidebar>
  25. </template>
  26. <template v-else>
  27. <Link
  28. v-if="item.to"
  29. role="menuitem"
  30. :href="item.to"
  31. :class="[
  32. {
  33. 'router-link-active':
  34. $page.component.startsWith(item.component) ||
  35. $page.url.startsWith(item.to),
  36. 'router-link-exact-active':
  37. $page.component.startsWith(item.component) ||
  38. $page.url.startsWith(item.to),
  39. },
  40. ]"
  41. :aria-label="item.label"
  42. >
  43. <i :class="item.icon"></i>
  44. <span>{{ item.label }}</span>
  45. </Link>
  46. <a v-if="!item.to" href="#" role="menuitem" :aria-label="item.label">
  47. <i :class="item.icon"></i>
  48. <span>{{ item.label }}</span>
  49. </a>
  50. <SubSidebar :items="item.items"></SubSidebar>
  51. </template>
  52. </li>
  53. </template>
  54. </ul>
  55. </template>