pp-planer/resources/js/Components/Blocks/ModerationBlock.vue
Thorsten Bus 32e9577d4d feat(ui): redesign slide grid with larger previews and add collapsible JSON log viewer
- Slide grid now 1-2-3 columns (4x larger thumbnails)
- Delete button left, fullscreen right, always visible (no hover)
- Upload area appears inline as last grid item (no side-by-side layout)
- SlideUploader supports inline mode for grid integration
- Add recursive collapsible JsonTreeViewer component (no external deps)
- Replace raw JSON pre tags in API logs with tree viewer
2026-03-02 14:10:50 +01:00

80 lines
2.1 KiB
Vue

<script setup>
import { ref, computed } from 'vue'
import SlideUploader from '@/Components/SlideUploader.vue'
import SlideGrid from '@/Components/SlideGrid.vue'
const props = defineProps({
serviceId: {
type: Number,
required: true,
},
slides: {
type: Array,
default: () => [],
},
})
const emit = defineEmits(['slides-updated'])
// Filter slides to only show moderation slides for this service
const moderationSlides = computed(() => {
return props.slides.filter(
(slide) => slide.type === 'moderation' && slide.service_id === props.serviceId
)
})
function handleSlideUploaded() {
emit('slides-updated')
}
function handleSlideDeleted() {
emit('slides-updated')
}
function handleSlideUpdated() {
emit('slides-updated')
}
</script>
<template>
<div data-testid="moderation-block" class="moderation-block space-y-6">
<!-- Block header -->
<div class="border-b border-gray-200 pb-4">
<h3 class="text-lg font-semibold text-gray-900">
Moderationsfolien
</h3>
<p class="mt-1 text-sm text-gray-500">
Folien für diesen Gottesdienst
</p>
</div>
<!-- Slide grid with inline upload card -->
<SlideGrid
data-testid="moderation-block-grid"
:slides="moderationSlides"
type="moderation"
:show-expire-date="false"
:show-uploader="true"
@deleted="handleSlideDeleted"
@updated="handleSlideUpdated"
>
<template #upload-card>
<SlideUploader
data-testid="moderation-block-uploader"
type="moderation"
:service-id="serviceId"
:show-expire-date="false"
:inline="true"
@uploaded="handleSlideUploaded"
/>
</template>
</SlideGrid>
</div>
</template>
<style scoped>
.moderation-block {
/* Component-specific styles if needed */
}
</style>