datomatic / nova-enum-field
A Laravel Nova PHP 8.1 enum field with filters
Requires
- php: >=8.1
- illuminate/database: ^9.0|^10.0|^11.0
- illuminate/http: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- laravel/nova: ^3.0|^4.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.