pp-planer/resources/js/Components/Blocks/SermonBlock.vue

84 lines
2.2 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 sermon slides for this service
const sermonSlides = computed(() => {
return props.slides.filter(
(slide) => slide.type === 'sermon' && 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="sermon-block" class="sermon-block space-y-6">
<!-- Block header -->
<div class="border-b border-gray-200 pb-4">
<h3 class="text-lg font-semibold text-gray-900">
Predigtfolien
</h3>
<p class="mt-1 text-sm text-gray-500">
Folien für diesen Gottesdienst
</p>
</div>
<!-- Side-by-side: grid left (~70%), uploader right (~30%) -->
<div class="flex flex-col lg:flex-row-reverse gap-6">
<!-- Slide uploader -->
<div class="lg:w-1/3">
<SlideUploader
data-testid="sermon-block-uploader"
type="sermon"
:service-id="serviceId"
:show-expire-date="false"
@uploaded="handleSlideUploaded"
/>
</div>
<!-- Slide grid -->
<div class="flex-1 lg:w-2/3">
<SlideGrid
data-testid="sermon-block-grid"
:slides="sermonSlides"
type="sermon"
:show-expire-date="false"
@deleted="handleSlideDeleted"
@updated="handleSlideUpdated"
/>
</div>
</div>
</div>
</template>
<style scoped>
.sermon-block {
/* Component-specific styles if needed */
}
</style>