Skip to content

Commit 5864fab

Browse files
committed
refactor: CMedia refactor
- Added optional CImage to aside slot, controlled by asideImage prop, - Render function replaced with template, - Added props for class declaration, - Aside right prop controlled by 'flex-row-reverse' class
1 parent 60bacaf commit 5864fab

File tree

1 file changed

+39
-26
lines changed

1 file changed

+39
-26
lines changed

src/components/Media/CMedia.vue

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,48 @@
1-
<script>
2-
import { mergeData } from 'vue-functional-data-merge'
1+
<template>
2+
<div :class="mediaClasses">
3+
<div :class="computedAsideClasses" >
4+
<slot name="aside">
5+
<CImage
6+
v-if="asideImage"
7+
v-bind="asideImage"
8+
/>
9+
</slot>
10+
</div>
11+
<div :class="computedBodyClasses">
12+
<slot></slot>
13+
</div>
14+
</div>
15+
</template>
16+
317

18+
<script>
19+
import CImage from '../Image/CImage'
420
export default {
5-
functional: true,
621
name: 'CMedia',
722
props: {
8-
asideClasses: String,
23+
asidePositionClasses: String,
24+
addAsideClasses: String,
25+
addBodyClasses: String,
926
asideRight: Boolean,
27+
asideImage: Object
1028
},
11-
render (h, { props, data, slots }) {
12-
let childNodes = []
13-
const $slots = slots()
14-
const asideClasses = props.asideClasses ?
15-
props.asideClasses :
16-
props.asideRight ?
17-
'ml-3 align-self-start' :
18-
'mr-3 align-self-start'
19-
20-
const aside = h(
21-
'div',
22-
{ class: asideClasses },
23-
$slots.aside ||
24-
[h('div', { class: 'bg-secondary', style: 'width:64px;height:64px;'})]
25-
)
26-
const body = h(
27-
'div',
28-
{ staticClass: 'media-body' },
29-
$slots.default
30-
)
31-
props.asideRight ? childNodes.push(body, aside) : childNodes.push(aside, body)
32-
return h('div', mergeData(data, { staticClass: 'media' }), childNodes)
29+
computed: {
30+
computedAsidePositionClasses () {
31+
return this.asidePositionClasses ||
32+
`m${this.asideRight? 'l' : 'r' }-3 align-self-start`
33+
},
34+
computedAsideClasses () {
35+
return [this.computedAsidePositionClasses, this.addAsideClasses]
36+
},
37+
computedBodyClasses () {
38+
return [ 'media-body', this.addBodyClasses ]
39+
},
40+
mediaClasses () {
41+
return [
42+
'media',
43+
{ 'd-flex flex-row-reverse': this.asideRight }
44+
]
45+
}
3346
}
3447
}
3548
</script>

0 commit comments

Comments
 (0)