35 lines
601 B
Vue
35 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>
|