Fix coupon infolist enum formatting
This commit is contained in:
@@ -2,9 +2,11 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources\Coupons\Schemas;
|
namespace App\Filament\Resources\Coupons\Schemas;
|
||||||
|
|
||||||
|
use App\Enums\CouponStatus;
|
||||||
|
use App\Enums\CouponType;
|
||||||
use Filament\Infolists\Components\KeyValueEntry;
|
use Filament\Infolists\Components\KeyValueEntry;
|
||||||
use Filament\Infolists\Components\Section;
|
|
||||||
use Filament\Infolists\Components\TextEntry;
|
use Filament\Infolists\Components\TextEntry;
|
||||||
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
@@ -22,11 +24,11 @@ class CouponInfolist
|
|||||||
TextEntry::make('status')
|
TextEntry::make('status')
|
||||||
->label(__('Status'))
|
->label(__('Status'))
|
||||||
->badge()
|
->badge()
|
||||||
->formatStateUsing(fn ($state) => Str::headline($state)),
|
->formatStateUsing(fn ($state) => static::formatEnumState($state)),
|
||||||
TextEntry::make('type')
|
TextEntry::make('type')
|
||||||
->label(__('Discount type'))
|
->label(__('Discount type'))
|
||||||
->badge()
|
->badge()
|
||||||
->formatStateUsing(fn ($state) => Str::headline($state)),
|
->formatStateUsing(fn ($state) => static::formatEnumState($state)),
|
||||||
TextEntry::make('amount')
|
TextEntry::make('amount')
|
||||||
->label(__('Amount'))
|
->label(__('Amount'))
|
||||||
->formatStateUsing(fn ($state, $record) => $record?->type?->value === 'percentage'
|
->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 '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
19
tests/Unit/CouponInfolistTest.php
Normal file
19
tests/Unit/CouponInfolistTest.php
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user