erikaraujo / filament-enum-attributes
Traits for Enums to allow for using Attributes instead of get methods for Filament enums
Installs: 10 520
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
Requires (Dev)
- larastan/larastan: ^2.8
- laravel/pint: ^1.13
- orchestra/testbench: ^8.18
- phpunit/phpunit: ^10.5
README
Enum traits to allow the use of attributes in Filament Enums.
Installation
You can install the package via composer:
composer require erikaraujo/filament-enum-attributes
Usage
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')
.
Testing
To execute the tests, just run the composer scriopt:
composer test
If you want to check on the coverage, run:
composer test:coverage:html
Contributing
Please see CONTRIBUTING for details.
License
The MIT License (MIT). Please see License File for more information.