feat: dropdown de mensajes muestra conversaciones sin responder
- HeaderComposer ahora muestra conversaciones donde el último mensaje es del otro usuario (pendiente de respuesta), no solo mensajes no leídos - El badge refleja el conteo de conversaciones pendientes - Al responder desde el chat, se dispara chat:replied para quitar la conversación del dropdown en tiempo real - El badge en tiempo real solo incrementa si es una conversación nueva Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,18 +15,25 @@ class HeaderComposer
|
||||
|
||||
$userId = auth()->id();
|
||||
|
||||
// Últimas conversaciones con mensajes no leídos
|
||||
$unreadConversations = Message::where('receiver_id', $userId)
|
||||
->whereNull('read_at')
|
||||
// Conversaciones donde el último mensaje es del otro usuario (pendiente de respuesta)
|
||||
$pendingConversations = Message::where(function ($q) use ($userId) {
|
||||
$q->where('receiver_id', $userId)
|
||||
->orWhere('user_id', $userId);
|
||||
})
|
||||
->with('sender')
|
||||
->orderBy('created_at', 'desc')
|
||||
->get()
|
||||
->unique('user_id')
|
||||
->groupBy(function ($msg) use ($userId) {
|
||||
return $msg->user_id === $userId ? $msg->receiver_id : $msg->user_id;
|
||||
})
|
||||
->filter(function ($msgs) use ($userId) {
|
||||
return $msgs->first()->user_id !== $userId;
|
||||
})
|
||||
->map(fn($msgs) => $msgs->first())
|
||||
->take(5);
|
||||
|
||||
$unreadMessagesCount = Message::where('receiver_id', $userId)
|
||||
->whereNull('read_at')
|
||||
->count();
|
||||
$unreadConversations = $pendingConversations;
|
||||
$unreadMessagesCount = $pendingConversations->count();
|
||||
|
||||
// Notificaciones no leídas
|
||||
$unreadNotifications = auth()->user()
|
||||
|
||||
Reference in New Issue
Block a user