feat(weChat): 添加联系人存在检查逻辑并优化消息处理
在setCurrentContact方法中添加isExist参数,用于区分新增联系人和已存在联系人的处理逻辑 优化消息处理流程,确保未读消息计数正确更新
This commit is contained in:
@@ -13,7 +13,7 @@ const MessageList: React.FC<MessageListProps> = () => {
|
|||||||
const { setCurrentContact, currentContract } = useWeChatStore();
|
const { setCurrentContact, currentContract } = useWeChatStore();
|
||||||
const chatSessions = useCkChatStore(state => state.chatSessions);
|
const chatSessions = useCkChatStore(state => state.chatSessions);
|
||||||
const onContactClick = (session: ContractData | weChatGroup) => {
|
const onContactClick = (session: ContractData | weChatGroup) => {
|
||||||
setCurrentContact(session);
|
setCurrentContact(session, true);
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className={styles.messageList}>
|
<div className={styles.messageList}>
|
||||||
|
|||||||
@@ -11,7 +11,10 @@ export interface WeChatState {
|
|||||||
messagesLoading: boolean;
|
messagesLoading: boolean;
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
setCurrentContact: (contract: ContractData | weChatGroup) => void;
|
setCurrentContact: (
|
||||||
|
contract: ContractData | weChatGroup,
|
||||||
|
isExist?: boolean,
|
||||||
|
) => void;
|
||||||
loadChatMessages: (contact: ContractData | weChatGroup) => Promise<void>;
|
loadChatMessages: (contact: ContractData | weChatGroup) => Promise<void>;
|
||||||
|
|
||||||
// 视频消息处理方法
|
// 视频消息处理方法
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import { clearUnreadCount, updateConfig } from "@/pages/pc/ckbox/api";
|
|||||||
import { ContractData, weChatGroup } from "@/pages/pc/ckbox/data";
|
import { ContractData, weChatGroup } from "@/pages/pc/ckbox/data";
|
||||||
import {
|
import {
|
||||||
addChatSession,
|
addChatSession,
|
||||||
getChatSessions,
|
|
||||||
updateChatSession,
|
updateChatSession,
|
||||||
|
useCkChatStore,
|
||||||
} from "@/store/module/ckchat/ckchat";
|
} from "@/store/module/ckchat/ckchat";
|
||||||
|
|
||||||
export const useWeChatStore = create<WeChatState>()(
|
export const useWeChatStore = create<WeChatState>()(
|
||||||
@@ -19,12 +19,19 @@ export const useWeChatStore = create<WeChatState>()(
|
|||||||
messagesLoading: false,
|
messagesLoading: false,
|
||||||
|
|
||||||
// Actions
|
// Actions
|
||||||
setCurrentContact: (contract: ContractData | weChatGroup) => {
|
setCurrentContact: (
|
||||||
|
contract: ContractData | weChatGroup,
|
||||||
|
isExist?: boolean,
|
||||||
|
) => {
|
||||||
const state = useWeChatStore.getState();
|
const state = useWeChatStore.getState();
|
||||||
// 切换联系人时清空当前消息,等待重新加载
|
// 切换联系人时清空当前消息,等待重新加载
|
||||||
set({ currentMessages: [] });
|
set({ currentMessages: [] });
|
||||||
clearUnreadCount([contract.id]).then(() => {
|
clearUnreadCount([contract.id]).then(() => {
|
||||||
addChatSession(contract);
|
if (isExist) {
|
||||||
|
updateChatSession({ ...contract, unreadCount: 0 });
|
||||||
|
} else {
|
||||||
|
addChatSession(contract);
|
||||||
|
}
|
||||||
set({ currentContract: contract });
|
set({ currentContract: contract });
|
||||||
updateConfig({
|
updateConfig({
|
||||||
id: contract.id,
|
id: contract.id,
|
||||||
@@ -83,12 +90,14 @@ export const useWeChatStore = create<WeChatState>()(
|
|||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
//更新消息列表unread数值,根据接收的++1 这样
|
//更新消息列表unread数值,根据接收的++1 这样
|
||||||
const chatSessions = getChatSessions();
|
const chatSessions = useCkChatStore.getState().chatSessions;
|
||||||
const session = chatSessions.find(
|
const session = chatSessions.find(
|
||||||
item => item.id == message.wechatFriendId,
|
item => item.id == message.wechatFriendId,
|
||||||
);
|
);
|
||||||
session.unreadCount = Number(session.unreadCount) + 1;
|
if (session) {
|
||||||
updateChatSession(session);
|
session.unreadCount = Number(session.unreadCount) + 1;
|
||||||
|
updateChatSession(session);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user