修改store 取值

dev/chat
Lei OT 1 year ago
parent 3da599944b
commit ce4fa20491

@ -16,19 +16,16 @@ const Conversations = () => {
const { coli_guest_WhatsApp } = orderRow || {}; const { coli_guest_WhatsApp } = orderRow || {};
const { order_sn } = useParams(); const { order_sn } = useParams();
const navigate = useNavigate(); const navigate = useNavigate();
const { loginUser } = useAuthStore(); const userId = useAuthStore(state => state.loginUser.userId);
const { userId } = loginUser; const initialState = useConversationStore((state) => state.initialState);
const { const activeConversations = useConversationStore((state) => state.activeConversations);
initialState, const currentConversation = useConversationStore((state) => state.currentConversation);
activeConversations, const conversationsList = useConversationStore((state) => state.conversationsList);
currentConversation, const addToConversationList = useConversationStore((state) => state.addToConversationList);
conversationsList, const delConversationitem = useConversationStore((state) => state.delConversationitem);
addToConversationList, const setCurrentConversation = useConversationStore((state) => state.setCurrentConversation);
delConversationitem, const receivedMessageList = useConversationStore((state) => state.receivedMessageList);
setCurrentConversation, const setMsgLoading = useConversationStore((state) => state.setMsgLoading);
receivedMessageList,
setMsgLoading,
} = useConversationStore();
const [switchToC, setSwitchToC] = useState({}); const [switchToC, setSwitchToC] = useState({});
const [shouldFetchCList, setShouldFetchCList] = useState(true); const [shouldFetchCList, setShouldFetchCList] = useState(true);

@ -43,7 +43,10 @@ const mockGetOSSData = () => ({
}); });
const ImageUpload = ({ disabled, invokeSendMessage }) => { const ImageUpload = ({ disabled, invokeSendMessage }) => {
const { currentConversation, setComplexMsg, complexMsg } = useConversationStore(); const currentConversation = useConversationStore(state => state.currentConversation);
const setComplexMsg = useConversationStore(state => state.setComplexMsg);
const complexMsg = useConversationStore(state => state.complexMsg);
const [uploading, setUploading] = useState(false); const [uploading, setUploading] = useState(false);
const [OSSData, setOSSData] = useState(); const [OSSData, setOSSData] = useState();

@ -24,8 +24,9 @@ const splitTemplate = (template) => {
const InputTemplate = ({ disabled = false, invokeSendMessage }) => { const InputTemplate = ({ disabled = false, invokeSendMessage }) => {
const searchInputRef = useRef(null); const searchInputRef = useRef(null);
const { notification } = App.useApp(); const { notification } = App.useApp();
const { loginUser } = useAuthStore() const loginUser = useAuthStore(state => state.loginUser);
const { currentConversation, templates } = useConversationStore(); const currentConversation = useConversationStore(state => state.currentConversation);
const templates = useConversationStore(state => state.templates);
// : customer, agent // : customer, agent
const valueMapped = { ...cloneDeep(currentConversation), ...objectMapper(loginUser, { username: [{ key: 'agent_name' }, { key: 'your_name' }] }) }; const valueMapped = { ...cloneDeep(currentConversation), ...objectMapper(loginUser, { username: [{ key: 'agent_name' }, { key: 'your_name' }] }) };
useEffect(() => { useEffect(() => {

@ -26,10 +26,16 @@ import InputImageUpload from './Input/ImageUpload';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
const InputComposer = () => { const InputComposer = () => {
const { const userId = useAuthStore(state => state.loginUser.userId);
loginUser: { userId }, const websocket = useConversationStore(state => state.websocket);
} = useAuthStore(); const websocketOpened = useConversationStore(state => state.websocketOpened);
const { websocket, websocketOpened, currentConversation, referenceMsg, setReferenceMsg, complexMsg, setComplexMsg, sentOrReceivedNewMessage } = useConversationStore(); const currentConversation = useConversationStore(state => state.currentConversation);
const referenceMsg = useConversationStore(state => state.referenceMsg);
const setReferenceMsg = useConversationStore(state => state.setReferenceMsg);
const complexMsg = useConversationStore(state => state.complexMsg);
const setComplexMsg = useConversationStore(state => state.setComplexMsg);
const sentOrReceivedNewMessage = useConversationStore(state => state.sentOrReceivedNewMessage);
const talkabled = !isEmpty(currentConversation.sn) && websocketOpened; const talkabled = !isEmpty(currentConversation.sn) && websocketOpened;
const gt24h = currentConversation.last_received_time ? dayjs().diff(dayjs(currentConversation.last_received_time), 'hour') > 24 : true; const gt24h = currentConversation.last_received_time ? dayjs().diff(dayjs(currentConversation.last_received_time), 'hour') > 24 : true;
const textabled = talkabled && !gt24h; const textabled = talkabled && !gt24h;

@ -1,13 +1,18 @@
import { useEffect, useState, useRef, useMemo } from 'react'; import { useEffect, useState, useRef, useMemo, memo } from 'react';
import { Image, Spin, Dropdown } from 'antd'; import { Image, Spin, Dropdown } from 'antd';
import { DownOutlined } from '@ant-design/icons'; import { DownOutlined } from '@ant-design/icons';
import { MessageBox } from 'react-chat-elements'; import { MessageBox } from 'react-chat-elements';
import useConversationStore from '@/stores/ConversationStore'; import useConversationStore from '@/stores/ConversationStore';
import { useShallow } from 'zustand/react/shallow'; import { useShallow } from 'zustand/react/shallow';
import { Emoji } from 'emoji-picker-react';
import { olog } from '@/utils/utils';
const Messages = () => { const Messages = () => {
const { currentConversation, setReferenceMsg, msgListLoading } = useConversationStore(); 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) => (currentConversation.sn ? state.activeConversations[currentConversation.sn] : [])));
olog('invoke msg list');
const messagesList = useMemo( const messagesList = useMemo(
() => () =>
@ -49,6 +54,28 @@ const Messages = () => {
setPreviewSrc(msg.data.uri); setPreviewSrc(msg.data.uri);
}; };
const RenderText = memo(function renderText({str}) {
const parts = str.split(/(https?:\/\/[^\s]+|\p{Emoji}\uFE0F?)/gu);
return (
<>
{(parts || []).map((part, index) => {
if (/\p{Emoji}\uFE0F?/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)) {
return (
<a href={part} target='_blank' key={`${part}${index}`} rel='noreferrer'>
{part}
</a>
);
} else {
return <span key={`${part}${index}`}>{part}</span>;
}
})}
</>
);
});
return ( return (
<div> <div>
<Spin spinning={msgListLoading} tip={'正在读取...'} wrapperClassName='pt-8 '> <Spin spinning={msgListLoading} tip={'正在读取...'} wrapperClassName='pt-8 '>
@ -75,7 +102,7 @@ const Messages = () => {
{...message} {...message}
onReplyClick={() => setReferenceMsg(message)} onReplyClick={() => setReferenceMsg(message)}
onOpen={() => handlePreview(message)} onOpen={() => handlePreview(message)}
{...(message.type === 'text' ? { text: <div dangerouslySetInnerHTML={{ __html: message.text }}></div> } : {})} text={<RenderText str={message?.text || ''} />}
/> />
</Dropdown> </Dropdown>
))} ))}

@ -5,8 +5,13 @@ import { ReloadOutlined, ApiOutlined } from '@ant-design/icons';
import { LoadingOutlined } from '@ant-design/icons'; import { LoadingOutlined } from '@ant-design/icons';
const MessagesHeader = () => { const MessagesHeader = () => {
const { loginUser: { userId } } = useAuthStore() const userId = useAuthStore(state => state.loginUser.userId);
const {websocketOpened, websocketRetrying, websocketRetrytimes, currentConversation, connectWebsocket} = useConversationStore(); const websocketOpened = useConversationStore(state => state.websocketOpened);
const websocketRetrying = useConversationStore(state => state.websocketRetrying);
const websocketRetrytimes = useConversationStore(state => state.websocketRetrytimes);
const currentConversation = useConversationStore(state => state.currentConversation);
const connectWebsocket = useConversationStore(state => state.connectWebsocket);
return ( return (
<> <>
{websocketOpened === false && ( {websocketOpened === false && (

Loading…
Cancel
Save