36 lines
601 B
Vue
36 lines
601 B
Vue
|
<script>
|
||
|
/**
|
||
|
* Allows to toggle slots based on an array of slot names.
|
||
|
*/
|
||
|
export default {
|
||
|
name: 'SlotSwitch',
|
||
|
|
||
|
props: {
|
||
|
activeSlotNames: {
|
||
|
type: Array,
|
||
|
required: true,
|
||
|
},
|
||
|
|
||
|
tagName: {
|
||
|
type: String,
|
||
|
required: false,
|
||
|
default: 'div',
|
||
|
},
|
||
|
},
|
||
|
|
||
|
computed: {
|
||
|
allSlotNames() {
|
||
|
return Object.keys(this.$slots);
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<template>
|
||
|
<component :is="tagName">
|
||
|
<template v-for="slotName in allSlotNames">
|
||
|
<slot v-if="activeSlotNames.includes(slotName)" :name="slotName"></slot>
|
||
|
</template>
|
||
|
</component>
|
||
|
</template>
|