|
<template> |
|
<div class="element-style-panel"> |
|
<component :is="currentPanelComponent"></component> |
|
</div> |
|
</template> |
|
|
|
<script lang="ts" setup> |
|
import { computed } from 'vue' |
|
import { storeToRefs } from 'pinia' |
|
import { useMainStore } from '@/store' |
|
import { ElementTypes } from '@/types/slides' |
|
|
|
import TextStylePanel from './TextStylePanel.vue' |
|
import ImageStylePanel from './ImageStylePanel.vue' |
|
import ShapeStylePanel from './ShapeStylePanel.vue' |
|
import LineStylePanel from './LineStylePanel.vue' |
|
import ChartStylePanel from './ChartStylePanel/index.vue' |
|
import TableStylePanel from './TableStylePanel.vue' |
|
import LatexStylePanel from './LatexStylePanel.vue' |
|
import VideoStylePanel from './VideoStylePanel.vue' |
|
import AudioStylePanel from './AudioStylePanel.vue' |
|
|
|
const panelMap = { |
|
[ElementTypes.TEXT]: TextStylePanel, |
|
[ElementTypes.IMAGE]: ImageStylePanel, |
|
[ElementTypes.SHAPE]: ShapeStylePanel, |
|
[ElementTypes.LINE]: LineStylePanel, |
|
[ElementTypes.CHART]: ChartStylePanel, |
|
[ElementTypes.TABLE]: TableStylePanel, |
|
[ElementTypes.LATEX]: LatexStylePanel, |
|
[ElementTypes.VIDEO]: VideoStylePanel, |
|
[ElementTypes.AUDIO]: AudioStylePanel, |
|
} |
|
|
|
const { handleElement } = storeToRefs(useMainStore()) |
|
|
|
const currentPanelComponent = computed<unknown>(() => { |
|
return handleElement.value ? (panelMap[handleElement.value.type] || null) : null |
|
}) |
|
</script> |