1- import { defineComponent , h , resolveComponent } from " vue" ;
2- import { RouterLink } from " vue-router" ;
1+ import { defineComponent , h , resolveComponent } from ' vue'
2+ import { RouterLink } from ' vue-router'
33
4- import { CSidebarNav , CNavItem , CNavGroup , CNavTitle } from " @coreui/vue" ;
5- import nav from " @/_nav.js" ;
4+ import { CSidebarNav , CNavItem , CNavGroup , CNavTitle } from ' @coreui/vue'
5+ import nav from ' @/_nav.js'
66
77const AppSidebarNav = defineComponent ( {
8- name : " AppSidebarNav" ,
8+ name : ' AppSidebarNav' ,
99 components : {
1010 CNavItem,
1111 CNavGroup,
1212 CNavTitle,
1313 } ,
1414 setup ( ) {
15- const singleItem = ( item ) =>
16- item . to
15+ const renderItem = ( item ) => {
16+ if ( item . children ) {
17+ return h (
18+ RouterLink ,
19+ {
20+ to : item . route ,
21+ custom : true ,
22+ } ,
23+ {
24+ default : ( props ) =>
25+ h (
26+ resolveComponent ( 'CNavGroup' ) ,
27+ {
28+ visible : props . isActive ,
29+ } ,
30+ {
31+ togglerContent : ( ) => [
32+ h ( resolveComponent ( 'CIcon' ) , {
33+ customClassName : 'nav-icon' ,
34+ name : item . icon ,
35+ } ) ,
36+ item . name ,
37+ ] ,
38+ default : ( ) =>
39+ item . children . map ( ( child ) => renderItem ( child ) ) ,
40+ } ,
41+ ) ,
42+ } ,
43+ )
44+ }
45+
46+ return item . to
1747 ? h (
1848 RouterLink ,
1949 {
@@ -27,63 +57,49 @@ const AppSidebarNav = defineComponent({
2757 {
2858 active : props . isActive ,
2959 href : props . href ,
30- icon : "cil-speedometer" ,
3160 onClick : ( ) => props . navigate ( ) ,
3261 } ,
33- [
34- item . icon &&
35- h ( resolveComponent ( "CIcon" ) , {
36- customClassName : "nav-icon" ,
37- name : item . icon ,
38- } ) ,
39- item . name ,
40- item . badge &&
41- h ( resolveComponent ( "CBadge" ) , {
42- class : 'ms-auto' ,
43- color : item . badge . color ,
44- } , item . badge . text ) ,
45- ]
62+ {
63+ default : ( ) => [
64+ item . icon &&
65+ h ( resolveComponent ( 'CIcon' ) , {
66+ customClassName : 'nav-icon' ,
67+ name : item . icon ,
68+ } ) ,
69+ item . name ,
70+ item . badge &&
71+ h (
72+ resolveComponent ( 'CBadge' ) ,
73+ {
74+ class : 'ms-auto' ,
75+ color : item . badge . color ,
76+ } ,
77+ {
78+ default : ( ) => item . badge . text ,
79+ }
80+ ) ,
81+ ] ,
82+ } ,
4683 ) ,
47- }
84+ } ,
4885 )
49- : h ( resolveComponent ( item . _name ) , { } , item . name ) ;
50-
51- const group = ( item ) =>
52- h (
53- RouterLink ,
54- {
55- to : item . route ,
56- custom : true ,
57- } ,
58- {
59- default : ( props ) =>
60- h (
61- resolveComponent ( "CNavGroup" ) ,
62- {
63- visible : props . isActive
64- } ,
65- {
66- togglerContent : ( ) => [
67- h ( resolveComponent ( "CIcon" ) , {
68- customClassName : "nav-icon" ,
69- name : item . icon ,
70- } ) ,
71- item . name ,
72- ] ,
73- default : ( ) => item . children . map ( ( child ) => singleItem ( child ) ) ,
74- }
75- ) ,
76- }
77- ) ;
86+ : h (
87+ resolveComponent ( item . _name ) ,
88+ { } ,
89+ {
90+ default : ( ) => item . name ,
91+ } ,
92+ )
93+ }
7894
7995 return ( ) =>
8096 h (
8197 CSidebarNav ,
8298 { } ,
83- nav . map ( ( item ) =>
84- typeof item . children === "undefined" ? singleItem ( item ) : group ( item )
85- )
86- ) ;
99+ {
100+ default : ( ) => nav . map ( ( item ) => renderItem ( item ) ) ,
101+ } ,
102+ )
87103 } ,
88- } ) ;
89- export { AppSidebarNav } ;
104+ } )
105+ export { AppSidebarNav }
0 commit comments