striped() ->columns([ IconColumn::make('sport.icon') ->label('') ->width('1rem') ->size(IconSize::ExtraLarge) ->icon(fn ($record) => $record->sport->icon) ->tooltip(fn ($record) => $record->id), MatchIds::make('match_ids'), TextColumn::make('id')->hidden()->searchable(), TextColumn::make('betsapi_id')->hidden()->searchable(), TextColumn::make('betradar_id')->hidden()->searchable(), TextColumn::make('bet365_id')->hidden()->searchable(), TextColumn::make('bwin_id')->hidden()->searchable(), TextColumn::make('starttime') ->label('Start') ->alignCenter() ->dateTime('H:i') ->weight(FontWeight::Bold) ->description(fn ($state): string => Carbon::createFromDate($state)->format('d. M')), TextColumn::make('country.name') ->searchable() ->color('gray') ->label('Event') ->icon(fn ($record) => $record->country->icon) ->description(fn ($record) => $record->competition_group->name), TextColumn::make('home.name') ->searchable() ->alignRight(), TextColumn::make('away.name') ->searchable(), Columns3way::make('odds3way')->label(fn () => view('filament.tables.columns.multiline.labels')), ]) ->poll('10s') ->defaultSort('starttime', 'ASC') ->filters([ Filter::make('events') ->schema([ Select::make('country_id') ->label('Country') ->searchable() ->preload() ->options(function () { $res = Event::query()->where('starttime', '>', Carbon::now())->groupBy('country_id')->pluck('country_id')->toArray(); return Country::query()->whereIn('tx_id', $res)->pluck('name', 'tx_id'); }) ->live() ->reactive() ->afterStateUpdated(function (callable $set) { $set('competition_group_id', null); }), Select::make('competition_group_id') ->label('League') ->multiple() ->columnSpan(2) ->searchable() ->options(function (Get $get) { if ($get('country_id')) { $res = Event::with('country')->with('competition_group')->where('country_id', $get('country_id'))->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); } else { $res = Event::with('country')->with('competition_group')->where('starttime', '>', Carbon::now())->groupBy('competition_group_id')->get(); } $arr = []; foreach ($res as $val) { $arr[$val->competition_group_id] = $val->country->name.' - '.$val->competition_group->name; } asort($arr); return $arr; }) ->live(), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['country_id'], fn (Builder $query, $sport_id) => $query->where('country_id', $sport_id) )->when( $data['competition_group_id'], fn (Builder $query, $competition_group_id) => $query->whereIn('competition_group_id', $competition_group_id) ); }) ->columns(6)->columnSpan(6), ], layout: FiltersLayout::AboveContent) ->filtersFormColumns(6) ->deferFilters(false) ->persistFiltersInSession() ->recordActions([ ActionGroup::make([ // EditAction::make(), // DeleteAction::make(), Action::make('txodds_odds') ->label('TxOdds') ->disabled(fn () => ! auth()->user()->super_admin) ->icon('heroicon-o-arrow-top-right-on-square') ->url(fn ($record): string => route('txodds_odds', ['sportid' => $record->sport_id, 'txoddsid' => $record->id])) ->openUrlInNewTab(), ])->iconButton() ->icon('heroicon-m-ellipsis-vertical') ->color('primary'), ]); } }