承接 pavloniym/nova-action-buttons 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

pavloniym/nova-action-buttons

最新稳定版本:v1.1.5

Composer 安装命令:

composer require pavloniym/nova-action-buttons

包简介

A Laravel Nova field.

README 文档

README

Latest Version on Packagist Licence Total Downloads

This Laravel Nova 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:

composer require pavloniym/nova-action-buttons

Usage

Single button

Nova Action Buttons
You can add single button to execute action from index row

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></svg>') // 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
You can add collection of buttons to index row

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) 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
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:

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

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.

统计信息

  • 总下载量: 182.83k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 15
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 15
  • Watchers: 1
  • Forks: 15
  • 开发语言: Vue

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-12-03