Skip to content

Commit 3bfcd27

Browse files
authored
Merge pull request #410 from kwiksilver3441/setup
BAccordion & item to script setup
2 parents ee15476 + 6df5df7 commit 3bfcd27

File tree

5 files changed

+57
-67
lines changed

5 files changed

+57
-67
lines changed

src/BootstrapVue.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import {createBreadcrumb} from './composables/useBreadcrumb'
77
import './styles/styles.scss'
88

99
// export available components
10-
export {default as BAccordion} from './components/BAccordion.vue'
11-
export {default as BAccordionItem} from './components/BAccordionItem.vue'
10+
export {default as BAccordion} from './components/BAccordion/BAccordion.vue'
11+
export {default as BAccordionItem} from './components/BAccordion/BAccordionItem.vue'
1212
export {default as BAlert} from './components/BAlert.vue'
1313
export {default as BAvatar} from './components/BAvatar/BAvatar.vue'
1414
export {default as BAvatarGroup} from './components/BAvatar/BAvatarGroup.vue'

src/components/BAccordion.vue

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<template>
2+
<div :id="computedId" class="accordion" :class="classes">
3+
<slot />
4+
</div>
5+
</template>
6+
7+
<script setup lang="ts">
8+
// https://vuejs.org/guide/typescript/composition-api.html#syntax-limitations , may be possible in a future release
9+
// import type {BAccordionProps} from '@/types/components'
10+
import {computed, InjectionKey, provide} from 'vue'
11+
import useId from '@/composables/useId'
12+
13+
interface BAccordionProps {
14+
flush?: boolean
15+
free?: boolean
16+
id?: string
17+
}
18+
19+
const props = withDefaults(defineProps<BAccordionProps>(), {
20+
flush: false,
21+
free: false,
22+
id: undefined,
23+
})
24+
25+
const computedId = useId(props.id, 'accordion')
26+
27+
const classes = computed(() => ({
28+
'accordion-flush': props.flush,
29+
}))
30+
31+
if (!props.free) {
32+
provide(injectionKey, computedId.value.toString())
33+
}
34+
</script>
35+
36+
<script lang="ts">
37+
export const injectionKey: InjectionKey<string> = Symbol()
38+
</script>

src/components/BAccordionItem.vue renamed to src/components/BAccordion/BAccordionItem.vue

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,22 @@
2828
</div>
2929
</template>
3030

31-
<script lang="ts">
32-
import {defineComponent, inject} from 'vue'
31+
<script setup lang="ts">
32+
import {inject} from 'vue'
33+
import BCollapse from '../BCollapse.vue'
34+
import vBToggle from '@/directives/BToggle'
35+
import useId from '@/composables/useId'
3336
import {injectionKey} from './BAccordion.vue'
34-
import BCollapse from './BCollapse.vue'
35-
import BToggle from '../directives/BToggle'
36-
import useId from '../composables/useId'
37+
// import type {BAccordionItemProps} from '@/types/components'
3738
38-
export default defineComponent({
39-
name: 'BAccordionItem',
40-
components: {
41-
BCollapse,
42-
},
43-
directives: {
44-
BToggle,
45-
},
46-
props: {
47-
title: {type: String},
48-
id: {type: String},
49-
visible: {type: Boolean, default: false},
50-
},
51-
setup(props) {
52-
const computedId = useId(props.id, 'accordion_item')
53-
const parent = inject(injectionKey, '')
39+
interface BAccordionItemProps {
40+
id: string
41+
title: string
42+
visible?: boolean
43+
}
5444
55-
return {
56-
parent,
57-
computedId,
58-
}
59-
},
60-
})
45+
const props = withDefaults(defineProps<BAccordionItemProps>(), {visible: false})
46+
47+
const computedId = useId(props.id, 'accordion_item')
48+
const parent = inject(injectionKey, '')
6149
</script>

src/components/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import BAccordion from './BAccordion.vue'
2-
import BAccordionItem from './BAccordionItem.vue'
1+
import BAccordion from './BAccordion/BAccordion.vue'
2+
import BAccordionItem from './BAccordion/BAccordionItem.vue'
33
import BAlert from './BAlert.vue'
44
import BAvatar from './BAvatar/BAvatar.vue'
55
import BAvatarGroup from './BAvatar/BAvatarGroup.vue'

0 commit comments

Comments
 (0)