This package allows you to control the columns and filters shown on your nova resources.
You can install the package via composer:
composer require digital-creative/nova-mega-filter
Basic demo showing the power of this field:
use DigitalCreative\MegaFilter\MegaFilter;
use DigitalCreative\MegaFilter\HasMegaFilterTrait;
use DigitalCreative\MegaFilter\Column;
class ExampleNovaResource extends Resource {
use HasMegaFilterTrait; // Important!!
public function cards(Request $request)
{
return [
MegaFilter::make([
'filters' => [
new DateOfBirthFilter(),
new UserTypeFilter()
],
'columns' => [
Column::make('Customer Name', 'name')->addFilter(new ActiveFilter()),
Column::make('Assets'),
Column::make('Payments')
]
])
];
}
}
Columns reflects every column that is normally shown on your table resource, however you are free to give your user the ability to toggle it on/off:
use DigitalCreative\MegaFilter\Column;
use DigitalCreative\MegaFilter\HasMegaFilterTrait;
use DigitalCreative\MegaFilter\MegaFilter;
MegaFilter::make([
'columns' => [
Column::make($label),
Column::make($label, $attribute),
Column::make($label, $attribute, $filters),
new Column($label, $attribute, $filters),
],
])
You can add additional filters that only appears when the desired column is enabled:
MegaFilter::make([
'columns' => [
Column::make('Gender')->addFilter(new GenderFilter())
],
])
If you want to have filters that are always shown, use the 'filters' option bellow
You can also define columns that can not be toggled by the user and will be always present on the table resource:
MegaFilter::make([
'columns' => [
Column::make('Name')->permanent()
],
])
When using ->permanent()
every filter that the column may define will be also present
Other column methods include the ability to have a column default checked
MegaFilter::make([
'columns' => [
Column::make('Name')->checked() // Checked by default
],
])
The filters
key accepts an array of any instance of the default Nova filter class or third party.
MegaFilter::make([
'filters' => [
new BirthdayFilter(),
new UserTypeFilter(),
new GenderFilter(),
],
])
Actions will use the same Nova action mechanism
MegaFilter::make([
'actions' => [
new ExportClientAsExcell(),
],
])
If you have multiple actions defined, a dropdown will be shown:
The columns selected will also be given to your action, you can access them directly from the request:
public function handle(ActionFields $fields, Collection $models)
{
$columns = json_decode(request()->input('columns'));
dd($columns);
}
The settings key is optional as it comes with some good defaults, but feel free to override it to suit your needs.
MegaFilter::make([
'settings' => [
/**
* Tailwind width classes: w-full w-1/2 w-1/3 w-1/4 etc.
*/
'columnsWidth' => 'w-1/4',
'filtersWidth' => 'w-1/2',
/**
* The default state of the main toggle buttons
*/
'columnsActive' => false,
'filtersActive' => true,
'actionsActive' => true,
/**
* Labels
*/
'headerLabel' => 'Menu',
'columnsLabel' => 'Columns',
'filtersLabel' => 'Filters',
'actionsLabel' => 'Actions',
'columnsSectionTitle' => 'Additional Columns',
'filtersSectionTitle' => 'Filters',
'actionsSectionTitle' => 'Actions',
'columnsResetLinkTitle' => 'Reset Columns',
'filtersResetLinkTitle' => 'Reset Filters',
],
])
The MIT License (MIT). Please see License File for more information.