|
|
|
@ -11,30 +11,9 @@ const Messages = () => {
|
|
|
|
|
const currentConversation = useConversationStore(useShallow((state) => state.currentConversation));
|
|
|
|
|
const setReferenceMsg = useConversationStore(useShallow((state) => state.setReferenceMsg));
|
|
|
|
|
const msgListLoading = useConversationStore(useShallow((state) => state.msgListLoading));
|
|
|
|
|
const activeMessages = useConversationStore(useShallow((state) => (currentConversation.sn ? state.activeConversations[currentConversation.sn] : [])));
|
|
|
|
|
const activeMessages = useConversationStore(useShallow((state) => (state.currentConversation.sn ? state.activeConversations[state.currentConversation.sn] : [])));
|
|
|
|
|
olog('invoke msg list');
|
|
|
|
|
|
|
|
|
|
const messagesList = useMemo(
|
|
|
|
|
() =>
|
|
|
|
|
(activeMessages || []).map((message) => ({
|
|
|
|
|
...message,
|
|
|
|
|
key: message.id,
|
|
|
|
|
position: message.sender === 'me' ? 'right' : 'left',
|
|
|
|
|
...(message.sender === 'me'
|
|
|
|
|
? {
|
|
|
|
|
styles: { backgroundColor: '#ccd4ae' },
|
|
|
|
|
notchStyle: { fill: '#ccd4ae' },
|
|
|
|
|
replyButton: ['text'].includes(message.whatsapp_msg_type) && message.status !== 'failed' ? true : false,
|
|
|
|
|
className: 'whatsappme-container whitespace-pre-wrap',
|
|
|
|
|
}
|
|
|
|
|
: {
|
|
|
|
|
replyButton: ['text'].includes(message.whatsapp_msg_type) ? true : false,
|
|
|
|
|
}),
|
|
|
|
|
})),
|
|
|
|
|
[activeMessages]
|
|
|
|
|
);
|
|
|
|
|
// console.log('messagesList----------------------------------------------------', messagesList);
|
|
|
|
|
|
|
|
|
|
const messagesEndRef = useRef(null);
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
|
|
|
|
@ -64,7 +43,8 @@ const Messages = () => {
|
|
|
|
|
if (/\p{Emoji_Presentation}/u.test(part)) {
|
|
|
|
|
const code = [...part].map((e) => e.codePointAt(0).toString(16)).join(`-`);
|
|
|
|
|
return <Emoji key={`${part}${index}${code}`} unified={code} size={24} emojiStyle='facebook' />;
|
|
|
|
|
} else if (/https?:\/\/[\S]+/gi.test(part)) {
|
|
|
|
|
} else
|
|
|
|
|
if (/https?:\/\/[\S]+/gi.test(part)) {
|
|
|
|
|
return (
|
|
|
|
|
<a href={part} target='_blank' key={`${part}${index}`} rel='noreferrer'>
|
|
|
|
|
{part}
|
|
|
|
@ -83,7 +63,7 @@ const Messages = () => {
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
<Spin spinning={msgListLoading} tip={'正在读取...'} wrapperClassName='pt-8 '>
|
|
|
|
|
{messagesList.map((message, index) => (
|
|
|
|
|
{activeMessages.map((message, index) => (
|
|
|
|
|
<Dropdown
|
|
|
|
|
key={message.key}
|
|
|
|
|
menu={{
|
|
|
|
@ -99,14 +79,24 @@ const Messages = () => {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}}
|
|
|
|
|
trigger={['contextMenu']}
|
|
|
|
|
>
|
|
|
|
|
trigger={['contextMenu']}>
|
|
|
|
|
<MessageBox
|
|
|
|
|
key={message.key}
|
|
|
|
|
key={message.id}
|
|
|
|
|
{...message}
|
|
|
|
|
position={message.sender === 'me' ? 'right' : 'left'}
|
|
|
|
|
onReplyClick={() => setReferenceMsg(message)}
|
|
|
|
|
onOpen={() => handlePreview(message)}
|
|
|
|
|
text={<RenderText str={message?.text || ''} />}
|
|
|
|
|
{...(message.sender === 'me'
|
|
|
|
|
? {
|
|
|
|
|
styles: { backgroundColor: '#ccd4ae' },
|
|
|
|
|
notchStyle: { fill: '#ccd4ae' },
|
|
|
|
|
replyButton: ['text'].includes(message.whatsapp_msg_type) && message.status !== 'failed' ? true : false,
|
|
|
|
|
className: 'whatsappme-container whitespace-pre-wrap',
|
|
|
|
|
}
|
|
|
|
|
: {
|
|
|
|
|
replyButton: ['text'].includes(message.whatsapp_msg_type) ? true : false,
|
|
|
|
|
})}
|
|
|
|
|
/>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
))}
|
|
|
|
|