Enum traits to allow the use of attributes in Filament Enums.
You can install the package via composer:
composer require erikaraujo/filament-enum-attributes
First, you need to import and use the Enum
traits in your Filament enum class:
use HasColorAttribute;
use HasIconAttribute;
use HasLabelAttribute;
use HasDescriptionAttribute;
Or you can import all traits by simply doing:
use HasFilamentEnumAttributes;
Now, instead of coding the default filament get
methods (getColor()
, getIcon()
and getLabel()
) as per the documentation, you may simply use the #[Color]
, #[Icon]
and #[Label]
attributes in your enum cases.
See example below:
enum Suit: string implements HasColor, HasIcon, HasLabel, HasDescription
{
use HasColorAttribute;
use HasIconAttribute;
use HasLabelAttribute;
use HasDescriptionAttribute;
#[Color(['gray', 'warning'])]
case Clubs = 'clubs';
#[
Color('warning'),
Label('Shine bright'),
]
case Diamonds = 'diamonds';
#[Color('gray')]
#[Label('Club')]
#[Icon('heroicon-o-heart')]
case Hearts = 'hearts';
#[Description('The upside down black heart.')]
case Spades = 'spades';
Make sure everything is imported:
use ErikAraujo\FilamentEnumAttributes\Attributes\Color;
use ErikAraujo\FilamentEnumAttributes\Attributes\Icon;
use ErikAraujo\FilamentEnumAttributes\Attributes\Label;
use ErikAraujo\FilamentEnumAttributes\Concerns\HasColorAttribute;
use ErikAraujo\FilamentEnumAttributes\Concerns\HasIconAttribute;
use ErikAraujo\FilamentEnumAttributes\Concerns\HasLabelAttribute;
use ErikAraujo\FilamentEnumAttributes\Concerns\HasDescriptionAttribute;
You can also pass a boolean translate
param to both the Label
and Description
attributes if you want to translate the string using the laravel helper.
So, the following:
#[Description('descriptions.suits.spades')]
Will be evaluated as __('descriptions.suits.spades')
.
To execute the tests, just run the composer scriopt:
composer test
If you want to check on the coverage, run:
composer test:coverage:html
Please see CONTRIBUTING for details.
The MIT License (MIT). Please see License File for more information.