diff --git a/app/Filament/Jabali/Pages/Logs.php b/app/Filament/Jabali/Pages/Logs.php index 674878f..49c33b4 100644 --- a/app/Filament/Jabali/Pages/Logs.php +++ b/app/Filament/Jabali/Pages/Logs.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace App\Filament\Jabali\Pages; -use App\Models\AuditLog; +use App\Filament\Jabali\Widgets\ActivityLogTable; use App\Services\Agent\AgentClient; use BackedEnum; use Filament\Actions\Action; @@ -16,6 +16,7 @@ use Filament\Notifications\Notification; use Filament\Pages\Page; use Filament\Schemas\Components\Tabs; use Filament\Schemas\Components\Tabs\Tab; +use Filament\Schemas\Components\EmbeddedTable; use Filament\Schemas\Components\View; use Filament\Schemas\Schema; use Illuminate\Contracts\Support\Htmlable; @@ -119,7 +120,7 @@ class Logs extends Page implements HasActions, HasForms 'activity' => Tab::make(__('Activity Log')) ->icon('heroicon-o-clipboard-document-list') ->schema([ - View::make('filament.jabali.pages.logs-tab-activity'), + EmbeddedTable::make(ActivityLogTable::class), ]), ]), ]); @@ -227,15 +228,6 @@ class Logs extends Page implements HasActions, HasForms ->send(); } - public function getActivityLogs() - { - return AuditLog::query() - ->where('user_id', Auth::id()) - ->latest() - ->limit(50) - ->get(); - } - public function generateStats(): void { if (! $this->selectedDomain) { diff --git a/app/Filament/Jabali/Widgets/ActivityLogTable.php b/app/Filament/Jabali/Widgets/ActivityLogTable.php new file mode 100644 index 0000000..7138142 --- /dev/null +++ b/app/Filament/Jabali/Widgets/ActivityLogTable.php @@ -0,0 +1,79 @@ +query( + AuditLog::query() + ->where('user_id', Auth::id()) + ->latest() + ) + ->columns([ + TextColumn::make('created_at') + ->label(__('Time')) + ->dateTime('M d, H:i') + ->color('gray'), + TextColumn::make('category') + ->label(__('Category')) + ->badge() + ->color(fn (string $state): string => match ($state) { + 'domain' => 'info', + 'email' => 'primary', + 'database' => 'warning', + 'auth' => 'gray', + 'firewall' => 'danger', + 'service' => 'success', + default => 'gray', + }), + TextColumn::make('action') + ->label(__('Action')) + ->badge() + ->color(fn (string $state): string => match ($state) { + 'create', 'created' => 'success', + 'update', 'updated' => 'warning', + 'delete', 'deleted' => 'danger', + 'login' => 'info', + default => 'gray', + }), + TextColumn::make('description') + ->label(__('Description')) + ->limit(60) + ->wrap(), + TextColumn::make('ip_address') + ->label(__('IP')) + ->color('gray'), + ]) + ->defaultPaginationPageOption(25) + ->striped() + ->emptyStateHeading(__('No activity recorded yet')) + ->emptyStateDescription(__('Recent actions performed in your account will appear here.')) + ->emptyStateIcon('heroicon-o-clipboard-document-list'); + } + + public function render() + { + return $this->getTable()->render(); + } +} diff --git a/resources/views/filament/jabali/pages/logs-tab-activity.blade.php b/resources/views/filament/jabali/pages/logs-tab-activity.blade.php deleted file mode 100644 index 7f7e58f..0000000 --- a/resources/views/filament/jabali/pages/logs-tab-activity.blade.php +++ /dev/null @@ -1,35 +0,0 @@ - - {{ __('Activity Log') }} - {{ __('Recent actions performed in your account.') }} - -
- - - - - - - - - - - - @forelse($this->getActivityLogs() as $log) - - - - - - - - @empty - - - - @endforelse - -
{{ __('Time') }}{{ __('Category') }}{{ __('Action') }}{{ __('Description') }}{{ __('IP') }}
{{ $log->created_at?->format('Y-m-d H:i') }}{{ $log->category }}{{ $log->action }}{{ $log->description }}{{ $log->ip_address }}
- {{ __('No activity recorded yet.') }} -
-
-