Skip to content

Commit 7ea30c3

Browse files
committed
feat: added toggleable prop to navbar
1 parent 43d3b3a commit 7ea30c3

File tree

11 files changed

+84
-141
lines changed

11 files changed

+84
-141
lines changed

packages/bootstrap-vue-3/src/BootstrapVue.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,13 @@ import BLink from './components/BLink/BLink.vue'
6969
import BListGroup from './components/BListGroup/BListGroup.vue'
7070
import BListGroupItem from './components/BListGroup/BListGroupItem.vue'
7171
import BModal from './components/BModal.vue'
72-
import BNav from './components/BNav.vue'
73-
import BNavItem from './components/BNavItem.vue'
74-
import BNavItemDropdown from './components/BNavItemDropdown.vue'
72+
import BNav from './components/BNav/BNav.vue'
73+
import BNavbar from './components/BNav/BNavbar.vue'
74+
import BNavbarBrand from './components/BNav/BNavbarBrand.vue'
75+
import BNavbarNav from './components/BNav/BNavbarNav.vue'
76+
import BNavbarToggle from './components/BNav/BNavbarToggle.vue'
77+
import BNavItem from './components/BNav/BNavItem.vue'
78+
import BNavItemDropdown from './components/BNav/BNavItemDropdown.vue'
7579
import BOffcanvas from './components/BOffcanvas.vue'
7680
import BOverlay from './components/BOverlay/BOverlay.vue'
7781
import BPagination from './components/BPagination/BPagination.vue'
@@ -181,6 +185,10 @@ export {
181185
BListGroupItem,
182186
BModal,
183187
BNav,
188+
BNavbar,
189+
BNavbarBrand,
190+
BNavbarNav,
191+
BNavbarToggle,
184192
BNavItem,
185193
BNavItemDropdown,
186194
BOffcanvas,
@@ -304,6 +312,10 @@ declare module '@vue/runtime-core' {
304312
BListGroupItem: typeof BListGroupItem
305313
BModal: typeof BModal
306314
BNav: typeof BNav
315+
BNavbar: typeof BNavbar
316+
BNavbarBrand: typeof BNavbarBrand
317+
BNavbarNav: typeof BNavbarNav
318+
BNavbarToggle: typeof BNavbarToggle
307319
BNavItem: typeof BNavItem
308320
BNavItemDropdown: typeof BNavItemDropdown
309321
BOffcanvas: typeof BOffcanvas

packages/bootstrap-vue-3/src/components/BCollapse.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const emit = defineEmits<BCollapseEmits>()
5353
const element = ref<HTMLElement>()
5454
const instance = ref<Collapse>()
5555
const classes = computed(() => ({
56-
show: props.modelValue,
56+
'show': props.modelValue,
5757
'navbar-collapse': props.isNav,
5858
}))
5959

packages/bootstrap-vue-3/src/components/BNav.vue

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

packages/bootstrap-vue-3/src/components/BNav/BNavbar.vue

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,32 @@
88

99
<script setup lang="ts">
1010
import {computed} from 'vue'
11-
import {ColorVariant} from '../../types/index'
11+
import {ColorVariant, NavbarBreakpoint} from '../../types/index'
1212
1313
interface Props {
1414
variant?: ColorVariant
15+
toggleable?: NavbarBreakpoint
1516
}
1617
1718
const props = withDefaults(defineProps<Props>(), {
1819
variant: 'light',
20+
toggleable: false, // navbar never collapses
1921
})
2022
2123
const classes = computed(() => {
2224
const result: {[key: string]: boolean} = {
2325
'navbar': true,
24-
'navbar-expand-lg': true,
2526
'navbar-light': props.variant === 'light',
2627
'navbar-dark': props.variant !== 'light',
28+
'navbar-expand': props.toggleable === false, // for navbars that never collapse
2729
}
30+
31+
if (typeof props.toggleable === 'string') {
32+
result[`navbar-expand-${props.toggleable}`] = true
33+
}
34+
2835
result[`bg-${props.variant}`] = true
36+
2937
return result
3038
})
3139
</script>
32-
33-
<style scoped></style>
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
<template>
2-
<a v-if="href" :href="href" class="navbar-brand">
2+
<BLink v-if="href || to" :href="href" :to="to">
33
<slot></slot>
4-
</a>
5-
<router-link v-else-if="to" :to="to">
6-
<slot></slot>
7-
</router-link>
4+
</BLink>
85
<div v-else>
96
<slot></slot>
107
</div>
118
</template>
129

1310
<script setup lang="ts">
11+
import BLink from '../BLink/BLink.vue'
12+
import {RouteLocationRaw} from 'vue-router'
13+
1414
interface Props {
15+
tag?: 'div'
1516
href?: string
16-
to?: any
17+
to?: RouteLocationRaw
1718
}
1819
1920
defineProps<Props>()
2021
</script>
21-
22-
<style scoped></style>

packages/bootstrap-vue-3/src/components/BNav/BNavbarNav.vue

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,3 @@
55
</template>
66

77
<script setup lang="ts"></script>
8-
9-
<style scoped></style>

packages/bootstrap-vue-3/src/components/BNav/BNavbarToggle.vue

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ const classes = ref({
1818
'collapsed': true,
1919
})
2020
21-
function onButtonClicked() {
21+
const onButtonClicked = () => {
2222
classes.value.collapsed = !classes.value.collapsed
2323
2424
const el = document.getElementById(props.target)
2525
el?.classList.toggle('show')
2626
}
2727
</script>
28-
29-
<style scoped></style>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import {mount} from '@vue/test-utils'
2+
import {describe, expect, it} from 'vitest'
3+
import BNavbarBrand from './BNavbarBrand.vue'
4+
import App from '../../App.vue'
5+
import {createRouter, createWebHistory} from 'vue-router'
6+
7+
describe('navbar-brand', () => {
8+
const routes = [
9+
{
10+
path: '/',
11+
name: 'Home',
12+
component: App,
13+
},
14+
{
15+
path: '/test-route',
16+
name: 'TestRoute',
17+
component: App,
18+
},
19+
]
20+
const router = createRouter({
21+
history: createWebHistory(),
22+
routes,
23+
})
24+
it("generates a router-link tag when the 'to' prop is passed", async () => {
25+
const wrapper = mount(BNavbarBrand, {
26+
slots: {
27+
default: 'test link',
28+
},
29+
props: {
30+
to: {name: 'TestRoute'},
31+
},
32+
global: {
33+
plugins: [router],
34+
},
35+
})
36+
37+
expect(wrapper.html()).toContain('href="/test-route"')
38+
}, 5000)
39+
})

packages/bootstrap-vue-3/src/components/BNavItem.vue

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

packages/bootstrap-vue-3/src/components/BNavItemDropdown.vue

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

0 commit comments

Comments
 (0)