Beboost

Widgets

Display status statistics with widgets

Widgets

The Status Management plugin provides two abstract chart widgets to visualize how records are distributed across statuses: StatusBarChart and StatusPieChart.

Both extend Filament's ChartWidget and declare a single abstract method you must implement — getModel(): string — which returns the Statusable model class the chart should aggregate.

Status Bar Chart

use Beboost\StatusManagement\Filament\Widgets\StatusBarChart;
use App\Models\Order;

class OrderStatusBarChart extends StatusBarChart
{
    protected static ?int $sort = 2;

    public function getModel(): string
    {
        return Order::class;
    }
}

Register the widget in your panel provider (or return it from a resource/page):

public function panel(Panel $panel): Panel
{
    return $panel
        ->widgets([
            OrderStatusBarChart::class,
        ]);
}

Status Pie Chart

use Beboost\StatusManagement\Filament\Widgets\StatusPieChart;
use App\Models\Order;

class OrderStatusPieChart extends StatusPieChart
{
    protected static ?int $sort = 3;

    public function getModel(): string
    {
        return Order::class;
    }
}

Each chart automatically builds its dataset from the statuses configured for the model, using each status's configured color, and appends a No Status slice for records that have no status yet.

Customize the data

Override getData() to post-process the dataset — for example to recolor it or filter the query. Call parent::getData() to start from the package's default aggregation:

class OrderStatusBarChart extends StatusBarChart
{
    public function getModel(): string
    {
        return Order::class;
    }

    protected function getData(): array
    {
        $data = parent::getData();

        // e.g. override the bar colors
        $data['datasets'][0]['backgroundColor'] = ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0'];

        return $data;
    }
}

StatusBarChart and StatusPieChart are Filament ChartWidgets, so all standard Filament widget features apply — $sort, getHeading(), polling, and the built-in getFilters() / $filter date-range filtering.

Next Steps

How is this guide?

On this page