Fix coupon infolist enum formatting
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-01-03 15:27:20 +01:00
parent 3d0ff40382
commit 43b626cbfc
2 changed files with 41 additions and 3 deletions

View File

@@ -2,9 +2,11 @@
namespace App\Filament\Resources\Coupons\Schemas;
use App\Enums\CouponStatus;
use App\Enums\CouponType;
use Filament\Infolists\Components\KeyValueEntry;
use Filament\Infolists\Components\Section;
use Filament\Infolists\Components\TextEntry;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
use Illuminate\Support\Str;
@@ -22,11 +24,11 @@ class CouponInfolist
TextEntry::make('status')
->label(__('Status'))
->badge()
->formatStateUsing(fn ($state) => Str::headline($state)),
->formatStateUsing(fn ($state) => static::formatEnumState($state)),
TextEntry::make('type')
->label(__('Discount type'))
->badge()
->formatStateUsing(fn ($state) => Str::headline($state)),
->formatStateUsing(fn ($state) => static::formatEnumState($state)),
TextEntry::make('amount')
->label(__('Amount'))
->formatStateUsing(fn ($state, $record) => $record?->type?->value === 'percentage'
@@ -78,4 +80,21 @@ class CouponInfolist
]),
]);
}
public static function formatEnumState(mixed $state): string
{
if ($state instanceof CouponType || $state instanceof CouponStatus) {
return $state->label();
}
if ($state instanceof \BackedEnum) {
return Str::headline($state->value);
}
if (is_string($state)) {
return Str::headline($state);
}
return '';
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace Tests\Unit;
use App\Enums\CouponStatus;
use App\Enums\CouponType;
use App\Filament\Resources\Coupons\Schemas\CouponInfolist;
use Tests\TestCase;
class CouponInfolistTest extends TestCase
{
public function test_it_formats_enum_states(): void
{
$this->assertSame(CouponType::PERCENTAGE->label(), CouponInfolist::formatEnumState(CouponType::PERCENTAGE));
$this->assertSame(CouponStatus::ACTIVE->label(), CouponInfolist::formatEnumState(CouponStatus::ACTIVE));
$this->assertSame('Flat', CouponInfolist::formatEnumState('flat'));
$this->assertSame('', CouponInfolist::formatEnumState(null));
}
}