datomatic / nova-enum-field
A Laravel Nova PHP 8.1 enum field with filters
Installs: 103 396
Dependents: 0
Suggesters: 0
Security: 0
Stars: 19
Watchers: 0
Forks: 13
pkg:composer/datomatic/nova-enum-field
Requires
- php: >=8.1
- illuminate/database: ^9.0|^10.0|^11.0|^12.0
- illuminate/http: ^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
- laravel/nova: ^3.0|^4.0|^5.0
README
Laravel Nova Enum Field
Nova field for enums in PHP 8.1 and above (both pure Enum and BackedEnum) with datomatic/enum-helper and datomatic/laravel-enum-helper compatibility.
There is also a Nova Select filter and Nova Boolean filter:

Installation
You can install this package in a Laravel app that uses Nova via composer:
composer require datomatic/nova-enum-field
Setup
use App\Enums\UserType; use Illuminate\Database\Eloquent\Model; class Example extends Model { protected $casts = [ 'user_type' => UserType::class, ]; }
Usage
You can use the Enum field in your Nova resource like this:
namespace App\Nova; use App\Enums\UserType; use Datomatic\Nova\Fields\Enum\Enum; class Example extends Resource { // ... public function fields(Request $request) { return [ // ... Enum::make('User Type','user_type')->attach(UserType::class), // ... ]; } }
Be aware that order in which methods on the field are called can be sigificant. For example nullable() must be called before before attach(), and options() must be called after attach().
If you use datomatic/laravel-enum-helper you can set optionally a custom dynamic property or/and a subset of cases.
The default property is description.
Enum::make('User Type','user_type') ->nullable() ->property('excerpt') ->cases([UserType::ADMINISTRATOR,UserType::MODERATOR]) ->attach(UserType::class),
Filters
If you would like to use the provided Nova Select filter, you can include it like this:
namespace App\Nova; use App\Enums\UserPermissions; use App\Enums\UserType; use Datomatic\Nova\Fields\Enum\EnumFilter; class Example extends Resource { // ... public function filters(Request $request) { return [ EnumFilter::make('user_type', UserType::class), // With optional name and default value: EnumFilter::make('user_type', UserType::class) ->name(__('User Type')) ->default(UserType::ADMINISTRATOR) ]; } }
Alternatively, you may wish to use the provided Nova Boolean filter:
namespace App\Nova; use App\Enums\UserPermissions; use App\Enums\UserType; use Datomatic\Nova\Fields\Enum\EnumBooleanFilter; class Example extends Resource { // ... public function filters(Request $request) { return [ EnumBooleanFilter::make('user_type', UserType::class), // With optional name and default value: EnumBooleanFilter::make('user_type', UserType::class) ->name(__('User Type')) ->default([UserType::ADMINISTRATOR, UserType::MODERATOR]) ]; } }
If you use datomatic/laravel-enum-helper you can set optionally a custom dynamic property or/and a subset of cases.
The default property is description.
// Enum filter EnumFilter::make('user_type', UserType::class) ->name('User Type') ->property('excerpt') ->cases([UserType::ADMINISTRATOR,UserType::MODERATOR]) // Boolean Enum filter EnumBooleanFilter::make('user_type', UserType::class) ->name('User Type') ->property('excerpt') ->cases([UserType::ADMINISTRATOR,UserType::MODERATOR])
Credits
Thanks
License
The MIT License (MIT). Please see License File for more information.
