Plugins
Searchable Input
A searchable autocomplete input form field.
Form Builder
Form Field
Dark theme support
Yes
Multi language support
No
Compatible with the latest version
Supported versions: 3.x
Documentation

Latest Version on Packagist GitHub Code Style Action Status Total Downloads

image

A searchable autocomplete input form field

#Installation

You can install the package via composer:

composer require defstudio/filament-searchable-input

Optionally, you can publish the views using

php artisan vendor:publish --tag="filament-searchable-input-views"

#Usage

SearchableInput is a component input built on top of TextInput, so any TextInput method is available, plus it allows to define a search function that will be executed whenever the user types something.

Here's a basic implementation

use DefStudio\SearchableInput\Forms\Components\SearchableInput;
 
class ProductResource
{
public static function form(Form $form): Form
{
return $form->schema([
SearchableInput::make('description')
->options([
'Lorem ipsum dolor',
'Aspernatur labore qui fugiat',
'Dolores tempora libero assumenda',
'Qui rem voluptas officiis ut non',
 
//..
 
])
]);
}
}

#Value-Label pairs options

Options can be defined also as an array of Value and Label pairs.

The Value will be inserted in the Input field when the user select an item. The Label is just used as a display value inside the search dropdown.

use DefStudio\SearchableInput\Forms\Components\SearchableInput;
 
class ProductResource
{
public static function form(Form $form): Form
{
return $form->schema([
SearchableInput::make('description')
->options([
'Lorem ipsum dolor' => '[A001] Lorem ipsum dolor.',
'Aspernatur labore qui fugiat' => '[A001] Aspernatur labore qui fugiat.',
'Dolores tempora libero assumenda' => '[A002] Dolores tempora libero assumenda.',
'Qui rem voluptas officiis ut non' => '[A003] Qui rem voluptas officiis ut non.',
 
//..
 
])
]);
}
}

#Custom Search Function

Instead (or along with) defining an ->options() set, the search result set can be customized:

 
use DefStudio\SearchableInput\Forms\Components\SearchableInput;
 
class ProductResource
{
public static function form(Form $form): Form
{
return $form->schema([
SearchableInput::make('description')
->searchUsing(function(string $search){
 
return Product::query()
->where('description', 'like', "%$search%")
->orWhere('code', 'like', "%$search%")
->limit(15)
->pluck('description')
->values()
->toArray();
 
// Or, an associative array as well...
 
return Product::query()
->where('description', 'like', "%$search%")
->orWhere('code', 'like', "%$search%")
->limit(15)
->mapWithKeys(fn(Product $product) => [
$product->description => "[$product->code] $product->description"
])
->toArray();
 
 
// Or, also, an array of complex items (see below)
})
]);
}
}

#Complex Items

SearchableInput supports using arrays as search results, this allows to pass metadata to the selected item and consume it in the ->onItemSelected() method:

 
use DefStudio\SearchableInput\Forms\Components\SearchableInput;
use DefStudio\SearchableInput\DTO\SearchResult;
 
class ProductResource
{
public static function form(Form $form): Form
{
return $form->schema([
SearchableInput::make('description')
->searchUsing(function(string $search){
 
return Product::query()
->where('description', 'like', "%$search%")
->limit(15)
->map(fn(Product $product) => SearchResult::make($product->description, "[$product->code] $product->description")
->withData('product_id', $product->id)
->withData('product_code', $product->code)
)
->toArray()
 
})
->onItemSelected(function(SearchResult $item){
$item->value();
$item->label();
$item->get('product_id');
$item->get('product_code');
}),
]);
}
}

#Filament Utility Injection

In each of its methods, SearchableInput fully supports Filament utility injection in its methods, like:

SearchableInput::make('description')
->searchUsing(function(string $search, array $options){ //options defined in ->options([...])
//...
})
->searchUsing(function(string $search, Get $get, Set $set){ //$get and $set utilities
//...
})
->searchUsing(function(string $search, $state){ //current field state
//...
})
->searchUsing(function(string $search, Component $component){ //current component instance
//...
})
->searchUsing(function(string $search, ?Model $record){ //current form record
//...
})
->searchUsing(function(string $search, string $operation){ //current form operation (create/update)
//...
});

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

Please see CONTRIBUTING for details.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

DEF Studio

Def Studio is a web and software agency based in Bari, Apulia, south of Italy. It was initially co-created by Fabio Ivona and Daniele Romeo as a group of freelance web developers and then it took the form of a Ltd. Company.

Our mission is to create advanced digital products that are easy to maintain and update, tailor-made digital solutions, and contribute to the open-source world.

2
Plugins
24
Stars
More from this author
Featured Plugins