Skip to content

Commit 48d7ad1

Browse files
committed
refactor: CSidebarNavDropdown, CSidebarNavLink refactor:
- add inNavLink prop to CSidebarNavLink, - add fontIcon prop to components, - change icon generation in components, - update tests and typings
1 parent bd65e3d commit 48d7ad1

File tree

6 files changed

+58
-45
lines changed

6 files changed

+58
-45
lines changed

src/components/index.d.ts

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -491,46 +491,31 @@ export declare class CSidebarHeader extends Vue {}
491491

492492
export declare class CSidebarMinimizer extends Vue {}
493493

494-
export declare class CSidebarNav extends Vue {
495-
navItems: Array<any>
496-
}
494+
export declare class CSidebarNav extends Vue {}
497495

498496
export declare class CSidebarNavDivider extends Vue {}
499497

500498
export declare class CSidebarNavDropdown extends Vue {
501499
name: string
502500
route: string
503-
icon: string
501+
icon: [string, object]
502+
fontIcon: string
504503
show: boolean
505504
}
506505

507-
export declare class CSidebarNavItem extends Vue {
508-
item: object
509-
}
510-
511-
export declare class CSidebarNavItems extends Vue {
512-
items: Array<any>
513-
}
514-
515-
export declare class CSidebarNavLabel extends Vue {
516-
name: string
517-
url: string
518-
icon: string
519-
}
506+
export declare class CSidebarNavItem extends Vue {}
520507

521508
export declare class CSidebarNavLink extends CLink {
522509
name: string
523-
icon: [string, Array<any>, object]
510+
icon: [string, object]
511+
fontIcon: string
524512
badge: object
525513
url: string
514+
label: boolean
515+
inNavItem: boolean
526516
}
527517

528-
export declare class CSidebarNavTitle extends Vue {
529-
name: string
530-
wrapper: object
531-
}
532-
533-
export declare class CSidebarNavToggler extends Vue {}
518+
export declare class CSidebarNavTitle extends Vue {}
534519

535520
export declare class CSpinner extends Vue {
536521
grow: boolean

src/components/sidebar/CSidebarNavDropdown.vue

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<template>
22
<li :class="dropdownClasses">
3-
<a class="c-sidebar-nav-link c-sidebar-nav-dropdown-toggle" @click="handleClick">
3+
<a class="c-sidebar-nav-dropdown-toggle" @click="handleClick">
44
<CIcon v-if="icon" v-bind="computedIcon"/>
5+
<i v-if="fontIcon" :class="['c-sidebar-nav-icon', fontIcon]"></i>
56
{{name}}
67
</a>
78
<ul class="c-sidebar-nav-dropdown-items" @click="itemClicked">
@@ -11,20 +12,21 @@
1112
</template>
1213

1314
<script>
14-
// import CIcon from '@coreui/icons/vue'
15+
import CIcon from '@coreui/icons-vue/CIcon.vue'
1516
1617
export default {
1718
name:'CSidebarNavDropdown',
18-
// components: {
19-
// CIcon
20-
// },
19+
components: {
20+
CIcon
21+
},
2122
props: {
2223
name: String,
2324
route: {
2425
type: String,
2526
validator: val => val.length > 0
2627
},
2728
icon: [String, Object],
29+
fontIcon: String,
2830
show: Boolean
2931
},
3032
data () {
@@ -64,7 +66,7 @@ export default {
6466
},
6567
dropdownClasses () {
6668
return [
67-
'c-sidebar-nav-item c-sidebar-nav-dropdown',
69+
'c-sidebar-nav-dropdown',
6870
{ 'c-show': this.open }
6971
]
7072
},
@@ -75,7 +77,7 @@ export default {
7577
this.icon
7678
)
7779
} else {
78-
return { customClasses: [this.icon, 'c-sidebar-nav-icon']}
80+
return { customClasses: 'c-sidebar-nav-icon', name: this.icon }
7981
}
8082
}
8183
},

