From b682202d0cdd2a4e6ccbeb881254967bc059c793 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Fri, 1 Nov 2024 16:50:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=A3=E6=9E=90=E6=B8=B2=E6=9F=93:?= =?UTF-8?q?=20email.updated;=20email.inbound.received?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/channel/bubbleMsgUtils.js | 37 +++++++++++-------- src/stores/ConversationStore.js | 5 ++- .../Online/Components/BubbleEmail.jsx | 18 ++++----- .../Conversations/Online/MessagesList.jsx | 2 +- 4 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/channel/bubbleMsgUtils.js b/src/channel/bubbleMsgUtils.js index 013dfac..26e7215 100644 --- a/src/channel/bubbleMsgUtils.js +++ b/src/channel/bubbleMsgUtils.js @@ -278,11 +278,12 @@ const emailMsgMapped = { 'email.inbound.received': { getMsg: (result) => { console.log('email.inbound.received', result); - return isEmpty(result?.emailMessage) ? null : { ...result.emailMessage, conversationid: result.conversationid }; + return isEmpty(result?.emailMessage) ? null : { ...result.emailMessage, conversationid: result.conversationid, }; }, contentToRender: (contentObj) => { console.log('email.inbound.received to render', contentObj); // const contentObj = result?.emailMessage || result; // debug: + return parseRenderMessageItem(contentObj); }, contentToUpdate: (msgcontent) => null, }, @@ -290,14 +291,14 @@ const emailMsgMapped = { getMsg: (result) => { console.log('email.updated', result); const { emailMessage } = result; - return isEmpty(result?.emailMessage) ? null : { ...emailMessage, conversationid: result.conversationid, type: 'email', status: emailMessage.msgstatus }; + return isEmpty(result?.emailMessage) ? null : { ...emailMessage, conversationid: result.conversationid, }; }, contentToRender: (contentObj) => null, contentToUpdate: (msgcontent) => ({ ...msgcontent, - ...parseRenderMessageItem({...msgcontent, type: 'email'}), + ...parseRenderMessageItem({...msgcontent, }), id: msgcontent.id, - status: msgStatusRenderMapped[(msgcontent?.msgstatus || 'failed')], + status: msgStatusRenderMapped[(msgcontent?.status || 'failed')], sender: 'me', dateString: msgcontent.status==='failed' ? `发送失败 ❌` : '', }), @@ -554,11 +555,11 @@ export const whatsappMsgTypeMapped = { }, email: { type: 'email', - data: (msg) => ({ id: msg.id || msg.uid, subject: msg.email.subject, }), + data: (msg) => ({ id: msg.id || msg.uid, subject: msg.subject, }), renderForReply: (msg) => { return { id: msg.id, - message: `[邮件] ${msg.email.subject}`, + message: `[邮件] ${msg.subject}`, }; }, }, @@ -653,7 +654,11 @@ export const parseRenderMessageList = (messages) => { sender: msgContent.from, senderName: msgContent?.customerProfile?.name || 'me', // msgContent.from, replyButton: ['text', 'document', 'image', 'email'].includes(msgContent.type) && (msgContent?.status || '') !== 'failed', - forwarded: ['text', 'email'].includes(msgContent.type) && (msgContent?.status || 'failed') === 'failed', // 用forwarded表示Resend, 与Reply互斥 // debug: email, failed + // 用forwarded表示Resend, 与Reply互斥 // debug: email, failed + forwarded: msg.msg_direction === 'outbound' + && msg.msg_source === 'email' + && ['email'].includes(msgContent.type) + && (msgContent?.status || 'failed') === 'failed', ...(msg.msg_direction === 'outbound' ? { sender: 'me', @@ -664,19 +669,19 @@ export const parseRenderMessageList = (messages) => { statusTitle: msgStatusRenderMappedCN[msgContent?.status || 'failed'], } : {}), - ...((isEmpty(messageorigin) && (isEmpty(msgContent.context) || msgContent.context?.forwarded === true)) - // ...((isEmpty(msg.context) && isEmpty(msg.reaction)) || msg.context?.forwarded === true || isEmpty(messageorigin) - // ...((isEmpty(messageorigin) || isEmpty(msgContent.context)) - ? {} + ...(isEmpty(messageorigin) && (isEmpty(msgContent.context) || msgContent.context?.forwarded === true) + ? // ...((isEmpty(msg.context) && isEmpty(msg.reaction)) || msg.context?.forwarded === true || isEmpty(messageorigin) + // ...((isEmpty(messageorigin) || isEmpty(msgContent.context)) + {} : { reply: { message: messageorigin?.text?.body || messageorigin?.text, title: messageorigin?.customerProfile?.name || messageorigin?.senderName || 'me', - ...(typeof whatsappMsgTypeMapped[(messageorigin?.type || 'unsupported')]?.renderForReply === 'function' - ? whatsappMsgTypeMapped[(messageorigin?.type || 'unsupported')].renderForReply(messageorigin) + ...(typeof whatsappMsgTypeMapped[messageorigin?.type || 'unsupported']?.renderForReply === 'function' + ? whatsappMsgTypeMapped[messageorigin?.type || 'unsupported'].renderForReply(messageorigin) : {}), - titleColor: messageorigin?.customerProfile?.name ? '#a791ff' : "#128c7e", - // titleColor: msg.messageorigin_direction === 'inbound' ? '#a791ff' : "#128c7e", + // titleColor: messageorigin?.customerProfile?.name ? '#a791ff' : '#128c7e', + titleColor: msg.messageorigin_direction === 'inbound' ? '#a791ff' : "#128c7e", id: msgContent.context?.id || msgContent.context?.message_id || msgContent.reaction?.message_id || messageorigin?.wamid, }, origin: messageorigin, @@ -684,7 +689,7 @@ export const parseRenderMessageList = (messages) => { // conversationid: conversationid, // title: msg.customerProfile.name, whatsapp_msg_type: (msg.msg_source || 'WABA') === 'WABA' ? msgContent.type : '', // 1.0接口没有msg_source - }; + } }); }; export const whatsappError = { diff --git a/src/stores/ConversationStore.js b/src/stores/ConversationStore.js index b835e22..9514d09 100644 --- a/src/stores/ConversationStore.js +++ b/src/stores/ConversationStore.js @@ -159,7 +159,10 @@ const websocketSlice = (set, get) => ({ const msgRender = receivedMsgTypeMapped[resultType].contentToRender(msgObj); const msgUpdate = receivedMsgTypeMapped[resultType].contentToUpdate(msgObj); console.log('msgRender msgUpdate', msgRender, msgUpdate); - if (['whatsapp.message.updated', 'message', 'error'].includes(resultType)) { + if ([ + 'whatsapp.message.updated', 'message', 'error', + 'email.updated', + ].includes(resultType)) { updateMessageItem(msgUpdate); } if (!isEmpty(msgRender)) { diff --git a/src/views/Conversations/Online/Components/BubbleEmail.jsx b/src/views/Conversations/Online/Components/BubbleEmail.jsx index 2b18da8..b87bc5c 100644 --- a/src/views/Conversations/Online/Components/BubbleEmail.jsx +++ b/src/views/Conversations/Online/Components/BubbleEmail.jsx @@ -5,16 +5,16 @@ import { MessageBox } from 'react-chat-elements'; import { groupBy, isEmpty, } from '@/utils/commons'; import { postResendEmail } from '@/actions/EmailActions'; -const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => { +const BubbleEmail = ({ onOpenEditor, onOpenEmail, ...message }) => { const RenderText = memo(function renderText({ className, email, sender }) { return (
handlePreview(message)} className={`text-sm leading-5 emoji-text whitespace-pre-wrap cursor-pointer ${className}`} key={'msg-text'}> {sender === 'me' &&
From: {email.from}
}
To: {email.to}
-
Subject: {email.email.subject}
+
Subject: {email.subject}

-
{email.email.abstract}
+
{email.abstract}
); }); @@ -31,7 +31,7 @@ const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => { return ( @@ -40,7 +40,7 @@ const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => { From: {/* {message?.emailOrigin?.fromName} <{message?.emailOrigin.fromEmail}> */} - {message.msgtext?.from} + {message.msgOrigin?.from} @@ -48,11 +48,11 @@ const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => { // titleColor={message.sender !== 'me' ? '#4f46e5' : ''} // 600 notch={false} position={message.sender === 'me' ? 'right' : 'left'} - onReplyClick={() => onOpenEditor(message.msgtext)} - onForwardClick={ () => { handleResend(message.msgtext); }} + onReplyClick={() => onOpenEditor(message.msgOrigin)} + onForwardClick={ () => { handleResend(message.msgOrigin); }} onOpen={() => handlePreview(message)} onTitleClick={() => handlePreview(message)} - text={} + text={} {...(message.sender === 'me' ? { styles: { backgroundColor: '#e0e7ff', boxShadow: 'none', border: '1px solid #818cf8' }, // 100 400 @@ -67,4 +67,4 @@ const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => { /> ); }; -export default ChatboxEmail; +export default BubbleEmail; diff --git a/src/views/Conversations/Online/MessagesList.jsx b/src/views/Conversations/Online/MessagesList.jsx index 3c71925..31c3193 100644 --- a/src/views/Conversations/Online/MessagesList.jsx +++ b/src/views/Conversations/Online/MessagesList.jsx @@ -67,7 +67,7 @@ const MessagesList = ({ messages, handlePreview, reference, longListLoading, get {messages.map((message, index) => ( (messageRefs.current[index] = el)} - key={`${message.sn}.${message.id}`} + key={`${message.type}.${message.id}`} {...message} /> ))}