diff --git a/packages/react/src/views/Message/Message.js b/packages/react/src/views/Message/Message.js index dd8cf8d09d..8b6606a790 100644 --- a/packages/react/src/views/Message/Message.js +++ b/packages/react/src/views/Message/Message.js @@ -13,7 +13,12 @@ import { import { Attachments } from '../AttachmentHandler'; import { Markdown } from '../Markdown'; import MessageHeader from './MessageHeader'; -import { useMessageStore, useUserStore, useSidebarStore } from '../../store'; +import { + useMessageStore, + useUserStore, + useSidebarStore, + useChannelStore, +} from '../../store'; import RCContext from '../../context/RCInstance'; import { MessageBody } from './MessageBody'; import { MessageReactions } from './MessageReactions'; @@ -58,6 +63,7 @@ const Message = ({ const pinPermissions = useUserStore( (state) => state.userPinPermissions.roles ); + const editMessagePermissions = useMessageStore( (state) => state.editMessagePermissions.roles ); @@ -72,8 +78,26 @@ const Message = ({ editMessage: state.editMessage, setEditMessage: state.setEditMessage, })); + const setThreadMessages = useMessageStore((state) => state.setThreadMessages); + const isChannelPrivate = useChannelStore((state) => state.isChannelPrivate); const isMe = message.u._id === authenticatedUserId; + const getThreadMessages = async (msgId, callback) => { + if (msgId) { + try { + const { messages } = await RCInstance.getThreadMessages( + msgId, + isChannelPrivate + ); + setThreadMessages(messages); + setTimeout(() => { + callback?.(messages); + }, 0); + } catch (e) { + console.error(e); + } + } + }; const theme = useTheme(); const { mode } = useTheme(); @@ -94,7 +118,6 @@ const Message = ({ const bubbleStyles = useBubbleStyles(isMe); const pinRoles = new Set(pinPermissions); const editMessageRoles = new Set(editMessagePermissions); - const variantStyles = !isInSidebar && variantOverrides === 'bubble' ? bubbleStyles : {}; @@ -116,6 +139,21 @@ const Message = ({ } getStarredMessages(); }; + const deleteThreadMessages = async (messagesToDelete) => { + try { + await Promise.all( + messagesToDelete.map(async (msg) => { + await RCInstance.deleteMessage(msg._id); + }) + ); + } catch (error) { + console.error('Failed to delete messages:', error); + dispatchToastMessage({ + type: 'error', + message: 'Failed to delete messages', + }); + } + }; const handlePinMessage = async (msg) => { const isPinned = msg.pinned; @@ -188,6 +226,12 @@ const Message = ({ type: 'success', message: 'Message deleted successfully', }); + + getThreadMessages(msg._id, async (threadMsgs) => { + if (threadMsgs.length > 0) { + await deleteThreadMessages(threadMsgs); + } + }); } else { dispatchToastMessage({ type: 'error',