nemrutco/nova-global-filter

此包已弃用,不再维护。未建议替代包。

此包允许您将现有的Laravel Nova过滤器广播到指标或自定义卡片。

安装次数: 125,061

依赖: 2

建议者: 0

安全: 0

星级: 40

关注者: 2

分支: 27

开放问题: 8

语言:Vue

v1.3.0 2023-03-08 06:09 UTC

This package is auto-updated.

Last update: 2023-12-08 07:47:20 UTC


README

此包允许您将现有的Laravel Nova过滤器广播到指标或自定义卡片。

screenshot

安装

您可以使用Composer将此包安装到使用Nova的Laravel应用程序中

composer require nemrutco/nova-global-filter

使用

在本例中,我们注册了一些带有日期过滤器的Metric CardsGlobal Filter

...
use Nemrutco\NovaGlobalFilter\NovaGlobalFilter;
use App\Nova\Filters\Date;

class Store extends Resource
{
  ...
  public function cards(Request $request)
  {
    return [
      new TotalSales // Value Metric

      new Orders, // Trend Metric

      new MostSoldProduct, // Partition Metric

      // NovaGlobalFilter
      new NovaGlobalFilter([
        new Date, // Date Filter
      ]),
    ];
  }
  ...
}

现在,任何优化以监听GlobalFiltermetric cards或其他卡片都可以使用GlobalFilterable特性和调用$this->globalFiltered($model,$filters)方法进行过滤。

globalFiltered($model, $filters = [])方法需要$model$filters参数

use Nemrutco\NovaGlobalFilter\GlobalFilterable;
use App\Nova\Filters\Date;
...

class UsersPerDay extends Trend
{
use GlobalFilterable;

  public function calculate(NovaRequest $request)
  {
    // Filter your model with existing filters
    $model = $this->globalFiltered($request, Store::class,[
      Date::class // DateFilter
    ]);

    // Do your thing with the filtered $model
    return $this->countByDays($request, $model);

  }
...
}

就是这样。卡片将根据传递的过滤器值进行过滤。

如果您想在初始请求上应用默认值,请确保在您的过滤器中设置默认值

...
// set default date
public function default()
{
    return Carbon::now();
}
...

将布局从grid更改为inline

默认设置为grid

screenshot

...
(new NovaGlobalFilter([
    // Filters
]))->inline(),
...

启用重置按钮

...
(new NovaGlobalFilter([
    // Filters
]))->resettable(),
...

添加多个Global Filter

...
(new NovaGlobalFilter([
    // Filters
]))->inline()->resettable(),

(new NovaGlobalFilter([
    // Filters
]))->onlyOnDetail(),
...

设置全局过滤器的标题

...
(new NovaGlobalFilter([
    // Filters
]))->title('Example Title'),
...

在任意自定义卡片上监听Global Filter

...
created() {
  Nova.$on("global-filter-changed", filter => {
    // Do your thing with the changed filter
    console.log(filter);
  });
},
...

在任意自定义卡片上请求全局过滤器的所有过滤状态

...
  Nova.$emit("global-filter-request");
...

在任意自定义卡片上请求全局过滤器的特定过滤状态

...
created() {
  Nova.$emit("global-filter-request", [
      "App\\Nova\\Filters\\DateFilter",
      "App\\Nova\\Filters\\CountryFilter"
  ]);
},
...

在任意自定义卡片上接收全局过滤器的过滤器状态

...
created() {
  Nova.$on("global-filter-response", filters => {
    // Do your thing with the filters
    console.log(filters);
  });
},
...

值得了解的事

  • 此包的基本功能是监听所有分配的过滤器。一旦某个过滤器的值发生变化,它就会作为Nova.$on('global-filter-changed', [changed filter and value])发出。所以任何监听此事件的卡片都会接收到过滤器和其值。
  • 此包覆盖了Nova的默认指标卡片,允许它们监听“global-filter-changed”事件。确保没有与其他包发生冲突。
  • 此包目前不支持索引视图中的过滤器同步。因此,全局过滤器中的过滤器不会在索引视图的“过滤器菜单”中的过滤器上触发更新。
  • 重置按钮只是重新加载当前页面。幕后并没有什么特别之处。
  • 如果您愿意支持此包,非常欢迎您在Github上提供问题、PR和想法。别忘了给包点Star

干杯

用❤️为开源制作

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。