Richard
Richard

Reputation: 190

Tabs badges do not update with new totals

I would like the getTabs function in the ListDelivery.php to updated according to the filters selected in the DeliveryResource.php file. For example when the table results change to show the results based on the filter ie warehouse_id changes to another Warehouse I would like the tabs to recalculate the respective badge totals:

DeliveryResource.php

->filters([
    SelectFilter::make('warehouse_id')
        ->label('Filter by Warehouse')
        ->options(Warehouse::all()->pluck('name', 'id'))
        ->query(function (Builder $query, array $data) {
            if (isset($data['value'])) {
                $query->where('warehouse_id', $data['value']);
            }
            return $query->orderBy('delivery', 'asc');
        }),
    Filter::make('created_at')
        ->label('Filter by Dates')
        ->form([
            DatePicker::make('deliveries_from'),
            DatePicker::make('deliveries_until'),
        ])
        ->query(function (Builder $query, array $data): Builder {
            return $query
                ->when(
                    $data['deliveries_from'],
                    fn (Builder $query, $date): Builder => $query->whereDate('created_at', '>=', $date),
                )
                ->when(
                    $data['deliveries_until'],
                    fn (Builder $query, $date): Builder => $query->whereDate('created_at', '<=', $date),
                );
        }),
])

ListDelivery.php

<?php

namespace App\Filament\Resources\DeliveryResource\Pages;

use App\Filament\Resources\DeliveryResource;
use App\Models\Delivery;
use App\Models\DeliveryStatus;
use Filament\Actions;
use Filament\Resources\Components\Tab;
use Filament\Resources\Pages\ListRecords;
use Illuminate\Database\Eloquent\Builder;

class ListDelivery extends ListRecords
{
    protected static string $resource = DeliveryResource::class;

    public function getTabs(): array
    {
        return [
            'all' => Tab::make('All Deliveries')
                ->badge(Delivery::count()),

            'delivery' => Tab::make('Create Delivery')
                ->query(fn (Builder $query) => $query->where('delivery_status_id', DeliveryStatus::where('name', 'Create Delivery')->first()->id))
                ->badge(Delivery::where('delivery_status_id', DeliveryStatus::where('name', 'Create Delivery')->first()->id)->count()),

            'order_hold' => Tab::make('Orders on Hold')
                ->query(fn (Builder $query) => $query->where('delivery_status_id', DeliveryStatus::where('name', 'Orders on Hold')->first()->id))
                ->badge(Delivery::where('delivery_status_id', DeliveryStatus::where('name', 'Orders on Hold')->first()->id)->count()),

            'urgent_delivery' => Tab::make('Urgent')
                ->query(fn (Builder $query) => $query->where('delivery_status_id', DeliveryStatus::where('name', 'Urgent Delivery')->first()->id))
                ->badge(Delivery::where('delivery_status_id', DeliveryStatus::where('name', 'Urgent Delivery')->first()->id)->count()),

            'authorised_ship' => Tab::make('Authorised to Ship')
                ->query(fn (Builder $query) => $query->where('delivery_status_id', DeliveryStatus::where('name', 'Authorised to Ship')->first()->id))
                ->badge(Delivery::where('delivery_status_id', DeliveryStatus::where('name', 'Authorised to Ship')->first()->id)->count()),

            'complete' => Tab::make('Completed')
                ->query(fn (Builder $query) => $query->where('delivery_status_id', DeliveryStatus::where('name', 'Completed')->first()->id))
                ->badge(Delivery::where('delivery_status_id', DeliveryStatus::where('name', 'Completed')->first()->id)->count()),
        ];
    }

    protected function getHeaderActions(): array
    {
        return [
            Actions\CreateAction::make()
                ->label('Create New Delivery')
                ->authorize(fn () => auth()->user()->hasRole(['Super Administrator', 'Administrator', 'Manager'])),
        ];
    }
}

Upvotes: 0

Views: 26

Answers (0)

Related Questions