Files
nuhodds_fi4/app/Filament/Clusters/DynamicData/Resources/ElementProviders/Tables/ElementProvidersTable.php
T
2026-03-04 19:31:33 +01:00

94 lines
3.9 KiB
PHP

<?php
namespace App\Filament\Clusters\DynamicData\Resources\ElementProviders\Tables;
use App\Models\AddByMethod;
use App\Models\Country;
use App\Models\Provider;
use App\Models\Sport;
use Filament\Actions\ActionGroup;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Notifications\Notification;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Enums\FiltersLayout;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;
use Illuminate\Contracts\Database\Eloquent\Builder;
class ElementProvidersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
IconColumn::make('sport.icon')
->label('')
->grow(false)
->color('primary')
->width(30)
->icon(fn ($record) => $record->sport->icon)
->tooltip(fn ($record) => $record->id)
->visibleFrom('lg'),
TextColumn::make('provider.name')->color(fn ($record) => $record->provider->color),
TextColumn::make('element.country.name')
->wrap()
->color('gray')
->icon(fn ($record) => $record->element->country->icon),
TextColumn::make('id')->label('TxId')->alignCenter(),
TextColumn::make('provider_element_id')->label('PrId')->alignCenter(),
TextColumn::make('element_group.competition_group.name')->label('Group'),
TextColumn::make('element.name')->label('TxOdds'),
TextColumn::make('name')->label('Client')->searchable(),
TextColumn::make('add_by_method.name')
->color(fn ($record) => $record->add_by_method->color)
->label('Add By'),
])->filters([
SelectFilter::make('provider_id')
->label('Provider')
->options(Provider::where('bookmaker_id', '>', 0)->pluck('name', 'id')),
SelectFilter::make('sport_id')
->label('Sport')
->options(Sport::where('is_active', 1)->pluck('name', 'id')),
SelectFilter::make('country_id')
->searchable()
->label('Country')
->options(Country::orderBy('name')->pluck('name', 'id'))
->query(function (Builder $query, array $data) {
if (blank($data['value'])) {
return $query;
}
return $query->whereHas('element', function (Builder $query) use ($data) {
return $query->where('country_id', $data['value']);
});
}),
SelectFilter::make('add_by_method_id')
->label('Add By')
->options(AddByMethod::pluck('name', 'id')),
], layout: FiltersLayout::AboveContent)
->deferFilters(false)
->recordActions([
ActionGroup::make([
EditAction::make(),
DeleteAction::make()
->successNotification(
Notification::make()
->success()
->title('Element deleted')
->body('The provider element has been deleted successfully.'),
),
])->iconButton()
->icon('phosphor-dots-three-vertical'),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}