From 1f09ff1942ef3e429a4b61345ab22ac2d06fad0a Mon Sep 17 00:00:00 2001 From: Sami Mazouz Date: Fri, 22 Aug 2025 13:57:04 +0100 Subject: [PATCH] fix: delete conversation when no messages are left --- .../js/src/forum/utils/MessageControls.tsx | 16 ++++++++++++++++ extensions/messages/src/DialogMessage.php | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/extensions/messages/js/src/forum/utils/MessageControls.tsx b/extensions/messages/js/src/forum/utils/MessageControls.tsx index 2ccf3b6f8..c008417a2 100644 --- a/extensions/messages/js/src/forum/utils/MessageControls.tsx +++ b/extensions/messages/js/src/forum/utils/MessageControls.tsx @@ -59,6 +59,22 @@ const MessageControls = { return message.delete().then(() => { context.attrs.state.remove(message); + + const noMessagesLeft = + context.attrs.state.getAllItems().filter((m) => { + const mDialog = m.dialog(); + const messageDialog = message.dialog(); + + if (!mDialog || !messageDialog) return false; + + return mDialog?.id() === messageDialog!.id(); + }).length === 0; + + if (noMessagesLeft && message.dialog()) { + app.dialogs.remove(message.dialog()!); + m.route.set(app.route('messages')); + } + m.redraw(); }); }, diff --git a/extensions/messages/src/DialogMessage.php b/extensions/messages/src/DialogMessage.php index ae5ae99e3..653af2e88 100644 --- a/extensions/messages/src/DialogMessage.php +++ b/extensions/messages/src/DialogMessage.php @@ -70,6 +70,18 @@ class DialogMessage extends AbstractModel implements Formattable ->toSql() .')'); }); + + static::deleted(function (self $message) { + if ($message->dialog) { + if ($message->dialog->messages()->count() === 0) { + $message->dialog->delete(); + } elseif ($message->dialog->first_message_id === $message->id) { + $message->dialog->setFirstMessage( + $message->dialog->messages()->oldest('id')->first() + ); + } + } + }); } public function dialog(): BelongsTo