src/components/sidebar/CSidebarNavLink.vue

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<li class="c-sidebar-nav-item">
2+
<li v-if="inNavItem" class="c-sidebar-nav-item">
33
<CLink
44
:class="linkClasses"
55
v-bind="computedLinkProps"
@@ -17,27 +17,45 @@
1717
</slot>
1818
</CLink>
1919
</li>
20+
<CLink v-else>
21+
<slot>
22+
<CIcon v-if="icon" v-bind="computedIcon"/>
23+
<i v-if="fontIcon" :class="['c-sidebar-nav-icon', fontIcon]"></i>
24+
{{name}}
25+
<CBadge
26+
v-if="badge"
27+
v-bind="Object.assign({}, badge, { text: null })"
28+
>
29+
{{badge.text}}
30+
</CBadge>
31+
</slot>
32+
</CLink>
2033
</template>
2134

2235
<script>
2336
import CLink, { props as linkProps } from '../link/CLink'
2437
import CBadge from '../badge/CBadge'
25-
// import CIcon from '@coreui/icons/vue'
38+
import CIcon from '@coreui/icons-vue/CIcon.vue'
2639
2740
const props = Object.assign(linkProps, {
2841
name: String,
2942
icon: [String, Object],
43+
fontIcon: String,
3044
badge: Object,
3145
addLinkClasses: [String, Array, Object],
32-
label: Boolean
46+
label: Boolean,
47+
inNavItem: {
48+
type: Boolean,
49+
default: true
50+
}
3351
})
3452
3553
export default {
3654
name: 'CSidebarNavLink',
3755
components: {
3856
CLink,
3957
CBadge,
40-
// CIcon
58+
CIcon
4159
},
4260
props,
4361
computed: {
@@ -66,7 +84,7 @@ export default {
6684
this.icon
6785
)
6886
} else {
69-
return { customClasses: [this.icon, 'c-sidebar-nav-icon']}
87+
return { customClasses: 'c-sidebar-nav-icon', name: this.icon }
7088
}
7189
}
7290
},

src/components/sidebar/tests/CSidebarNavDropdown.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe(ComponentName, () => {
4343
expect(wrapper.vm.open).toBe(true)
4444
})
4545
it('changes state when clicked on toggle', () => {
46-
wrapper.find('.c-sidebar-nav-link').trigger('click')
46+
wrapper.find('.c-sidebar-nav-dropdown-toggle').trigger('click')
4747
expect(wrapper.vm.open).toBe(false)
4848
expect(wrapper.emitted()['update:show']).toBeTruthy()
4949
})

src/components/sidebar/tests/__snapshots__/CSidebarNavDropdown.spec.js.snap

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22

33
exports[`CSidebarNavDropdown renders correctly 1`] = `
44
<li
5-
class="c-sidebar-nav-item c-sidebar-nav-dropdown"
5+
class="c-sidebar-nav-dropdown"
66
>
77
<a
8-
class="c-sidebar-nav-link c-sidebar-nav-dropdown-toggle"
8+
class="c-sidebar-nav-dropdown-toggle"
99
>
10-
<cicon
11-
customclasses="cui-settings,c-sidebar-nav-icon"
10+
<svg
11+
class="c-sidebar-nav-icon"
12+
viewBox="0 0 64 64"
13+
xmlns="http://www.w3.org/2000/svg"
1214
/>
15+
16+
<!---->
1317
1418
1519

src/components/sidebar/tests/__snapshots__/CSidebarNavLink.spec.js.snap

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ exports[`CSidebarNavLink.vue renders correctly 1`] = `
1010
href="#"
1111
target="_self"
1212
>
13-
<cicon
14-
customclasses="cui-settings,c-sidebar-nav-icon"
13+
<svg
14+
class="c-sidebar-nav-icon"
15+
viewBox="0 0 64 64"
16+
xmlns="http://www.w3.org/2000/svg"
1517
/>
1618
1719
test link
@@ -37,8 +39,10 @@ exports[`CSidebarNavLink.vue renders correctly in label mode 1`] = `
3739
href="#"
3840
target="_self"
3941
>
40-
<cicon
41-
customclasses="cui-settings,c-sidebar-nav-icon"
42+
<svg
43+
class="c-sidebar-nav-icon"
44+
viewBox="0 0 64 64"
45+
xmlns="http://www.w3.org/2000/svg"
4246
/>
4347
4448
test link

0 commit comments

Comments
 (0)