Event-Liste: Termine nach Monaten gruppiert mit Überschriften

Termine werden jetzt unter Monats-Headern (z.B. "März 2026", "April 2026")
gruppiert dargestellt. Die Event-Karten bleiben unverändert, werden aber
innerhalb der Monatsblöcke organisiert. Monatsnamen sind lokalisiert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Rhino
2026-03-03 10:03:11 +01:00
parent 83271a1e92
commit 2f30bcc87d

View File

@@ -37,50 +37,59 @@
</div>
</form>
{{-- Event-Liste --}}
{{-- Event-Liste nach Monaten gruppiert --}}
@if ($events->isEmpty())
<div class="bg-white rounded-lg shadow p-6 text-center text-gray-500">
{{ __('events.no_events') }}
</div>
@else
<div class="space-y-3">
@foreach ($events as $event)
@php
$minStatus = $event->minimumsStatus();
$bgClass = match($minStatus) { true => 'bg-green-100', false => 'bg-red-100', default => 'bg-white' };
@endphp
<a href="{{ route('events.show', $event) }}" class="block {{ $bgClass }} rounded-lg shadow p-4 hover:shadow-md transition-shadow">
<div class="flex flex-col sm:flex-row sm:items-center gap-3">
<div class="flex-1 min-w-0">
<div class="flex items-center gap-2 mb-1 flex-wrap">
<x-event-type-badge :type="$event->type" />
<span class="text-xs text-gray-500">{{ $event->team->name }}</span>
@if ($event->status === \App\Enums\EventStatus::Cancelled)
<span class="inline-block px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-800">{{ __('events.cancelled_label') }}</span>
@elseif ($event->status === \App\Enums\EventStatus::Draft)
<span class="inline-block px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800">{{ __('events.draft_label') }}</span>
@endif
</div>
<h3 class="font-semibold {{ $event->status === \App\Enums\EventStatus::Cancelled ? 'line-through text-gray-400' : 'text-gray-900' }}">
{{ $event->title }}
</h3>
<p class="text-sm text-gray-600">
{{ $event->start_at->translatedFormat(__('ui.date_format')) }} {{ __('ui.clock') }}
@if ($event->end_at)
{{ $event->end_at->format('H:i') }} {{ __('ui.clock') }}
@endif
</p>
@if ($event->location_name)
<p class="text-sm text-gray-500 mt-1">{{ $event->location_name }}</p>
@php $currentMonth = null; @endphp
@foreach ($events as $event)
@php
$eventMonth = $event->start_at->translatedFormat('F Y');
$minStatus = $event->minimumsStatus();
$bgClass = match($minStatus) { true => 'bg-green-100', false => 'bg-red-100', default => 'bg-white' };
@endphp
{{-- Monats-Header --}}
@if ($eventMonth !== $currentMonth)
@php $currentMonth = $eventMonth; @endphp
<div class="{{ !$loop->first ? 'mt-6' : '' }} mb-3">
<h2 class="text-lg font-bold text-gray-800 border-b-2 border-gray-200 pb-1">{{ $eventMonth }}</h2>
</div>
@endif
<a href="{{ route('events.show', $event) }}" class="block {{ $bgClass }} rounded-lg shadow p-4 mb-3 hover:shadow-md transition-shadow">
<div class="flex flex-col sm:flex-row sm:items-center gap-3">
<div class="flex-1 min-w-0">
<div class="flex items-center gap-2 mb-1 flex-wrap">
<x-event-type-badge :type="$event->type" />
<span class="text-xs text-gray-500">{{ $event->team->name }}</span>
@if ($event->status === \App\Enums\EventStatus::Cancelled)
<span class="inline-block px-2 py-0.5 rounded text-xs font-medium bg-red-100 text-red-800">{{ __('events.cancelled_label') }}</span>
@elseif ($event->status === \App\Enums\EventStatus::Draft)
<span class="inline-block px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800">{{ __('events.draft_label') }}</span>
@endif
</div>
<div class="shrink-0">
<x-event-status-boxes :event="$event" />
</div>
<h3 class="font-semibold {{ $event->status === \App\Enums\EventStatus::Cancelled ? 'line-through text-gray-400' : 'text-gray-900' }}">
{{ $event->title }}
</h3>
<p class="text-sm text-gray-600">
{{ $event->start_at->translatedFormat(__('ui.date_format')) }} {{ __('ui.clock') }}
@if ($event->end_at)
{{ $event->end_at->format('H:i') }} {{ __('ui.clock') }}
@endif
</p>
@if ($event->location_name)
<p class="text-sm text-gray-500 mt-1">{{ $event->location_name }}</p>
@endif
</div>
</a>
@endforeach
</div>
<div class="shrink-0">
<x-event-status-boxes :event="$event" />
</div>
</div>
</a>
@endforeach
<div class="mt-6">
{{ $events->links() }}