Fix coupon enum formatting in Filament table
This commit is contained in:
@@ -40,7 +40,7 @@ class CouponsTable
|
||||
TextColumn::make('type')
|
||||
->label(__('Type'))
|
||||
->badge()
|
||||
->formatStateUsing(fn ($state) => Str::headline($state))
|
||||
->formatStateUsing(fn ($state) => static::formatEnumState($state))
|
||||
->sortable(),
|
||||
TextColumn::make('amount')
|
||||
->label(__('Amount'))
|
||||
@@ -59,7 +59,7 @@ class CouponsTable
|
||||
->label(__('Status'))
|
||||
->badge()
|
||||
->sortable()
|
||||
->formatStateUsing(fn ($state) => Str::headline($state)),
|
||||
->formatStateUsing(fn ($state) => static::formatEnumState($state)),
|
||||
TextColumn::make('starts_at')
|
||||
->label(__('Starts'))
|
||||
->date()
|
||||
@@ -151,4 +151,21 @@ class CouponsTable
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
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 '';
|
||||
}
|
||||
}
|
||||
|
||||
19
tests/Unit/CouponsTableTest.php
Normal file
19
tests/Unit/CouponsTableTest.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\Enums\CouponStatus;
|
||||
use App\Enums\CouponType;
|
||||
use App\Filament\Resources\Coupons\Tables\CouponsTable;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CouponsTableTest extends TestCase
|
||||
{
|
||||
public function test_it_formats_enum_states(): void
|
||||
{
|
||||
$this->assertSame(CouponType::FLAT->label(), CouponsTable::formatEnumState(CouponType::FLAT));
|
||||
$this->assertSame(CouponStatus::PAUSED->label(), CouponsTable::formatEnumState(CouponStatus::PAUSED));
|
||||
$this->assertSame('Flat Per Seat', CouponsTable::formatEnumState('flat_per_seat'));
|
||||
$this->assertSame('', CouponsTable::formatEnumState(null));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user