Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pavloniym/nova-action-buttons
This package allows you to execute an action directly on your resource table view.
https://github.com/pavloniym/nova-action-buttons
actions buttons laravel nova
Last synced: 9 days ago
JSON representation
This package allows you to execute an action directly on your resource table view.
- Host: GitHub
- URL: https://github.com/pavloniym/nova-action-buttons
- Owner: pavloniym
- License: mit
- Created: 2022-12-03T11:37:57.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-11-01T21:16:27.000Z (3 months ago)
- Last Synced: 2025-01-17T07:05:01.605Z (16 days ago)
- Topics: actions, buttons, laravel, nova
- Language: Vue
- Homepage: https://novapackages.com/packages/pavloniym/nova-action-buttons
- Size: 646 KB
- Stars: 14
- Watchers: 1
- Forks: 8
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Nova Action Buttons
[![Latest Version on Packagist](https://img.shields.io/packagist/v/pavloniym/nova-action-buttons?style=flat-square)](https://packagist.org/packages/pavloniym/nova-action-buttons)
![Licence](https://img.shields.io/github/license/pavloniym/nova-action-buttons?style=flat-square)
[![Total Downloads](https://poser.pugx.org/pavloniym/nova-action-buttons/downloads?format=flat-square)](https://packagist.org/packages/pavloniym/nova-action-buttons)This [Laravel Nova](https://nova.laravel.com) package allows you to execute an action directly on your resource table
view.## Requirements
- `php: >=8.0`
- `laravel/nova: ^4.1`## Installation
Install the package in a Laravel Nova project via Composer:
```bash
composer require pavloniym/nova-action-buttons
```## Usage
### Single button
![Nova Action Buttons](https://raw.githubusercontent.com/pavloniym/nova-action-buttons/main/.github/assets/screenshot1.png)
You can add single button to execute action from index row```php
use Pavloniym\ActionButtons\ActionButton;public function fields(Request $request)
{
return [
// ... Nova default fields
ActionButton::make('') // Name in resource table column
->icon('lightning-bolt') // heroicon name ->icon('lightning-bolt')
->iconHtml('') // Svg (or html) icon
->iconUrl('https://img.com/icon.png') // Url of icon
->text('Refresh') // Title (optional)
->tooltip('Magic tooltip here') // Tooltip text (optional). If not provided, it will default to the action name.
->styles([]) // Custom css styles (optional)
->classes([]) // Custom css classes (optional)
->action(new RefreshAction, $this->resource->id) // Provide action instance and resource id
->asToolbarButton(), // Display as row toolbar button (optional)
// ... Nova default fields
];
}
```### Collection of buttons
![Nova Action Buttons](https://raw.githubusercontent.com/pavloniym/nova-action-buttons/main/.github/assets/screenshot2.png)
You can add collection of buttons to index row```php
use Pavloniym\ActionButtons\ActionButton;public function fields(Request $request)
{
return [
// ... Nova default fields
ActionButtons::make()->collection([
ActionButton::make('')->action(),
ActionButton::make('')->action(),
ActionButton::make('')->action(),
])
// ... Nova default fields
];
}
```> This fields (both `ActionButton` and `ActionButtons`) are available on index and detail (Thanks to [@CosminBd](https://github.com/CosminBd)) views
## Caveats
* Currently, in order to use this field, you still have to declare the action in your resource `actions()` method.
* Tested only on `confirm-action-modal` action
* You should provide action instance in `action()` method of button.
* If you have action fields that are depends on resource instance -> you should inject resource in action constructor, because Nova doesn't provide `NovaRequest` instance to `fields` method on index row```php
class RefreshAction extends Action
{private Torrent $torrent
/**
* @param Torrent $torrent
*/
public function __construct(Torrent $torrent)
{
$this->torrent = $torrent;
}
/**
* Get the fields available on the action.
*
* @param NovaRequest $request
* @return array|null
*/
public function fields(NovaRequest $request): ?array
{
// $request is empty if action is called from index row (or inline)
// so use instance injected to action constructor
$torrent = (fn(): ?Torrent => $request?->selectedResources()?->first())();
$torrent = $torrent ?? $this->torrent;if ($torrent) {
return [
File::make('File')->creationRules(['required'])
];
}return null;
}}
```
---
To hide the action either on Index or Detail, you can add the methods in the action declaration as per:
```php
ActionButton::make('My action')
->action((new RefreshAction)->onlyOnDetail(), $this->resource?->id)
->icon('')
->asToolbarButton(),
```
This is available for both action buttons and action button groups, and it works in individual actions which are part of the action group.---
To run actions without confirmation, you can add the `$withoutConfirmation = true` property to the Laravel Nova action or provide it as a method when you declare the action button
```php
ActionButton::make('My action')
->action((new RefreshAction)->withoutConfirmation(), $this->resource?->id)
->icon('')
->asToolbarButton(),
```## License
This project is open-sourced software licensed under the [MIT license](LICENSE.md).