LaravelPackages.net
Acme Inc.
Toggle sidebar
semihkeskindev/laravel-nova-field-dynamic-select

A Laravel Nova field.

41
0
1.3.0
About semihkeskindev/laravel-nova-field-dynamic-select

semihkeskindev/laravel-nova-field-dynamic-select is a Laravel package for a laravel nova field.. It currently has 0 GitHub stars and 41 downloads on Packagist (latest version 1.3.0). Install it with composer require semihkeskindev/laravel-nova-field-dynamic-select. Discover more Laravel packages by semihkeskindev or browse all Laravel packages to compare alternatives.

Last updated

Dynamic select field for Laravel Nova (maintained repo)

This field allows you to dynamically fill contents of a select based on values in other dynamic select fields.

Field is based on nova-belongs-to-dependency but instead of selecting model, you can select custom values.

Installation

composer require royduin/laravel-nova-field-dynamic-select

Usage

Class have 2 special methods on top of default Select from Laravel Nova.

  • dependsOn can take a list of other fields this one depends on.
  • options can be either an array or a callable.

If its a callable, it will receive array with selected dependency values as first argument and should return an array of items to be shown on the select field.

Example

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),

        DynamicSelect::make('Country', 'country')
            ->options(['US' => 'United States', 'UK' => 'United Kingdom'])
            ->rules('required')
        ,

        DynamicSelect::make('Provider', 'provider')
            ->options(['PR' => 'Premium', 'ST' => 'Standard'])
            ->rules('required')
        ,

        DynamicSelect::make('Product', 'product')
            ->dependsOn(['country', 'provider'])
            ->options(function($values) { 
                if($values['country'] === 'UK' && $values['provider'] === 'PR') {
                    return ['A' => 'Fast shipping', 'B' => 'Normal shipping', 'C' => 'Free shipping'];
                } else {
                    return ['A' => 'Fast shipping', 'B' => 'Normal shipping'];
                }
            })
            ->rules('required')
        ,
    ];
}

Comments