digital-creative/nova-dashboard

nova 丢失的仪表板。

资助包维护!
milewski

安装次数: 49,146

依赖项: 1

建议者: 0

安全: 0

星标: 71

关注者: 8

分支: 11

开放问题: 5

语言:Vue

v1.1.3 2024-03-28 03:45 UTC

This package is auto-updated.

Last update: 2024-08-28 04:45:11 UTC


README

Latest Version on Packagist Total Downloads License

Laravel Nova 丢失的仪表板!

安装

您可以通过 composer 安装此包。

composer require digital-creative/nova-dashboard

当前可用的小部件列表

用法

仪表板本身只是一个标准的 Laravel Nova 卡片,因此您可以用作任何资源的卡片或默认的 Nova 仪表板功能。

use DigitalCreative\NovaDashboard\Card\NovaDashboard;
use DigitalCreative\NovaDashboard\Card\View;
use Laravel\Nova\Dashboards\Main as Dashboard;

class Main extends Dashboard
{
    public function cards(): array
    {
        return [
            NovaDashboard::make()
                ->addView('Website Performance', function (View $view) {
                    return $view
                        ->icon('window')
                        ->addWidgets([
                            BounceRate::make(),
                            ConversionRate::make(),
                            WebsiteTraffic::make(),
                            SessionDuration::make(),
                        ])
                        ->addFilters([
                            LocationFilter::make(),
                            UserTypeFilter::make(),
                            DateRangeFilter::make(),
                        ]);
                }),
        ];
    }
}

静态

默认情况下,每个小部件都是可拖动的,用户可以重新排列它。可以通过调用 $view->static() 来禁用此行为。

小部件

小部件负责在视图中显示您的数据;它们本质上就是标准的 Nova 卡片。然而,它们会响应仪表板事件并在过滤器更改时重新加载数据。

一旦您有一个小部件,通常可以这样配置

class MyCustomWidget extends ValueWidget
{
    /**
     * Here you can configure your widget by calling whatever options are available for each widget
     */
    public function configure(NovaRequest $request): void
    {
        $this->icon('<svg>...</svg>');
        $this->title('Session Duration');
        $this->textColor('#f95738');
        $this->backgroundColor('#f957384f');
    }

    /**
     * This function is responsible for returning the actual data that will be shown on the widget,
     * each widget expects its own format, so please refer to the widget documentation 
     */
    public function value(Filters $filters): mixed
    {
        /**
         * $filters contain all the set values from the filters that were shown on the frontend. 
         * You can retrieve them and implement any custom logic you may have.
         */
        $filterValue = $filters->getFilterValue(LikesFilter::class);
        
        return 'example';
    }
}

所有小部件都有配置大小和位置的共同方法。值不是以像素为单位,而是以网格单位表示,范围为 112(对应于 12 列)。

$widget->layout(width: 2, height: 1, x: 0, y: 1);
$widget->minWidth(2);
$widget->minHeight(1);

过滤器

这些是标准的 nova 过滤器类,只有一个简单的不同之处,即默认情况下不会调用 ->apply() 方法。为什么?

use Illuminate\Http\Request;
use Laravel\Nova\Filters\BooleanFilter;

class ExampleFilter extends BooleanFilter
{
    public function apply(Request $request, $query, $value)
    {
        // this function is required however it is not used by the nova-dashboard
    }
}

通常您的 widget ->value() 函数将接收一个 DigitalCreative\NovaDashboard\Filters 实例,该类包含检索任何给定过滤器值的方法,例如

class SessionDuration extends ValueWidget
{
    public function value(Filters $filters): mixed
    {
        $filterA = $filters->getFilterValue(YourFilterClass::class);
        $filterB = $filters->getFilterValue(YourSecondFilterClass::class);
    }
}

然而,如果您想重用您之前在过滤器上设置的逻辑或与仪表板共享现有过滤器,可以调用 ->applyToQueryBuilder() 方法以获得相同的行为

class SessionDuration extends ValueWidget
{
    public function value(Filters $filters): mixed
    {
        $result = $filters->applyToQueryBuilder(User::query())->get();    
    }
}

->applyToQueryBuilder() 将运行每个过滤器通过 nova 的默认过滤逻辑。

⭐️ 表达您的支持

如果此项目对您有帮助,请给予 ⭐️。

您可能还喜欢的其他包

许可证

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