gobrightspot/nova-detached-actions

此包已被放弃,不再维护。没有建议的替代包。

一个 Laravel Nova 工具,允许将操作放置在 Nova 工具栏中,独立于复选框选择机制。

安装: 1,191,683

依赖项: 3

建议者: 0

安全: 0

星标: 168

关注者: 4

分支: 39

开放问题: 20

语言:Vue

1.1.1 2020-10-11 22:54 UTC

README

Status: ABANDONED No Maintenance Intended

弃用通知 ⚠️

GoBrightspot 已停止维护此项目。请进行分支以便继续开发。

简介

一个 Laravel Nova 工具,允许在 Nova 工具栏中放置操作,与复选框选择机制分离。

⚠️ 请注意,由于操作与资源表中的行选择复选框分离,您将没有可以迭代的模型集合。分离操作旨在独立于表中的选择。

⚠️ 另外,请注意,枢轴操作不受支持,并且尚未经过测试。

screenshot

安装

您可以通过 composer 将包安装到使用 Nova 的 Laravel 应用中

composer require gobrightspot/nova-detached-actions

工具将通过 ToolServiceProvider 自动注册

用法

创建自定义 Nova 操作文件

php artisan nova:action ExportUsers

而不是通过 Laravel\Nova\Actions\Action 类扩展 ExportUsers 类,用 Brightspot\Nova\Tools\DetachedActions\DetachedAction 类替换它。

由于我们不会收到 $models 集合,您可以从 handle 方法中删除该变量,使签名变为 public function handle(ActionFields $fields)

您还可以通过重写 label() 方法来自定义按钮标签。如果您不重写标签,它将 'humanize' 类名,例如 ExportUsers 将成为 Export Users

默认情况下,分离操作仅出现在索引工具栏上。

如果您还希望在资源索引视图(当用户通过复选框选择行时)中显示操作,请设置 $public $showOnIndex = true; 如果您还希望在资源详情视图中显示操作(当用户从下拉菜单中选择操作时),请设置 $public $showOnDetail = true;

以下是一个完整的示例

<?php

namespace App\Nova\Actions;

use Brightspot\Nova\Tools\DetachedActions\DetachedAction;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Laravel\Nova\Fields\ActionFields;

class ExportUsers extends DetachedAction
{
    use InteractsWithQueue, Queueable, SerializesModels;
    
    /**
     * Get the displayable label of the button.
     *
     * @return string
     */
    public function label()
    {
        return __('Export Users');
    }

    /**
     * Perform the action.
     *
     * @param  ActionFields  $fields
     *
     * @return mixed
     */
    public function handle(ActionFields $fields)
    {
        // Do work to export records

        return DetachedAction::message('It worked!');
    }

    /**
     * Get the fields available on the action.
     *
     * @return array
     */
    public function fields()
    {
        return [];
    }
}

在您的资源上注册操作

/**
 * Get the actions available for the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function actions(Request $request)
{
    return [
        new App\Nova\Actions\ExportUsers
    ];
}

分块和重复调用 handle()

如果在后台启动操作,Nova 将将总记录数分成块,并为每个块调用您的 DetachedAction 的 handle() 函数。这可能会对性能产生意外影响,因为系统将为每个记录块执行您的操作。这发生在 \Laravel\Nova\Actions\Action.phphandleRequest() 函数中。

为了防止这种情况,最简单的方法是在您的 DetachedAction 中覆盖此函数。这是一个仅调度作业而不进行任何检查或其他逻辑的裸示例

/** @return array<int,string> */
public function handleRequest(ActionRequest $request): array
{
    dispatch(new GenerateTicketReport($request->resolveFields()));
    return DetachedAction::message('Nice job!');
}

在不同屏幕上显示

showOnIndexToolbar()

在索引页工具栏上显示分离的动作按钮(即默认位置)。在索引网格动作下拉菜单中不显示。

onlyOnIndexToolbar()

仅在索引工具栏上显示分离的动作按钮。不要在其他任何地方显示它们。

exceptOnIndexToolbar

在索引工具栏以外的所有地方显示分离的动作按钮。

onlyOnIndex

仅在索引视图中显示分离的动作按钮。允许它们在standalone下拉菜单或在网格动作下拉菜单中显示。

showOnDetailToolbar()

在详情页工具栏上显示分离的动作按钮(即默认位置)。

onlyOnDetailToolbar()

仅在索引工具栏上显示分离的动作按钮。不要在其他任何地方显示它们。

exceptOnDetailToolbar

在详情工具栏以外的所有地方显示分离的动作按钮。

onlyOnDetail

仅在详情视图中显示分离的动作按钮。允许它们在standalone下拉菜单或动作下拉菜单中显示。

与Laravel Nova Excel的DownloadExcel动作使用

您可以通过使用withMeta()简单地传递一些额外的数据,轻松地将DetachedAction工具与Laravel Nova ExcelDownloadExcel动作集成。

/**
  * Get the actions available for the resource.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return array
  */
 public function actions(Request $request)
 {
     return [
         (new DownloadExcel)->withHeadings()->askForWriterType()->withMeta([
             'detachedAction' => true,
             'label' => 'Export',
             'name' => 'Export',
             'showOnIndexToolbar' => true
         ])->confirmButtonText('Export'),
     ];
 }

自定义按钮

可见按钮与不可见按钮

默认情况下,该组件将显示前三个按钮,其余的按钮放入下拉菜单中。如果您想更改每个资源上可见的按钮数量,可以通过使用additionalInformation方法来实现,如下所示

public static function additionalInformation(Request $request)
{
    return [
        'visibleActionsLimit' => 4
    ];
}

您还可以更改图标类型,以及是否显示不可见动作菜单的向下箭头

public static function additionalInformation(Request $request)
{
    return [
        'visibleActionsLimit' => 2,
        'showInvisibleActionsArrow' => true,
        'invisibleActionsIcon' => 'menu'
    ];
}

自定义按钮类

该软件包附带一些常见的默认HTML类,这些类应用于动作按钮。在组件中,我们自动分配以下

btn btn-default ml-3 detached-action-button flex justify-center items-center

动作按钮是按钮,因此合理地将btnbtn-default类分配给它们,我们还想在按钮之间保持一致的间距,因此我们应用ml-3,并且为了在按钮内对齐图标和文本,我们使用flex justify-center items-center。此外,为了允许主题开发者设置特定的类名以挂钩,我们在索引和详情视图中都应用了detached-action-button

在这些类的基础上,DetachedAction类提供了默认的btn-primary,这将给按钮提供默认的按钮颜色,即在默认Nova主题中为蓝色。

开发人员可以在运行时添加类,使用DetachedAction类上的extraClassesWithDefault()extraClasses()方法。

extraClassesWithDefault() 方法

如果您想保留默认的类但添加额外的类,那么您可能需要使用此方法。您可以传递一个包含单个类名的数组或由空格分隔的多个类名。

return [
    (new ImportUsers)->extraClassesWithDefault('bg-info')
];

extraClasses() 方法

您可以使用任何 tailwind/nova 类。

return [
   (new ImportUsers)->extraClasses('bg-logo text-white hover:black')
];

添加图标

您可以通过指定小写的图标名称来使用任何 104 个 Heroicon 图标。

return [
   (new ImportUsers)->icon('add')
];

您还可以使用 iconClasses 来自定义该图标的显示。

return [
   (new ImportUsers)->icon('upload')->iconClasses('mr-3 -ml-2')
];

screenshot

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件