pp-planer/resources/js/Components/Blocks/SermonBlock.vue
Thorsten Bus 4520c1ce5f test(e2e): add data-testid attributes to all Vue components
- Add data-testid to 18 Vue components (Pages, Blocks, Features, Layouts, Primitives)
- Naming convention: {component-kebab}-{element-description}
- 98 total data-testid attributes added
- Target elements: buttons, links, inputs, modals, navigation
- No logic/styling changes - attributes only
2026-03-01 22:45:13 +01:00

77 lines
1.8 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>
<!-- Slide uploader -->
<SlideUploader
data-testid="sermon-block-uploader"
type="sermon"
:service-id="serviceId"
:show-expire-date="false"
@uploaded="handleSlideUploaded"
/>
<!-- Slide grid -->
<SlideGrid
data-testid="sermon-block-grid"
:slides="sermonSlides"
type="sermon"
:show-expire-date="false"
@deleted="handleSlideDeleted"
@updated="handleSlideUpdated"
/>
</div>
</template>
<style scoped>
.sermon-block {
/* Component-specific styles if needed */
}
</style>