diff --git a/src/channel/bubbleMsgUtils.js b/src/channel/bubbleMsgUtils.js index 26e7215..485044e 100644 --- a/src/channel/bubbleMsgUtils.js +++ b/src/channel/bubbleMsgUtils.js @@ -557,9 +557,10 @@ export const whatsappMsgTypeMapped = { type: 'email', data: (msg) => ({ id: msg.id || msg.uid, subject: msg.subject, }), renderForReply: (msg) => { + const _msg = { ...msg, ...msg.email }; return { - id: msg.id, - message: `[邮件] ${msg.subject}`, + id: _msg.id, + message: `[邮件] ${_msg.subject}`, }; }, }, @@ -643,7 +644,7 @@ export const parseRenderMessageList = (messages) => { } return { ...msg, - msgOrigin: msgContent, + msgOrigin: {...msgContent, ...msgContent.email}, ...(whatsappMsgTypeMapped?.[msgType]?.data(msgContent) || {}), type: msgContent.type, ...(typeof whatsappMsgTypeMapped[msgType].type === 'function' ? whatsappMsgTypeMapped[msgType].type(msg) : { type: whatsappMsgTypeMapped[msgType].type || 'text' }), diff --git a/src/hooks/useEmail.js b/src/hooks/useEmail.js new file mode 100644 index 0000000..06d9dec --- /dev/null +++ b/src/hooks/useEmail.js @@ -0,0 +1,32 @@ +import { useState, useEffect } from 'react' +import { isEmpty } from '@/utils/commons' +import { getEmailDetailAction } from '@/actions/EmailActions' + +/** + * @param mai_sn 邮件编号ID + * @param data 直接传递, 不重复获取 + * * 在详情点击`回复`呼出编辑时 + */ +export const useEmailDetail = (mai_sn, data) => { + const [loading, setLoading] = useState(false) + const [mailData, setMailData] = useState({ loading, info: {}, content: '', attachments: [] }) + useEffect(() => { + const getEmailDetail = async () => { + if (isEmpty(mai_sn)) { + return false + } + try { + setLoading(true) + const data = await getEmailDetailAction({ mai_sn }) + setMailData(data) + setLoading(false) + } catch (err) { + setLoading(false) + } + } + + if (isEmpty(data)) getEmailDetail() + else setMailData(data) + }, [mai_sn]) + return mailData +} diff --git a/src/views/Conversations/Online/Components/EmailDetail.jsx b/src/views/Conversations/Online/Components/EmailDetail.jsx index 05b11bb..494ed0c 100644 --- a/src/views/Conversations/Online/Components/EmailDetail.jsx +++ b/src/views/Conversations/Online/Components/EmailDetail.jsx @@ -6,6 +6,7 @@ import EmailEditorPopup from '../Input/EmailEditorPopup' import DnDModal from '@/components/DndModal' import useStyleStore from '@/stores/StyleStore' import { getEmailDetailAction } from '@/actions/EmailActions' +import { useEmailDetail } from '@/hooks/useEmail'; const TagColorStyle = (tag) => { const color = stringToColour(tag) @@ -17,12 +18,10 @@ const TagColorStyle = (tag) => { } const EmailDetail = ({ open, setOpen, emailMsg, ...props }) => { - // console.log('emailMsg', emailMsg); - let { conversationid, } = emailMsg - // const { mai_sn } = emailMsg.msgtext?.email || {} - const mai_sn = 5036841 // debug: 0 - // const [open, setOpen] = useState(false); + let { conversationid, order_opi } = emailMsg + const { mai_sn, id } = emailMsg.msgOrigin?.email || emailMsg.msgOrigin || {} + const mailID = mai_sn || id const [initialPosition, setInitialPosition] = useState({}) const [initialSize, setInitialSize] = useState({}) function onHandleMove(e) { @@ -40,45 +39,30 @@ const EmailDetail = ({ open, setOpen, emailMsg, ...props }) => { const [openEmailEditor, setOpenEmailEditor] = useState(false) const [fromEmail, setFromEmail] = useState('') const [ReferEmailMsg, setReferEmailMsg] = useState('') - const onOpenEditor = (magtext, action) => { - const { from } = magtext + const onOpenEditor = (msgOrigin, action) => { + const { from } = msgOrigin setOpenEmailEditor(true) setFromEmail(from) - setReferEmailMsg(magtext) + setReferEmailMsg(msgOrigin) setAction(action) setOpen(false) } const [mobile] = useStyleStore((state) => [state.mobile]) - const [mailData, setMailData] = useState({info: {}, content: '', attachments: []}) - const getEmailDetail = async () => { - if (isEmpty(mai_sn)) { - return false; - } - const data = await getEmailDetailAction({ mai_sn }) - console.log('data', data); - - setMailData(data) - } - - useEffect(() => { - getEmailDetail() - - return () => {} - }, [emailMsg]) + const mailData = useEmailDetail(mailID) const ActionBtns = (props) => (