From 63799a76e2c510583c633557b5034db97e8dba84 Mon Sep 17 00:00:00 2001
From: 199ocero <199ocero@gmail.com>
Date: Wed, 17 Jul 2024 10:58:25 +0800
Subject: [PATCH] group message by date
---
.../filachat/components/chat-box.blade.php | 43 ++++++++++++++++---
1 file changed, 36 insertions(+), 7 deletions(-)
diff --git a/resources/views/filachat/components/chat-box.blade.php b/resources/views/filachat/components/chat-box.blade.php
index ecdd30c..9263a57 100644
--- a/resources/views/filachat/components/chat-box.blade.php
+++ b/resources/views/filachat/components/chat-box.blade.php
@@ -37,13 +37,32 @@ class="flex flex-col-reverse flex-1 p-5 overflow-y-auto">
@foreach ($messages as $index => $message)
+ @php
+ $nextMessage = $messages[$index + 1] ?? null;
+ $nextMessageDate = $nextMessage ? \Carbon\Carbon::parse($nextMessage->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('Y-m-d') : null;
+ $currentMessageDate = \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('Y-m-d');
+
+ // Show date badge if the current message is the last one of the day
+ $showDateBadge = $currentMessageDate !== $nextMessageDate;
+ @endphp
+
+ @if ($showDateBadge)
+
+
+ {{ \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('F j, Y') }}
+
+
+ @endif
@if ($message->senderable_id !== auth()->user()->id)
@php
+ $previousMessageDate = isset($messages[$index - 1]) ? \Carbon\Carbon::parse($messages[$index - 1]->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('Y-m-d') : null;
+
+ $currentMessageDate = \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('Y-m-d');
+
$previousSenderId = $messages[$index - 1]->senderable_id ?? null;
- // Show avatar if the current message is the first in a consecutive sequence
- $showAvatar =
- $message->senderable_id !== auth()->user()->id &&
- $message->senderable_id !== $previousSenderId;
+
+ // Show avatar if the current message is the first in a consecutive sequence or a new day
+ $showAvatar = $message->senderable_id !== auth()->user()->id && ($message->senderable_id !== $previousSenderId || $currentMessageDate !== $previousMessageDate);
@endphp
@@ -57,7 +76,7 @@ class="flex flex-col-reverse flex-1 p-5 overflow-y-auto">
{{ $message->message }}
- {{ \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('g:i A') }}
+ {{ \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('F j, Y') }}
@@ -67,12 +86,22 @@ class="flex flex-col-reverse flex-1 p-5 overflow-y-auto">
{{ $message->message }}
- {{ \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('g:i A') }}
+ {{ \Carbon\Carbon::parse($message->created_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('F j, Y') }}
+
Seen at
- {{ \Carbon\Carbon::parse($message->last_read_at)->setTimezone(config('filachat.timezone', 'app.timezone'))->format('g:i A') }}
+ @php
+ $lastReadAt = \Carbon\Carbon::parse($message->last_read_at)->setTimezone(config('filachat.timezone', 'app.timezone'));
+
+ if ($lastReadAt->isToday()) {
+ $date = $lastReadAt->format('g:i A');
+ } else {
+ $date = $lastReadAt->format('M d, Y g:i A');
+ }
+ @endphp
+ {{ $date }}