Bulk actions
Adding bulk actions to your CRUD resource list views
INFO
Bulk actions are only available when using a resource manager for your list view.
Setup
Add the WithBulkActions trait to your resource manager class:
use Racerfish\Evolve\Concerns\Livewire\WithBulkActions;
class PostManager extends ResourceComponent
{
// ...
use WithBulkActions;Then, pass the $selected variable to the selected prop of the resource list component in your index view:
<x-evolve::resource.list
:items="$posts"
:selected="$selected">
<!-- ... -->
</x-evolve::resource.list>Now add a checkbox input to your list items. The value must be your model's ID and wire:model must bind the selected Livewire property:
<input
type="checkbox"
name="selected[]"
value="{{ $post->id }}"
wire:model="selected">Your list view is now ready for bulk actions.
Add custom actions
By default, only bulk deleting is available. But you can also define your own custom bulk actions.
Prepare the view
The x-evolve::resource.list provides a bulkActions slot to add dropdown items for your custom bulk actions:
<x-evolve::resource.list ...>
<x-slot name="bulkActions">
<button
class="dropdown__item"
type="button"
wire:click="publishSelected">
Publish selected
</button>
</x-slot>
<!-- ... -->
</x-evolve::resource.list>Define the action logic
Create the Livewire action which will be called upon clicking the dropdown item, in our example publishSelected (because the button's wire:click binds it).
The WithBulkActions trait provides a method called getAllSelectedAsCursor() which returns all selected items as modal instances. You can loop through all of them to perform custom actions.
public function publishSelected()
{
foreach ($this->getAllSelectedAsCursor() as $post) {
$post->is_published = true;
$post->save();
}
}