From 64cacad67616db38e4cb33e7efafb7b9d1e7110c Mon Sep 17 00:00:00 2001 From: Alex Justesen <1144087+alexjustesen@users.noreply.github.com> Date: Mon, 8 Dec 2025 11:26:09 -0500 Subject: [PATCH] combine result server columns --- .../Resources/Results/Tables/ResultTable.php | 42 ++++++++++++------- .../Tables/Columns/ResultServerColumn.php | 28 +++++++++++++ lang/en/general.php | 2 + .../columns/result-server-column.blade.php | 7 ++++ 4 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 app/Filament/Tables/Columns/ResultServerColumn.php create mode 100644 resources/views/filament/tables/columns/result-server-column.blade.php diff --git a/app/Filament/Resources/Results/Tables/ResultTable.php b/app/Filament/Resources/Results/Tables/ResultTable.php index c7d8adbe2..6808e9f7d 100644 --- a/app/Filament/Resources/Results/Tables/ResultTable.php +++ b/app/Filament/Resources/Results/Tables/ResultTable.php @@ -4,6 +4,7 @@ use App\Enums\ResultStatus; use App\Filament\Exports\ResultExporter; +use App\Filament\Tables\Columns\ResultServerColumn; use App\Helpers\Number; use App\Models\Result; use Filament\Actions\Action; @@ -49,19 +50,9 @@ public static function table(Table $table): Table ->label(__('results.service')) ->toggleable(isToggledHiddenByDefault: true), - TextColumn::make('data.server.id') - ->label(__('results.server_id')) - ->toggleable(isToggledHiddenByDefault: false) - ->sortable(query: function (Builder $query, string $direction): Builder { - return $query->orderBy('data->server->id', $direction); - }), - - TextColumn::make('data.server.name') - ->label(__('results.server_name')) - ->toggleable(isToggledHiddenByDefault: false) - ->sortable(query: function (Builder $query, string $direction): Builder { - return $query->orderBy('data->server->name', $direction); - }), + ResultServerColumn::make('server') + ->label(__('general.server')) + ->toggleable(isToggledHiddenByDefault: false), TextColumn::make('download') ->label(__('results.download')) @@ -131,7 +122,7 @@ public static function table(Table $table): Table ->label(__('general.created_at')) ->dateTime(config('app.datetime_format')) ->timezone(config('app.display_timezone')) - ->toggleable(isToggledHiddenByDefault: true) + ->toggleable(isToggledHiddenByDefault: false) ->sortable(), ]) ->filters([ @@ -158,6 +149,7 @@ public static function table(Table $table): Table fn (Builder $query, $date): Builder => $query->whereDate('created_at', '<=', $date), ); }), + SelectFilter::make('ip_address') ->label(__('results.ip_address')) ->multiple() @@ -175,6 +167,7 @@ public static function table(Table $table): Table ->toArray(); }) ->attribute('data->interface->externalIp'), + SelectFilter::make('server_name') ->label(__('results.server_name')) ->multiple() @@ -192,6 +185,25 @@ public static function table(Table $table): Table ->toArray(); }) ->attribute('data->server->name'), + + SelectFilter::make('server_id') + ->label(__('results.server_id')) + ->multiple() + ->options(function (): array { + return Result::query() + ->select('data->server->id AS data_server_id') + ->whereNotNull('data->server->id') + ->where('status', '=', ResultStatus::Completed) + ->distinct() + ->orderBy('data->server->id') + ->get() + ->mapWithKeys(function (Result $item, int $key) { + return [$item['data_server_id'] => $item['data_server_id']]; + }) + ->toArray(); + }) + ->attribute('data->server->id'), + TernaryFilter::make('scheduled') ->label(__('results.scheduled')) ->nullable() @@ -203,10 +215,12 @@ public static function table(Table $table): Table false: fn (Builder $query) => $query->where('scheduled', false), blank: fn (Builder $query) => $query, ), + SelectFilter::make('status') ->label(__('general.status')) ->multiple() ->options(ResultStatus::class), + TernaryFilter::make('healthy') ->label(__('general.healthy')) ->nullable() diff --git a/app/Filament/Tables/Columns/ResultServerColumn.php b/app/Filament/Tables/Columns/ResultServerColumn.php new file mode 100644 index 000000000..357951e15 --- /dev/null +++ b/app/Filament/Tables/Columns/ResultServerColumn.php @@ -0,0 +1,28 @@ +serverName = $this->record->server_name; + + return $this->serverName; + } + + public function getServerId(): ?int + { + $this->serverId = $this->record->server_id; + + return $this->serverId; + } +} diff --git a/lang/en/general.php b/lang/en/general.php index 33c212e21..9b8aa7d95 100644 --- a/lang/en/general.php +++ b/lang/en/general.php @@ -37,6 +37,8 @@ 'created_at' => 'Created at', 'updated_at' => 'Updated at', 'url' => 'URL', + 'server' => 'Server', + 'servers' => 'Servers', 'stats' => 'Stats', 'statistics' => 'Statistics', diff --git a/resources/views/filament/tables/columns/result-server-column.blade.php b/resources/views/filament/tables/columns/result-server-column.blade.php new file mode 100644 index 000000000..f16445828 --- /dev/null +++ b/resources/views/filament/tables/columns/result-server-column.blade.php @@ -0,0 +1,7 @@ +
+ {{ $getServerName() }} + + @isset($getServerId) + (#{{ $getServerId() }}) + @endisset +