| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import { h, defineComponent, resolveComponent } from 'vue'
- import { Link } from '@inertiajs/inertia-vue3'
-
- import nav from '@/utils/nav'
-
- const SidebarNav = defineComponent({
- props: ['url'],
- setup(props) {
- const renderItem = (item, url) => {
- if (item.items) {
- h(
- resolveComponent('CNavGroup'),
- {},
- {
- toggleContent: () => [
- h(resolveComponent('CIcon'), {
- customClassName: 'nav-icon',
- icon: item.icon,
- }),
- item.name,
- ],
- default: () => item.items.renderItem(child),
- }
- )
- }
-
- return item.to
- ? h(
- resolveComponent(item.component),
- {},
- {
- default: () =>
- h(
- Link,
- {
- href: item.to,
- class: ['nav-link', { active: url === item.to }],
- },
- {
- default: () => [
- item.icon &&
- h(resolveComponent('CIcon'), {
- customClassName: 'nav-icon',
- name: item.icon,
- }),
- item.name,
- item.badge &&
- h(
- resolveComponent('CBadge'),
- {
- class: 'ms-auto',
- color: item.badge.color,
- },
- {
- default: () => item.badge.text,
- }
- ),
- ],
- }
- ),
- }
- )
- : h(resolveComponent(item.component), {}, { default: () => item.name })
- }
-
- return () =>
- h(
- resolveComponent('CSidebarNav'),
- {},
- {
- default: () => nav.map((item) => renderItem(item, props.url)),
- }
- )
- },
- })
-
- export default SidebarNav
|