From 9ba6dda8bf8afc8457e02d124b09ba8adcb44e56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 6 Aug 2023 10:13:33 -0400 Subject: [PATCH] handle delete/restore/edit messages --- public/src/client/chats/messages.js | 21 +++++++++++++++++++++ src/messaging/data.js | 6 +++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/public/src/client/chats/messages.js b/public/src/client/chats/messages.js index 724a23bbf0..3f961f8865 100644 --- a/public/src/client/chats/messages.js +++ b/public/src/client/chats/messages.js @@ -263,6 +263,12 @@ define('forum/chats/messages', [ const self = parseInt(message.fromuid, 10) === parseInt(app.user.uid, 10); message.self = self ? 1 : 0; messages.parseMessage(message, function (html) { + const parentEl = $(`[component="chat/message/parent"][data-parent-mid="${message.mid}"]`); + if (parentEl.length) { + parentEl.find('[component="chat/message/parent/content"]').html( + html.find('[component="chat/message/body"]').html() + ); + } const msgEl = components.get('chat/message', message.mid); if (msgEl.length) { msgEl.replaceWith(html); @@ -274,21 +280,36 @@ define('forum/chats/messages', [ function onChatMessageDeleted(messageId) { const msgEl = components.get('chat/message', messageId); + const parentEl = $(`[component="chat/message/parent"][data-parent-mid="${messageId}"]`); const isSelf = parseInt(msgEl.attr('data-uid'), 10) === app.user.uid; + const isParentSelf = parseInt(parentEl.attr('data-uid'), 10) === app.user.uid; msgEl.toggleClass('deleted', true); + parentEl.toggleClass('deleted', true); if (!isSelf) { msgEl.find('[component="chat/message/body"]') .translateHtml('

[[modules:chat.message-deleted]]

'); } + if (!isParentSelf) { + parentEl.find('[component="chat/message/parent/content"]') + .translateHtml('

[[modules:chat.message-deleted]]

'); + } } function onChatMessageRestored(message) { const msgEl = components.get('chat/message', message.messageId); + const parentEl = $(`[component="chat/message/parent"][data-parent-mid="${message.messageId}"]`); const isSelf = parseInt(msgEl.attr('data-uid'), 10) === app.user.uid; + const isParentSelf = parseInt(parentEl.attr('data-uid'), 10) === app.user.uid; msgEl.toggleClass('deleted', false); + parentEl.toggleClass('deleted', false); + if (!isParentSelf) { + parentEl.find('[component="chat/message/parent/content"]') + .translateHtml(message.content); + } if (!isSelf) { msgEl.find('[component="chat/message/body"]') .translateHtml(message.content); + messages.onMessagesAddedToDom(components.get('chat/message', message.messageId)); } } diff --git a/src/messaging/data.js b/src/messaging/data.js index 81d41e047a..94d9c37e8c 100644 --- a/src/messaging/data.js +++ b/src/messaging/data.js @@ -133,7 +133,7 @@ module.exports = function (Messaging) { } parentMids = _.uniq(parentMids); const parentMessages = await Messaging.getMessagesFields(parentMids, [ - 'fromuid', 'content', 'timestamp', + 'fromuid', 'content', 'timestamp', 'deleted', ]); const parentUids = _.uniq(parentMessages.map(msg => msg && msg.fromuid)); const usersMap = _.zipObject( @@ -142,6 +142,10 @@ module.exports = function (Messaging) { ); await Promise.all(parentMessages.map(async (parentMsg) => { + if (parentMsg.deleted && parentMsg.fromuid !== parseInt(uid, 10)) { + parentMsg.content = `

[[modules:chat.message-deleted]]

`; + return; + } const foundMsg = messages.find(msg => parseInt(msg.mid, 10) === parseInt(parentMsg.mid, 10)); if (foundMsg) { parentMsg.content = foundMsg.content;