54 lines
1.8 KiB
PHP
54 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Widgets;
|
|
|
|
use Filament\Actions\Action;
|
|
use Filament\Tables;
|
|
use Filament\Tables\Table;
|
|
use Filament\Widgets\TableWidget as BaseWidget;
|
|
|
|
class RecentNotifications extends BaseWidget
|
|
{
|
|
protected int | string | array $columnSpan = 'full';
|
|
protected static ?int $sort = 1;
|
|
|
|
public function table(Table $table): Table
|
|
{
|
|
return $table
|
|
->query(function () {
|
|
$user = auth()->user();
|
|
if (! $user) {
|
|
return \Illuminate\Notifications\DatabaseNotification::query()->whereRaw('1=0');
|
|
}
|
|
return $user->notifications()->whereNull('read_at')->latest()->getQuery();
|
|
})
|
|
->columns([
|
|
Tables\Columns\TextColumn::make('data.title')
|
|
->label('Tiêu đề')
|
|
->badge()
|
|
->color('warning'),
|
|
|
|
Tables\Columns\TextColumn::make('data.message')
|
|
->label('Nội dung')
|
|
->limit(100),
|
|
|
|
Tables\Columns\TextColumn::make('created_at')
|
|
->label('Thờ gian')
|
|
->dateTime('d/m/Y H:i')
|
|
->color('gray'),
|
|
])
|
|
->actions([
|
|
Action::make('markAsRead')
|
|
->label('Đánh dấu đã đọc')
|
|
->icon('heroicon-o-check-circle')
|
|
->color('success')
|
|
->action(function ($record) {
|
|
$record->markAsRead();
|
|
}),
|
|
])
|
|
->paginated([5, 10, 25])
|
|
->emptyStateHeading('Không có thông báo mới')
|
|
->emptyStateDescription('Bạn sẽ nhận được cảnh báo khi có đợt thanh toán sắp đến hạn.');
|
|
}
|
|
}
|