Skip to content

Commit 42916ff

Browse files
committed
refactor: merge CSidebarNavItem and CSidebarNavLink
1 parent 28ce6b0 commit 42916ff

File tree

6 files changed

+81
-111
lines changed

6 files changed

+81
-111
lines changed

src/components/index.d.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -493,16 +493,13 @@ export declare class CSidebarNavDropdown extends Vue {
493493
show: boolean
494494
}
495495

496-
export declare class CSidebarNavItem extends Vue {}
497-
498-
export declare class CSidebarNavLink extends CLink {
496+
export declare class CSidebarNavItem extends CLink {
499497
name: string
500498
icon: [string, object]
501499
fontIcon: string
502500
badge: object
503-
url: string
501+
addLinkClasses: string
504502
label: boolean
505-
inNavItem: boolean
506503
}
507504

508505
export declare class CSidebarNavTitle extends Vue {}
Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,82 @@
11
<template>
22
<li class="c-sidebar-nav-item">
3-
<slot></slot>
3+
<slot>
4+
<CLink
5+
:class="linkClasses"
6+
v-bind="computedLinkProps"
7+
@click.native="click"
8+
>
9+
<CIcon v-if="icon" v-bind="computedIcon"/>
10+
<i v-if="fontIcon" :class="['c-sidebar-nav-icon', fontIcon]"/>
11+
{{name}}
12+
<CBadge
13+
v-if="badge"
14+
v-bind="Object.assign({}, badge, { text: null })"
15+
>
16+
{{badge.text}}
17+
</CBadge>
18+
</CLink>
19+
</slot>
420
</li>
521
</template>
622

723
<script>
24+
import CLink, { props as linkProps } from '../link/CLink'
25+
import CBadge from '../badge/CBadge'
26+
import CIcon from '@coreui/icons-vue/CIcon.vue'
27+
28+
const props = Object.assign({}, linkProps, {
29+
name: String,
30+
icon: [String, Object],
31+
fontIcon: String,
32+
badge: Object,
33+
addLinkClasses: [String, Array, Object],
34+
label: Boolean
35+
})
36+
837
export default {
9-
name: 'CSidebarNavItem'
38+
name: 'CSidebarNavItem',
39+
components: {
40+
CLink,
41+
CBadge,
42+
CIcon
43+
},
44+
props,
45+
computed: {
46+
linkProps () {
47+
return Object.keys(linkProps).reduce((props, key) => {
48+
props[key] = this[key]
49+
return props
50+
}, {})
51+
},
52+
addedLinkProps () {
53+
return this.$options.propsData.exact === undefined ? { exact: true } : {}
54+
},
55+
computedLinkProps () {
56+
return Object.assign(this.linkProps, this.addedLinkProps)
57+
},
58+
linkClasses () {
59+
return [
60+
this.label ? 'c-sidebar-nav-label' : 'c-sidebar-nav-link',
61+
this.addLinkClasses
62+
]
63+
},
64+
computedIcon () {
65+
if (typeof this.icon === 'object') {
66+
return Object.assign(
67+
{ customClasses: 'c-sidebar-nav-icon' },
68+
this.icon
69+
)
70+
} else {
71+
return { customClasses: 'c-sidebar-nav-icon', name: this.icon }
72+
}
73+
}
74+
},
75+
methods: {
76+
click (e) {
77+
this.$emit('link-clicked', e)
78+
}
79+
}
1080
}
1181
</script>
82+

src/components/sidebar/CSidebarNavLink.vue

Lines changed: 0 additions & 98 deletions
This file was deleted.

src/components/sidebar/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import CSidebarMinimizer from './CSidebarMinimizer'
88
import CSidebarNav from './CSidebarNav'
99
import CSidebarNavDivider from './CSidebarNavDivider'
1010
import CSidebarNavDropdown from './CSidebarNavDropdown'
11+
import CSidebarNavGenerator from './CSidebarNavGenerator'
1112
import CSidebarNavItem from './CSidebarNavItem'
12-
import CSidebarNavLink from './CSidebarNavLink'
1313
import CSidebarNavTitle from './CSidebarNavTitle'
1414

1515
export {
@@ -23,7 +23,7 @@ export {
2323
CSidebarNav,
2424
CSidebarNavDivider,
2525
CSidebarNavDropdown,
26+
CSidebarNavGenerator,
2627
CSidebarNavItem,
27-
CSidebarNavLink,
2828
CSidebarNavTitle
2929
}

src/components/sidebar/tests/CSidebarNavLink.spec.js renamed to src/components/sidebar/tests/CSidebarNavItem.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { mount } from '@vue/test-utils'
2-
import Component from '../CSidebarNavLink'
2+
import Component from '../CSidebarNavItem'
33

4-
const ComponentName = 'CSidebarNavLink'
4+
const ComponentName = 'CSidebarNavItem'
55
const wrapper = mount(Component, {
66
attachToDocument: true,
77
propsData: {

src/components/sidebar/tests/__snapshots__/CSidebarNavLink.spec.js.snap renamed to src/components/sidebar/tests/__snapshots__/CSidebarNavItem.spec.js.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`CSidebarNavLink.vue renders correctly 1`] = `
3+
exports[`CSidebarNavItem.vue renders correctly 1`] = `
44
<li
55
class="c-sidebar-nav-item"
66
id="link"
@@ -31,7 +31,7 @@ exports[`CSidebarNavLink.vue renders correctly 1`] = `
3131
</li>
3232
`;
3333

34-
exports[`CSidebarNavLink.vue renders correctly in label mode 1`] = `
34+
exports[`CSidebarNavItem.vue renders correctly in label mode 1`] = `
3535
<li
3636
class="c-sidebar-nav-item"
3737
id="link"

0 commit comments

Comments
 (0)