mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-24 01:03:50 +02:00
83 lines
2.6 KiB
Vue
83 lines
2.6 KiB
Vue
<template>
|
|
<div class="relative h-full min-h-[180px]">
|
|
<div
|
|
v-if="isEditing"
|
|
class="flex h-full gap-2"
|
|
:class="isVertical ? 'flex-col' : 'flex-row'">
|
|
<DashboardPanel
|
|
v-for="(panelKey, panelIndex) in row.panels"
|
|
:key="panelIndex"
|
|
:panel-key="panelKey"
|
|
:is-editing="true"
|
|
:class="panelEditClass"
|
|
@select="(key) => emit('update-panel', rowIndex, panelIndex, key)" />
|
|
|
|
<Button
|
|
variant="ghost"
|
|
size="icon-sm"
|
|
class="absolute right-1 top-2 z-20 bg-background/80"
|
|
@click="emit('remove-row', rowIndex)">
|
|
<X class="size-4" />
|
|
</Button>
|
|
</div>
|
|
|
|
<ResizablePanelGroup
|
|
v-else-if="row.panels.length === 2"
|
|
:direction="isVertical ? 'vertical' : 'horizontal'"
|
|
:auto-save-id="`dashboard-${dashboardId}-row-${rowIndex}`"
|
|
class="h-full min-h-[180px]">
|
|
<ResizablePanel :default-size="50" :min-size="20">
|
|
<DashboardPanel :panel-key="row.panels[0]" class="h-full" />
|
|
</ResizablePanel>
|
|
<ResizableHandle />
|
|
<ResizablePanel :default-size="50" :min-size="20">
|
|
<DashboardPanel :panel-key="row.panels[1]" class="h-full" />
|
|
</ResizablePanel>
|
|
</ResizablePanelGroup>
|
|
|
|
<div v-else class="h-full">
|
|
<DashboardPanel :panel-key="row.panels[0]" class="h-full" />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed } from 'vue';
|
|
import { X } from 'lucide-vue-next';
|
|
|
|
import { Button } from '@/components/ui/button';
|
|
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';
|
|
|
|
import DashboardPanel from './DashboardPanel.vue';
|
|
|
|
const props = defineProps({
|
|
row: {
|
|
type: Object,
|
|
required: true
|
|
},
|
|
rowIndex: {
|
|
type: Number,
|
|
required: true
|
|
},
|
|
dashboardId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
isEditing: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
});
|
|
|
|
const emit = defineEmits(['update-panel', 'remove-row']);
|
|
|
|
const isVertical = computed(() => props.row.direction === 'vertical');
|
|
|
|
const panelEditClass = computed(() => {
|
|
if (props.row.panels.length === 1) {
|
|
return 'w-full';
|
|
}
|
|
return isVertical.value ? 'h-1/2' : 'w-1/2';
|
|
});
|
|
</script>
|