recordTitleAttribute('description')
->defaultSort('created_at', 'desc')
->columns([
TextColumn::make('created_at')
->label(__('app.time'))
->dateTime('d/m/Y H:i:s')
->sortable(),
TextColumn::make('user.name')
->label(__('app.user'))
->placeholder(__('app.system')),
TextColumn::make('action')
->label(__('app.action'))
->badge()
->formatStateUsing(fn (string $state): string => match ($state) {
'import' => __('app.action_import'),
'export' => __('app.action_export'),
'transfer' => __('app.action_transfer'),
'close' => __('app.action_close'),
'create' => __('app.action_create'),
'update' => __('app.action_update'),
'delete' => __('app.action_delete'),
default => $state,
})
->color(fn (string $state): string => match ($state) {
'import' => 'info',
'export' => 'success',
'transfer' => 'warning',
'close' => 'success',
'create' => 'info',
'update' => 'gray',
'delete' => 'danger',
default => 'gray',
}),
TextColumn::make('description')
->label(__('app.description'))
->wrap()
->searchable(),
TextColumn::make('metadata')
->label(__('app.details'))
->formatStateUsing(function (?array $state): string {
if (empty($state)) return '';
$lines = [];
foreach ($state as $key => $val) {
if (is_scalar($val)) {
$lines[] = "{$key}: {$val}";
} elseif (is_array($val)) {
$nested = [];
foreach ($val as $k => $v) {
if (is_scalar($v)) {
$nested[] = "{$k}: {$v}";
}
}
$lines[] = "{$key}: " . implode(', ', $nested);
}
}
return implode('
', $lines);
})
->html()
->wrap()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
SelectFilter::make('action')
->label(__('app.action'))
->options([
'import' => __('app.action_import'),
'export' => __('app.action_export'),
'transfer' => __('app.action_transfer'),
'close' => __('app.action_close'),
'create' => __('app.action_create'),
'update' => __('app.action_update'),
'delete' => __('app.action_delete'),
]),
SelectFilter::make('user_id')
->label(__('app.user'))
->relationship('user', 'name'),
])
->actions([])
->bulkActions([]);
}
public static function getPages(): array
{
return [
'index' => ListActivityLogs::route('/'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->with('user')
->orderBy('created_at', 'desc');
}
}