解决链接之后上级组件re-render; 获取loginUser

dev/chat
Lei OT 2 years ago
parent b0105a2b9c
commit 49e0be4428

@ -13,7 +13,6 @@ import 'dayjs/locale/zh-cn'
import 'react-chat-elements/dist/main.css' import 'react-chat-elements/dist/main.css'
import '@/assets/App.css' import '@/assets/App.css'
import AppLogo from '@/assets/logo-gh.png' import AppLogo from '@/assets/logo-gh.png'
import { isEmpty } from '@/utils/commons'
const { Header, Footer, Content } = Layout const { Header, Footer, Content } = Layout
const { Title } = Typography const { Title } = Typography
@ -42,16 +41,16 @@ function AuthApp() {
token: { colorBgContainer }, token: { colorBgContainer },
} = theme.useToken() } = theme.useToken()
const { connectWebsocket, disconnectWebsocket, fetchInitialData } = useConversationStore(); const { userId } = loginUser;
useEffect(() => { useEffect(() => {
if (loginUser && loginUser.userId) { if (userId) {
connectWebsocket(loginUser.userId); useConversationStore.getState().connectWebsocket(userId);
fetchInitialData(loginUser.userId); useConversationStore.getState().fetchInitialData(userId);
} }
return () => { return () => {
disconnectWebsocket(); useConversationStore.getState().disconnectWebsocket();
} }
}, [loginUser.userId]); }, [userId]);
return ( return (
<ConfigProvider <ConfigProvider

@ -2,11 +2,11 @@ import { useEffect, useState } from 'react';
import { useParams, useNavigate, useLocation } from 'react-router-dom'; import { useParams, useNavigate, useLocation } from 'react-router-dom';
import { Button, Dropdown } from 'antd'; import { Button, Dropdown } from 'antd';
import { MoreOutlined } from '@ant-design/icons'; import { MoreOutlined } from '@ant-design/icons';
import { useAuthContext } from '@/stores/AuthContext';
import { fetchOrderConversationsList, fetchConversationItemClose, fetchMessages } from '@/actions/ConversationActions'; import { fetchOrderConversationsList, fetchConversationItemClose, fetchMessages } from '@/actions/ConversationActions';
import { ChatList, ChatItem } from 'react-chat-elements'; import { ChatList, ChatItem } from 'react-chat-elements';
import { isEmpty } from '@/utils/utils'; import { isEmpty } from '@/utils/utils';
import useConversationStore from '@/stores/ConversationStore'; import useConversationStore from '@/stores/ConversationStore';
import useAuthStore from '@/stores/AuthStore'
/** /**
* [] * []
@ -16,10 +16,20 @@ 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 } = useAuthContext(); const { loadUser } = useAuthStore();
const loginUser = loadUser();
const { userId } = loginUser; const { userId } = loginUser;
const { initialState, activeConversations, currentConversation, conversationsList, addToConversationList, delConversationitem, setCurrentConversation, receivedMessageList, setMsgLoading } = const {
useConversationStore(); initialState,
activeConversations,
currentConversation,
conversationsList,
addToConversationList,
delConversationitem,
setCurrentConversation,
receivedMessageList,
setMsgLoading,
} = useConversationStore();
const [switchToC, setSwitchToC] = useState({}); const [switchToC, setSwitchToC] = useState({});
const [shouldFetchCList, setShouldFetchCList] = useState(true); const [shouldFetchCList, setShouldFetchCList] = useState(true);

@ -1,7 +1,7 @@
import { useState, useRef, useEffect } from 'react'; import { useState, useRef, useEffect } from 'react';
import { App, Popover, Flex, Button, List, Input } from 'antd'; import { App, Popover, Flex, Button, List, Input } from 'antd';
import { MessageOutlined, SendOutlined } from '@ant-design/icons'; import { MessageOutlined, SendOutlined } from '@ant-design/icons';
import { useAuthContext } from '@/stores/AuthContext'; import useAuthStore from '@/stores/AuthStore'
import useConversationStore from '@/stores/ConversationStore'; import useConversationStore from '@/stores/ConversationStore';
import { cloneDeep, getNestedValue, objectMapper } from '@/utils/utils'; import { cloneDeep, getNestedValue, objectMapper } from '@/utils/utils';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
@ -24,7 +24,8 @@ 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 } = useAuthContext(); const { loadUser } = useAuthStore();
const loginUser = loadUser();
const { currentConversation, templates } = useConversationStore(); const { currentConversation, templates } = useConversationStore();
// : 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' }] }) };

@ -1,7 +1,7 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import { Input, Flex, Button, } from 'antd'; import { Input, Flex, Button, } from 'antd';
// import { Input } from 'react-chat-elements'; // import { Input } from 'react-chat-elements';
import { useAuthContext } from '@/stores/AuthContext'; import useAuthStore from '@/stores/AuthStore'
import useConversationStore from '@/stores/ConversationStore'; import useConversationStore from '@/stores/ConversationStore';
import { SendOutlined, MessageOutlined, SmileOutlined, PictureOutlined, CommentOutlined, UploadOutlined, CloudUploadOutlined, FolderAddOutlined, FilePdfOutlined, CloseCircleOutlined } from '@ant-design/icons'; import { SendOutlined, MessageOutlined, SmileOutlined, PictureOutlined, CommentOutlined, UploadOutlined, CloudUploadOutlined, FolderAddOutlined, FilePdfOutlined, CloseCircleOutlined } from '@ant-design/icons';
import { isEmpty } from '@/utils/utils'; import { isEmpty } from '@/utils/utils';
@ -12,7 +12,8 @@ import InputImageUpload from './Input/ImageUpload';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
const InputBox = () => { const InputBox = () => {
const { loginUser } = useAuthContext(); const { loadUser } = useAuthStore();
const loginUser = loadUser();
const { userId } = loginUser; const { userId } = loginUser;
const { websocket, websocketOpened, currentConversation, referenceMsg, setReferenceMsg, sentOrReceivedNewMessage } = useConversationStore(); const { websocket, websocketOpened, currentConversation, referenceMsg, setReferenceMsg, sentOrReceivedNewMessage } = useConversationStore();
const [textContent, setTextContent] = useState(''); const [textContent, setTextContent] = useState('');

Loading…
Cancel
Save