feat: 解析渲染: email.updated; email.inbound.received

2.0/email-builder
Lei OT 11 months ago
parent 0aef1342a9
commit b682202d0c

@ -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 = {

@ -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)) {

@ -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 (
<div onClick={() => handlePreview(message)} className={`text-sm leading-5 emoji-text whitespace-pre-wrap cursor-pointer ${className}`} key={'msg-text'}>
{sender === 'me' && <div><b>From: </b>{email.from}</div>}
<div><b>To: </b>{email.to}</div>
<div ><b>Subject: </b>{email.email.subject}</div>
<div ><b>Subject: </b>{email.subject}</div>
<hr className='border-0 border-solid border-b border-neutral-400'/>
<div className='line-clamp-2 text-neutral-600'>{email.email.abstract}</div>
<div className='line-clamp-2 text-neutral-600'>{email.abstract}</div>
</div>
);
});
@ -31,7 +31,7 @@ const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => {
return (
<MessageBox
{...message}
key={`${message.sn}.${message.msgtext.id}`}
key={`${message.from}.${message.id}`}
type='text'
title={ message.sender !== 'me' &&
<>
@ -40,7 +40,7 @@ const ChatboxEmail = ({ onOpenEditor, onOpenEmail, ...message }) => {
<b>From: </b>
<span>
{/* {message?.emailOrigin?.fromName}&nbsp;&lt;{message?.emailOrigin.fromEmail}&gt; */}
{message.msgtext?.from}
{message.msgOrigin?.from}
</span>
</span>
</>
@ -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={<RenderText str={message?.msgtext || ''} className={message.status === 'failed' ? 'line-through text-neutral-400' : ''} email={message.msgtext} sender={message.sender} />}
text={<RenderText str={message?.msgOrigin || ''} className={message.status === 'failed' ? 'line-through text-neutral-400' : ''} email={message.msgOrigin} sender={message.sender} />}
{...(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;

@ -67,7 +67,7 @@ const MessagesList = ({ messages, handlePreview, reference, longListLoading, get
{messages.map((message, index) => (
<MessageBoxWithRef
ref={(el) => (messageRefs.current[index] = el)}
key={`${message.sn}.${message.id}`}
key={`${message.type}.${message.id}`}
{...message}
/>
))}

Loading…
Cancel
Save