Skip to content

Commit 14d068c

Browse files
committed
BTableSimple: convert from render functions to template.
1 parent 9d079da commit 14d068c

File tree

3 files changed

+59
-86
lines changed

3 files changed

+59
-86
lines changed
Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
<template>
2-
<Render />
2+
<div v-if="responsive" :class="responsiveClasses">
3+
<table role="table" :class="classes">
4+
<slot />
5+
</table>
6+
</div>
7+
<table v-else role="table" :class="classes">
8+
<slot />
9+
</table>
310
</template>
411

512
<script setup lang="ts">
6-
import {computed, h, PropType, useSlots, VNode} from 'vue'
13+
import {computed, PropType} from 'vue'
714
import type {Breakpoint, ColorVariant} from '@/types'
815
916
const props = defineProps({
@@ -21,9 +28,9 @@ const props = defineProps({
2128
tableVariant: {type: String},
2229
})
2330
24-
const slots = useSlots()
25-
2631
const classes = computed(() => [
32+
'table',
33+
'b-table',
2734
{
2835
'table-bordered': props.bordered,
2936
'table-borderless': props.borderless,
@@ -40,27 +47,10 @@ const classes = computed(() => [
4047
props.tableClass,
4148
])
4249
43-
const table = h(
44-
'table',
50+
const responsiveClasses = computed(() => [
4551
{
46-
class: ['table b-table', classes.value],
47-
role: 'table',
52+
'table-responsive': typeof props.responsive === 'boolean' && props.responsive,
53+
[`table-responsive-${props.responsive}`]: typeof props.responsive === 'string',
4854
},
49-
slots.default?.()
50-
)
51-
52-
let Render: VNode = table
53-
54-
if (props.responsive) {
55-
Render = h(
56-
'div',
57-
{
58-
class: {
59-
'table-responsive': typeof props.responsive === 'boolean' && props.responsive,
60-
[`table-responsive-${props.responsive}`]: typeof props.responsive === 'string',
61-
},
62-
},
63-
table
64-
)
65-
}
55+
])
6656
</script>

src/components/BTable/BTd.vue

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,35 @@
1-
<script lang="ts">
2-
import {computed, defineComponent, h, useSlots} from 'vue'
1+
<template>
2+
<td
3+
role="cell"
4+
:scope="scope"
5+
:class="classes"
6+
:colspan="colspan"
7+
:rowspan="rowspan"
8+
:data-label="stackedHeading"
9+
>
10+
<div v-if="stackedHeading">
11+
<slot />
12+
</div>
13+
<slot v-else />
14+
</td>
15+
</template>
316

4-
export default defineComponent({
5-
props: {
6-
colspan: {type: [String, Number]},
7-
rowspan: {type: [String, Number]},
8-
stackedHeading: {type: String},
9-
stickyColumn: {type: Boolean, default: false},
10-
variant: {type: String},
11-
},
17+
<script setup lang="ts">
18+
import {computed} from 'vue'
1219
13-
setup(props) {
14-
const slots = useSlots()
15-
16-
const classes = computed(() => ({
17-
[`table-${props.variant}`]: props.variant,
18-
'b-table-sticky-column': props.stickyColumn,
19-
'table-b-table-default': props.stickyColumn && !props.variant,
20-
}))
21-
22-
const scope = computed(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))
20+
const props = defineProps({
21+
colspan: {type: [String, Number]},
22+
rowspan: {type: [String, Number]},
23+
stackedHeading: {type: String},
24+
stickyColumn: {type: Boolean, default: false},
25+
variant: {type: String},
26+
})
2327
24-
const children = computed(() =>
25-
props.stackedHeading ? h('div', slots.default?.()) : slots.default?.()
26-
)
28+
const classes = computed(() => ({
29+
[`table-${props.variant}`]: props.variant,
30+
'b-table-sticky-column': props.stickyColumn,
31+
'table-b-table-default': props.stickyColumn && !props.variant,
32+
}))
2733
28-
return () =>
29-
h(
30-
'td',
31-
{
32-
'role': 'cell',
33-
'scope': scope.value,
34-
'class': classes.value,
35-
'colspan': props.colspan,
36-
'rowspan': props.rowspan,
37-
'data-label': props.stackedHeading,
38-
},
39-
children.value
40-
)
41-
},
42-
})
34+
const scope = computed(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))
4335
</script>

src/components/BTable/BTh.vue

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
11
<template>
2-
<Render />
2+
<th
3+
role="columnheader"
4+
:scope="scope"
5+
:class="classes"
6+
:colspan="colspan"
7+
:rowspan="rowspan"
8+
:data-label="stackedHeading"
9+
>
10+
<div v-if="stackedHeading">
11+
<slot />
12+
</div>
13+
<slot v-else />
14+
</th>
315
</template>
416

517
<script setup lang="ts">
6-
import {computed, h, useSlots, VNode} from 'vue'
18+
import {computed} from 'vue'
719
820
const props = defineProps({
921
colspan: {type: [String, Number]},
@@ -13,32 +25,11 @@ const props = defineProps({
1325
variant: {type: String},
1426
})
1527
16-
const slots = useSlots()
17-
1828
const classes = computed(() => ({
1929
[`table-${props.variant}`]: props.variant,
2030
'b-table-sticky-column': props.stickyColumn,
2131
'table-b-table-default': props.stickyColumn && !props.variant,
2232
}))
2333
2434
const scope = computed(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))
25-
26-
let content: VNode[] | VNode | undefined = slots.default?.()
27-
28-
if (props.stackedHeading) {
29-
content = h('div', content)
30-
}
31-
32-
const Render = h(
33-
'th',
34-
{
35-
'role': 'columnheader',
36-
'scope': scope.value,
37-
'class': classes.value,
38-
'colspan': props.colspan,
39-
'rowspan': props.rowspan,
40-
'data-label': props.stackedHeading,
41-
},
42-
content
43-
)
4435
</script>

0 commit comments

Comments
 (0)