Fix coupon enum formatting in Filament table
This commit is contained in:
@@ -40,7 +40,7 @@ class CouponsTable
|
|||||||
TextColumn::make('type')
|
TextColumn::make('type')
|
||||||
->label(__('Type'))
|
->label(__('Type'))
|
||||||
->badge()
|
->badge()
|
||||||
->formatStateUsing(fn ($state) => Str::headline($state))
|
->formatStateUsing(fn ($state) => static::formatEnumState($state))
|
||||||
->sortable(),
|
->sortable(),
|
||||||
TextColumn::make('amount')
|
TextColumn::make('amount')
|
||||||
->label(__('Amount'))
|
->label(__('Amount'))
|
||||||
@@ -59,7 +59,7 @@ class CouponsTable
|
|||||||
->label(__('Status'))
|
->label(__('Status'))
|
||||||
->badge()
|
->badge()
|
||||||
->sortable()
|
->sortable()
|
||||||
->formatStateUsing(fn ($state) => Str::headline($state)),
|
->formatStateUsing(fn ($state) => static::formatEnumState($state)),
|
||||||
TextColumn::make('starts_at')
|
TextColumn::make('starts_at')
|
||||||
->label(__('Starts'))
|
->label(__('Starts'))
|
||||||
->date()
|
->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