@php
- $logClass = match ($log->to_status?->value) {
- 'published' => 'ok',
- 'review' => 'warn',
- 'rejected' => 'err',
- default => 'hub',
- };
+ $logClass = $log->to_status?->badgeClass() ?? 'muted';
@endphp
{{ $log->to_status?->label() ?? $log->to_status }}
@if ($log->from_status)
diff --git a/resources/views/livewire/customer/dashboard.blade.php b/resources/views/livewire/customer/dashboard.blade.php
index 7c9b7955..0725c9eb 100644
--- a/resources/views/livewire/customer/dashboard.blade.php
+++ b/resources/views/livewire/customer/dashboard.blade.php
@@ -323,13 +323,7 @@ new #[Layout('components.layouts.app'), Title('Mein Dashboard')] class extends C
@forelse ($recent as $pr)
@php
- $badgeClass = match ($pr->status->value) {
- 'published' => 'ok',
- 'review' => 'warn',
- 'rejected' => 'err',
- 'archived', 'draft' => 'muted',
- default => 'hub',
- };
+ $badgeClass = $pr->status->badgeClass();
$portal = $pr->portal?->value ?? 'both';
$showPe = in_array($portal, ['presseecho', 'both'], true);
$showBp = in_array($portal, ['businessportal24', 'both'], true);
diff --git a/resources/views/livewire/customer/press-releases/index.blade.php b/resources/views/livewire/customer/press-releases/index.blade.php
index 03e43522..dd2df8a0 100644
--- a/resources/views/livewire/customer/press-releases/index.blade.php
+++ b/resources/views/livewire/customer/press-releases/index.blade.php
@@ -432,13 +432,7 @@ new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class
'rejected' => 'is-row-err',
default => '',
};
- $badgeClass = match ($status) {
- 'published' => 'ok',
- 'review' => 'warn',
- 'rejected' => 'err',
- 'archived', 'draft' => 'muted',
- default => 'hub',
- };
+ $badgeClass = $pr->status->badgeClass();
$portal = $pr->portal?->value ?? 'both';
$showPe = in_array($portal, ['presseecho', 'both'], true);
$showBp = in_array($portal, ['businessportal24', 'both'], true);
diff --git a/resources/views/livewire/customer/press-releases/show.blade.php b/resources/views/livewire/customer/press-releases/show.blade.php
index 7a356508..c7b675d4 100644
--- a/resources/views/livewire/customer/press-releases/show.blade.php
+++ b/resources/views/livewire/customer/press-releases/show.blade.php
@@ -189,13 +189,6 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends
'latestRejection' => $latestRejection,
'contacts' => $pr->contacts,
'statusLogs' => $pr->statusLogs,
- 'statusColor' => match($pr->status->value) {
- 'published' => 'green',
- 'review' => 'yellow',
- 'rejected' => 'red',
- 'archived' => 'blue',
- default => 'zinc',
- },
];
}
@@ -273,12 +266,7 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends
@php
- $statusClass = match ($pr->status->value) {
- 'published' => 'ok',
- 'review' => 'warn',
- 'rejected' => 'err',
- default => 'hub',
- };
+ $statusClass = $pr->status->badgeClass();
@endphp
{{-- Flash-Banner ersetzt durch
im Layout. --}}
@@ -741,12 +729,7 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends
@php
- $logClass = match ($log->to_status?->value) {
- 'published' => 'ok',
- 'review' => 'warn',
- 'rejected' => 'err',
- default => 'hub',
- };
+ $logClass = $log->to_status?->badgeClass() ?? 'muted';
@endphp
{{ $log->to_status?->label() }}
diff --git a/tests/Unit/PressReleaseStatusBadgeClassTest.php b/tests/Unit/PressReleaseStatusBadgeClassTest.php
new file mode 100644
index 00000000..bceffcaf
--- /dev/null
+++ b/tests/Unit/PressReleaseStatusBadgeClassTest.php
@@ -0,0 +1,20 @@
+badgeClass())->toBe('ok')
+ ->and(PressReleaseStatus::Review->badgeClass())->toBe('warn')
+ ->and(PressReleaseStatus::Rejected->badgeClass())->toBe('err');
+});
+
+test('neutral statuses are muted', function () {
+ expect(PressReleaseStatus::Draft->badgeClass())->toBe('muted')
+ ->and(PressReleaseStatus::Archived->badgeClass())->toBe('muted');
+});
+
+test('every status resolves to a badge class', function () {
+ foreach (PressReleaseStatus::cases() as $status) {
+ expect($status->badgeClass())->toBeIn(['ok', 'warn', 'err', 'muted']);
+ }
+});