erikaraujo/filament-enum-attributes

Traits for Enums to allow for using Attributes instead of get methods for Filament enums

1.0.0 2024-01-30 23:57 UTC

This package is auto-updated.

Last update: 2024-12-13 20:29:23 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

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.