Files
hqland-app/app/Filament/Widgets/RecentNotifications.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.');
}
}