From 01e39b5c4e3a5a1f9a7359a205de0f07559bb47d Mon Sep 17 00:00:00 2001 From: Heitor Tanoue <68477006+heitortanoue@users.noreply.github.com> Date: Thu, 6 Jul 2023 15:26:05 -0300 Subject: [PATCH] fix: Last message appears in extended view after deletion (#29624) Co-authored-by: Matheus Barbosa Silva <36537004+matheusbsilva137@users.noreply.github.com> --- .changeset/modern-geese-laugh.md | 5 +++++ .../app/lib/server/functions/deleteMessage.ts | 20 ++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 .changeset/modern-geese-laugh.md diff --git a/.changeset/modern-geese-laugh.md b/.changeset/modern-geese-laugh.md new file mode 100644 index 00000000000..acae2927ab4 --- /dev/null +++ b/.changeset/modern-geese-laugh.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: Last message appears in extended view after deletion diff --git a/apps/meteor/app/lib/server/functions/deleteMessage.ts b/apps/meteor/app/lib/server/functions/deleteMessage.ts index d4e2f8c4750..2c08cac6d02 100644 --- a/apps/meteor/app/lib/server/functions/deleteMessage.ts +++ b/apps/meteor/app/lib/server/functions/deleteMessage.ts @@ -68,26 +68,28 @@ export async function deleteMessage(message: IMessage, user: IUser): Promise>); + } else { + void api.broadcast('notify.deleteMessage', message.rid, { _id: message._id }); + } + const room = await Rooms.findOneById(message.rid, { projection: { lastMessage: 1, prid: 1, mid: 1, federated: 1 } }); - await callbacks.run('afterDeleteMessage', deletedMsg, room); // update last message if (settings.get('Store_Last_Message')) { if (!room?.lastMessage || room.lastMessage._id === message._id) { - await Rooms.resetLastMessageById(message.rid, deletedMsg); + const lastMessageNotDeleted = await Messages.getLastVisibleMessageSentWithNoTypeByRoomId(message.rid); + await Rooms.resetLastMessageById(message.rid, lastMessageNotDeleted); } } + await callbacks.run('afterDeleteMessage', deletedMsg, room); + // decrease message count await Rooms.decreaseMessageCountById(message.rid, 1); - if (showDeletedStatus) { - // TODO is there a better way to tell TS "IUser[username]" is not undefined? - await Messages.setAsDeletedByIdAndUser(message._id, user as Required>); - } else { - void api.broadcast('notify.deleteMessage', message.rid, { _id: message._id }); - } - if (bridges) { void bridges.getListenerBridge().messageEvent('IPostMessageDeleted', deletedMsg, user); }