From 44b13a5ebf6c0da5244fef49e48258512aad2444 Mon Sep 17 00:00:00 2001 From: kusowl Date: Tue, 17 Feb 2026 11:49:49 +0530 Subject: [PATCH] fix: disply chats in sidebar, minor ui issues --- app/Actions/SendMessageAction.php | 6 +++- app/Http/Controllers/ChatController.php | 6 ++-- app/Models/Inbox.php | 12 ++++++-- resources/js/message.js | 2 +- .../components/chat/message-box.blade.php | 11 ++++--- .../views/components/chat/message.blade.php | 3 +- .../components/chat/sidebar-item.blade.php | 8 ++--- .../components/explore/profile-menu.blade.php | 8 +++++ .../views/dashboards/user/chat.blade.php | 29 ++++++++++++------- 9 files changed, 56 insertions(+), 29 deletions(-) diff --git a/app/Actions/SendMessageAction.php b/app/Actions/SendMessageAction.php index 1b7c292..d270013 100644 --- a/app/Actions/SendMessageAction.php +++ b/app/Actions/SendMessageAction.php @@ -15,13 +15,17 @@ public function __construct(private CreateOrGetInboxAction $inboxAction) {} public function execute(User $sender, User $recipient, array $data): void { // find the inbox between the two users + \DB::beginTransaction(); $inbox = $this->inboxAction->execute($recipient, $sender); + $inbox->last_message = $data['message']; + $inbox->last_user_id = $sender->id; + $inbox->save(); $message = $inbox->messages()->create([ 'message' => $data['message'], 'user_id' => $sender->id, ]); broadcast(new MessageSent($message))->toOthers(); - + \DB::commit(); } } diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 4546d39..88b38f6 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -13,7 +13,8 @@ class ChatController extends Controller // public function index(#[CurrentUser] User $user) { - return view('dashboards.user.chat'); + return view('dashboards.user.chat') + ->with('inboxes', $user->inboxes); } public function show(#[CurrentUser] User $sender, User $recipient, CreateOrGetInboxAction $action) @@ -27,7 +28,8 @@ public function show(#[CurrentUser] User $sender, User $recipient, CreateOrGetIn return view('dashboards.user.chat') ->with('recipient', $recipient) - ->with('chats', $inbox->messages()->latest()->get()); + ->with('inboxes', $sender->inboxes) + ->with('messages', $inbox->messages()->latest()->get()); } /** diff --git a/app/Models/Inbox.php b/app/Models/Inbox.php index f0bf79f..5675f92 100644 --- a/app/Models/Inbox.php +++ b/app/Models/Inbox.php @@ -3,9 +3,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\Relations\HasOne; /** * @property int $id @@ -37,13 +37,19 @@ public function users(): BelongsToMany return $this->belongsToMany(User::class); } - public function lastUser(): HasOne + public function lastUser(): BelongsTo { - return $this->hasOne(User::class, 'id', 'last_user_id'); + return $this->belongsTo(User::class, 'id', 'last_user_id'); } public function messages(): HasMany { return $this->hasMany(Message::class, 'inbox_id'); } + + public function getRecipientAttribute(): User + { + // first user in the relationship that is NOT the authenticated user + return $this->users->where('id', '!=', auth()->id())->first(); + } } diff --git a/resources/js/message.js b/resources/js/message.js index 91d1d1d..4f9eda1 100644 --- a/resources/js/message.js +++ b/resources/js/message.js @@ -23,7 +23,7 @@ export const addMessageToChat = (message, right = false) => { const messagePlaceholder = `
-
+
${message.message}
`; diff --git a/resources/views/components/chat/message-box.blade.php b/resources/views/components/chat/message-box.blade.php index b961a49..6679e01 100644 --- a/resources/views/components/chat/message-box.blade.php +++ b/resources/views/components/chat/message-box.blade.php @@ -1,11 +1,10 @@ -@props(['recipient', 'chats' => []]) - -
+@props(['recipient', 'messages' => []]) + +
- @forelse($chats as $chat) - @ds($chat) - {{$chat->message}} + @forelse($messages as $message) + {{$message->message}} @empty

No Messages Found!

diff --git a/resources/views/components/chat/message.blade.php b/resources/views/components/chat/message.blade.php index cdef15c..4ba36dd 100644 --- a/resources/views/components/chat/message.blade.php +++ b/resources/views/components/chat/message.blade.php @@ -1,6 +1,7 @@ @props(['right' => false])
-
+
{{ $slot }} +
diff --git a/resources/views/components/chat/sidebar-item.blade.php b/resources/views/components/chat/sidebar-item.blade.php index 6f78c4f..e0ba90e 100644 --- a/resources/views/components/chat/sidebar-item.blade.php +++ b/resources/views/components/chat/sidebar-item.blade.php @@ -1,8 +1,8 @@ @props(['avatar', 'name', 'status' => 'inactive', 'message' => '', 'link' => '']) - + {{$avatar}} -
- - +
+ +
diff --git a/resources/views/components/explore/profile-menu.blade.php b/resources/views/components/explore/profile-menu.blade.php index 9b9dc6e..b563fa6 100644 --- a/resources/views/components/explore/profile-menu.blade.php +++ b/resources/views/components/explore/profile-menu.blade.php @@ -22,6 +22,14 @@

Control Panel

+
  • + +
    + +
    +

    Chat

    +
    +
  • @endif diff --git a/resources/views/dashboards/user/chat.blade.php b/resources/views/dashboards/user/chat.blade.php index 7d77b5b..c1358cd 100644 --- a/resources/views/dashboards/user/chat.blade.php +++ b/resources/views/dashboards/user/chat.blade.php @@ -1,16 +1,23 @@ - - - + @forelse($inboxes as $inbox) + + @empty + No chats found ! + @endforelse +
    - @if(isset($recipient)) - - @else -
    -

    Start a chat !

    -
    - @endif - + @if(isset($recipient)) + + @else +
    +

    Start a chat !

    +
    + @endif +