recordTitleAttribute('event') ->defaultSort('created_at', 'desc') ->columns([ Tables\Columns\TextColumn::make('created_at') ->label(__('admin.refresh_tokens.audit.performed_at')) ->dateTime() ->sortable(), Tables\Columns\TextColumn::make('event') ->label(__('admin.refresh_tokens.audit.event')) ->badge() ->formatStateUsing(function (?string $state): ?string { if (! $state) { return null; } $key = "admin.refresh_tokens.audit.events.{$state}"; $translated = __($key); return $translated === $key ? $state : $translated; }), Tables\Columns\TextColumn::make('performedBy.name') ->label(__('admin.refresh_tokens.audit.performed_by')) ->placeholder('—') ->toggleable(), Tables\Columns\TextColumn::make('ip_address') ->label(__('admin.refresh_tokens.audit.ip_address')) ->toggleable(), Tables\Columns\TextColumn::make('context') ->label(__('admin.refresh_tokens.audit.context')) ->formatStateUsing(function ($state): string { if (! is_array($state) || empty($state)) { return '—'; } return collect($state) ->filter(fn ($value) => filled($value)) ->map(function ($value, $key) { if (is_array($value)) { $value = json_encode($value); } return "{$key}: {$value}"; }) ->implode(', '); }) ->wrap() ->toggleable(), ]) ->filters([]) ->paginated([10, 25, 50]) ->emptyStateHeading(__('admin.refresh_tokens.audit.empty.heading')) ->emptyStateDescription(__('admin.refresh_tokens.audit.empty.description')); } }