# Acciones

Las acciones son botones que se muestran en distintas vistas y sirven de enlace sobre la propia vista o elemento o pueden usarse para realizar acciones como iniciar un proceso, exportar datos, etc.

Por ejemplo, existe la acción CreateAction que muestra un botón / enlace a la vista de creación, o la acción BackToIndexAction que te lleva de vuelta a la vista principal de listado de datos.

# Mostrar / ocultar acciones

Lo más común es que ciertas acciones sólo puedan aparecer en ciertas vistas.
Por ejemplo, la acción CreateAction suele aparecer en la vista de listado de datos, pero no en la vista de creación / edición.

Para ello disponemos de los siguientes modificadores:
hideOnList()
hideOnForm()
hideOnCreate()
hideOnEdit()

# Acciones de sección

Son acciones que se aplican a una sección del backoffice.

# CreateAction

Muestra un botón que te lleva a la vista de creación.
Como primer parámetro se le pasa el texto que mostrará el botón.

CreateAction::make('Crear país')

CreateAction

# BackToIndexAction

Muestra un botón que te devuelve a la vista principal del listado de datos.
Por defecto, si no se proporciona ningún parámetro, se mostrará el texto "Volver".

BackToIndexAction::make()

Detail Action

Si se desea otro texto diferente, puede indicarse mediante el primer parámetro:

BackToIndexAction::make('Volver al listado')

# CustomAction

Muestra un botón con título, icono y una acción personalizada.
El útil para lanzar acciones personalizadas como exportar datos, iniciar un proceso, etc.
Como primer parámetro se especifica el título del botón.
Como segundo parámetro una función con la acción a realizar.

CustomAction::make('Exportar', function () {
    // Realizamos una acción
})->setIcon('download-line')

# Acciones de elemento

Son acciones que se aplican a cada item del listado de datos, por ejemplo para editar un registro.

Item Action

# EditItemAction

Muestra un botón con icono para ir a la vista de edición de un registro.

EditItemAction::make()

# DeleteItemAction

Muestra un botón con icono para eliminar un registro.
Antes de producirse la eliminación, se muestra un mensaje de confirmación.

EditItemAction::make()

# CustomItemAction

Es una acción totalmente personalizable.
El icono puede ser personalizado mediante la función setIcon (ver Personalizar icono).
El código a ejecutar se define mediante la función execute, en una función que recibirá un objeto de tipo Model con los datos del registro asociado:

CustomItemAction::make()
    ->setIcon('check-line')
    ->execute(function (Model $item) {
        $item->active = false;
        $item->save();
    })

Por defecto se redirige a la misma pantalla de listado de datos, pero puede modificarse retornando una RedirectResponse en la propia función:







 


CustomItemAction::make()
    ->setIcon('check-line')
    ->execute(function (Model $item) {
        $item->active = false;
        $item->save();

        return redirect('home');
    })

# Ejecutar acción como AJAX

Es ocasiones es más usable realizar ciertas acciones por ajax, sin tener que recargar la página.
Para ello se puede usar el modificador asAjax():






 

CustomItemAction::make()
    ->setIcon('check-line')
    ->execute(function (Model $item) {
        $item->active = false;
        $item->save();
    })->asAjax()

Ajax y redirección

Tener en cuenta que si la acción se ejecuta mediante ajax, no se debe retornar ninguna respuesta en la función.

Ajax e iconos dependientes de los datos

Si el icono de la acción se ha establecido mediante una función (ver Icono dependiente de los datos), el sistema se encarga automáticamente de mostrar el icono correspondiente justo después de ejecutarse el código.

# Parámetros adicionales

En alguna ocasión puede ser necesario que el enlace del botón deba tener algún parámetro en la url.
Por ejemplo, en el caso del CreateAction, por defecto la url termina en /create. Si quisieramos pasar un parámetro como por ejemplo /create?active=0 podriamos definirlo mediante la función setParameter():

CreateAction::make('Crear país')->addParameter('active', 0)

# Personalizar icono

Por defecto las acciones tienen un icono predefinido. Éste puede ser modificado por otro mediante la función setIcon(), pasando un identificador de icono.
Los identificadores corresponden con los iconos de la librería Remix Icon (opens new window). En la web oficial puede encontrarse el listado completo de iconos pueden ser usados.

Por ejemplo, si quisieramos usar el siguiente icono:

RemixIcon

Utilizariamos como identificador star-line:

EditItemAction::make()->setIcon('star-line')

# Icono dependiente de los datos

En el caso de las acciones de elemento, como EditItemAction, DeleteItemAction o CustomItemAction, el icono puede variar dependiendo de cierto valor en los datos.
Por ejemplo, mostrar un icono u otro según si el campo active es 1 o 0. Para ello, en vez de pasar un string a la función setIcon(), se pasará un callback, que recibirá un objeto Model con los datos del registro asociado:

CustomItemAction::make()->setICon(function (Model $item) {
    return $item->active == 1 ? 'eye-line' : 'eye-off-line';
})