Skip to content

Commit 8d5080a

Browse files
committed
feat: CCard simplified (named slots deleted, no default wrapper)
1 parent b3d8ee7 commit 8d5080a

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/components/Card/CCard.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
11
import { mergeData } from 'vue-functional-data-merge'
2-
import { assign } from '../../utils/object'
32
import sharedCardProps from './sharedCardProps'
43
import CCardHeader from './CCardHeader'
54
import CCardBody from './CCardBody'
65
import CCardFooter from './CCardFooter'
76

8-
const props = assign(
7+
const props = Object.assign(
98
sharedCardProps.props,
109
{
1110
header: String,
1211
body: String,
1312
footer: String,
14-
noWrapper: Boolean
13+
bodyWrapper: Boolean
1514
}
1615
)
1716
export default {
1817
functional: true,
1918
name: 'CCard',
2019
props,
2120
render (h, { props, data, slots }) {
22-
const $slots = slots()
21+
let header = h(false)
22+
let body = slots().default
23+
let footer = h(false)
2324

24-
if (!$slots.header && props.header)
25-
$slots.header = h(CCardHeader, { domProps: { innerHTML: props.header }})
25+
if (props.header)
26+
header = h(CCardHeader, { domProps: { innerHTML: props.header }})
2627

27-
if (!$slots.body && $slots.default)
28-
$slots.body = props.noWrapper ? $slots.default : h(CCardBody, $slots.default)
29-
else if (!$slots.body && !$slots.default && props.body)
30-
$slots.body = h(CCardBody, { domProps: { innerHTML: props.body }})
28+
if (body === undefined && props.body)
29+
body = h(CCardBody, { domProps: { innerHTML: props.body }})
30+
else if (props.bodyWrapper)
31+
body = h(CCardBody, body)
3132

32-
if (!$slots.footer && props.footer)
33-
$slots.footer = h(CCardFooter, { domProps: { innerHTML: props.footer }})
33+
34+
if (props.footer)
35+
footer = h(CCardFooter, { domProps: { innerHTML: props.footer }})
3436

3537
return h(
3638
props.tag || 'div',
@@ -43,7 +45,7 @@ export default {
4345
[`text-${props.textVariant}`]: Boolean(props.textVariant)
4446
}
4547
}),
46-
[ $slots.header, $slots.body, $slots.footer ]
48+
[ header, body, footer ]
4749
)
4850
}
4951
}

0 commit comments

Comments
 (0)