From d07848a401e6a2e0d892e5a057c11968d70597a4 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Sun, 4 Feb 2024 10:40:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=AD=E5=BC=80=E8=BF=9E=E6=8E=A5=E7=8A=B6?= =?UTF-8?q?=E6=80=81;=20=E5=8F=91=E9=80=81=E6=8C=89=E9=92=AE;=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=98=BE=E7=A4=BA=E5=85=B6=E4=BB=96=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E5=8F=91=E9=80=81=E7=9A=84=E5=AE=9E=E6=97=B6=E6=B6=88?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/msgUtils.js | 12 ++++++++++-- src/reducers/ConversationReducer.js | 9 +++++++++ src/utils/utils.js | 1 + src/views/Conversations/Components/InputComposer.jsx | 2 +- src/views/Conversations/Components/Messages.jsx | 2 +- .../Conversations/Components/MessagesHeader.jsx | 2 +- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/lib/msgUtils.js b/src/lib/msgUtils.js index c9710dc..563266c 100644 --- a/src/lib/msgUtils.js +++ b/src/lib/msgUtils.js @@ -79,7 +79,14 @@ const whatsappMsgMapped = { // * 仅更新消息状态, 没有输出 return null; }, - contentToUpdate: (msgcontent) => ({ ...msgcontent, id: msgcontent.wamid, status: msgStatusRenderMapped[(msgcontent?.status || 'failed')], dateString: msgcontent.status==='failed' ? '发送失败 ❌' : '', }), + contentToUpdate: (msgcontent) => ({ + ...msgcontent, + ...parseRenderMessageItem(msgcontent), + id: msgcontent.wamid, + status: msgStatusRenderMapped[(msgcontent?.status || 'failed')], + sender: 'me', + dateString: msgcontent.status==='failed' ? '发送失败 ❌' : '', + }), }, }; export const msgStatusRenderMapped = { @@ -175,7 +182,7 @@ export const whatsappMsgTypeMapped = { type: 'text', data: (msg) => { const templateDataMapped = msg.template?.components ? msg.template.components.reduce((r, v) => ({...r, [v.type]: v}), {}) : null; - return { id: msg.wamid, text: templateDataMapped?.body?.parameters?.[0]?.text || '', title: msg.template.name } + return { id: msg.wamid, text: templateDataMapped?.body?.text || templateDataMapped?.body?.parameters?.[0]?.text || '', title: msg.template.name } }, }, }; @@ -202,6 +209,7 @@ export const parseRenderMessageItem = (msg) => { export const parseRenderMessageList = (messages, conversationid = null) => { return messages.map((msg) => { const msgContent = msg.msgtext_AsJOSN; + msgContent.template = msg.msgtype === 'template' ? { ...msgContent.template, ...msg.template_AsJOSN } : {}; const msgType = msgContent.type; // const parseMethod = msgContent.bizType === 'whatsapp' ? cloneDeep(whatsappMsgTypeMapped) : {}; return { diff --git a/src/reducers/ConversationReducer.js b/src/reducers/ConversationReducer.js index 5e12877..2125fc7 100644 --- a/src/reducers/ConversationReducer.js +++ b/src/reducers/ConversationReducer.js @@ -65,6 +65,11 @@ const ConversationReducer = (state = initialState, action) => { } return ele; }); + // 显示会话中其他客户端发送的消息 + const targetMsgsIds = targetMsgs.map((ele) => ele.id); + if ( ! targetMsgsIds.includes(message.id)) { + targetMsgs.push(message); + } // 更新列表的时间 const newConversationList = conversationsList.map((ele) => { @@ -107,6 +112,10 @@ const ConversationReducer = (state = initialState, action) => { ...state, activeConversations: { ...activeConversations, [String(targetId)]: [...targetMsgs, message] }, conversationsList: newConversationList, + currentConversation: { + ...state.currentConversation, + last_received_time: String(targetId) === String(currentConversation.sn) ? message.date : currentConversation.last_received_time, + }, }; } case NAME_SPACE + 'ADD_ERROR': { diff --git a/src/utils/utils.js b/src/utils/utils.js index fd3c567..801f22b 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -116,6 +116,7 @@ export function omit(object, keysToOmit) { * 深拷贝 */ export function cloneDeep(value) { + // return structuredClone(value); if (typeof value !== 'object' || value === null) { return value; } diff --git a/src/views/Conversations/Components/InputComposer.jsx b/src/views/Conversations/Components/InputComposer.jsx index 03623fa..4aa8f89 100644 --- a/src/views/Conversations/Components/InputComposer.jsx +++ b/src/views/Conversations/Components/InputComposer.jsx @@ -67,7 +67,7 @@ const InputBox = () => { - diff --git a/src/views/Conversations/Components/Messages.jsx b/src/views/Conversations/Components/Messages.jsx index 8ce01ff..7f79fe7 100644 --- a/src/views/Conversations/Components/Messages.jsx +++ b/src/views/Conversations/Components/Messages.jsx @@ -11,7 +11,7 @@ const Messages = () => { const messagesEndRef = useRef(null); useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); - }, [messagesList.length]); + }, [messagesList, currentConversation.last_received_time]); const [previewVisible, setPreviewVisible] = useState(false); const [previewSrc, setPreviewSrc] = useState(); diff --git a/src/views/Conversations/Components/MessagesHeader.jsx b/src/views/Conversations/Components/MessagesHeader.jsx index 0bd6462..f61f24b 100644 --- a/src/views/Conversations/Components/MessagesHeader.jsx +++ b/src/views/Conversations/Components/MessagesHeader.jsx @@ -9,7 +9,7 @@ const MessagesHeader = () => { const { websocketOpened, websocketRetrying, websocketRetrytimes, currentConversation } = useConversationState(); return ( <> - {!websocketOpened && } + {websocketOpened===false && } {websocketRetrying && websocketRetrytimes > 0 && } />} {currentConversation.customer_name && }