Actions

Actions are the buttons you see when browsing a BREAD.
There are two kinds of actions: bulk and single.
By default all actions are single actions.

Adding an Action

To add an action add the following to your service provider:

<?php

use Voyager\Admin\Classes\Action;
use Voyager\Admin\Manager\Bread as BreadManager;

public function boot(BreadManager $breadmanager)
{
    $action = (new Action('My title', 'my-icon', 'color'))->route('my_route');
    $breadmanager->addAction($action);
}

For convenience you can pass as many actions to addAction() as you want.
Color can be one of Tailwinds color palette (gray, red, green, blue, purple, ...) or accent
The title can be a translation-key (for example generic.action_title) or a normal string.
When used as a bulk-action your translation can also contain pluralizable strings.

Method

By default the HTTP method used when clicking your action is get.
You can set your method by calling ->method('post') where the parameter is one of get, post, put, patch or delete.

Bulk actions

To make your action a bulk-action, simply call ->bulk()

Downloads

If you want to generate a file and send it to the user after clicking your action, simply call ->download('my_file.txt') with the name of the file.
Make sure to return the file-contents as the response.

Route

You can provide a route-name as string like ->route('my_route') or a callback function which will receive the currently used BREAD:

$action = (new Action('My title', 'my-icon', 'color'))
    ->route(function ($bread) {
        return 'voyager.'.$bread->slug.'.edit';
    });

URL

Instead of a route name you can directly provide an URL like ->url('http://...')

Permission

If you want your action to depend on a permission, use ->permission():

$action = (new Action('My title', 'my-icon', 'color'))
    ->permission('delete', [/* additional arguments */]);

Display on BREAD

You can provide a callback function to determine if your action should be displayed on the currently used BREAD.
To do so, simply chain the method ->displayOnBread(function ($bread) { ... }) to your action and return a boolean value.

$action = (new Action('My title', 'my-icon', 'color'))
    ->displayOnBread(function ($bread) {
        if ($myCondition) {
            return true; // Display this action
        }

        return false; // Don't display this action
    });

Confirm

Sometimes you want the user to confirm the action.
To do so, simply use ->confirm(...):

$action = (new Action('My title', 'my-icon', 'color'))
    ->confirm('Are you sure you want to do this?', 'Are you sure', 'red');

The first parameter is the message, the second the title (can be null), the third again is a color from the Tailwind color-palette (or accent)
Like for the action title you can provide your title and message as translation-keys.

Success

You can display a success notification after your action was completed.

$action = (new Action('My title', 'my-icon', 'color'))
    ->success('The action finished successfully.', 'Done', 'green');

The parameter are the same as for confirm().

Reload after your action is done

If you want to reload the browse-results after your action was run, simply use ->reloadAfter()

Deleted and non-deleted items

When using soft-deletes it is useful to only display the action on soft-deleted or not soft-deleted entries.
This can be done by calling either ->displayDeletable() or displayRestorable() respectively.