nemrutco / nova-global-filter
此包已弃用,不再维护。未建议替代包。
此包允许您将现有的Laravel Nova过滤器广播到指标或自定义卡片。
v1.3.0
2023-03-08 06:09 UTC
Requires
- php: >=7.1.0
- laravel/nova: ^4.0
README
此包允许您将现有的Laravel Nova过滤器广播到指标或自定义卡片。
安装
您可以使用Composer将此包安装到使用Nova的Laravel应用程序中
composer require nemrutco/nova-global-filter
使用
在本例中,我们注册了一些带有日期过滤器的Metric Cards
和Global 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 ]), ]; } ... }
现在,任何优化以监听GlobalFilter
的metric 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
... (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)。请参阅许可文件以获取更多信息。