fix: 修复未加载的会话标记已读会有问题的bug

pull/49/head
moonrailgun 3 years ago
parent f2bea54aa3
commit 99a2c63698

@ -161,16 +161,18 @@ function listenNotify(socket: AppSocket, store: AppStore) {
const appendMessage = () => {
store.dispatch(
chatActions.appendConverseMessage({
converseId: message.converseId,
converseId,
messages: [message],
})
);
};
if (converse) {
// 如果该会话已经加载(群组面板)
appendMessage();
} else if (!message.groupId) {
// 获取会话信息后添加到会话消息中
// 如果会话没有加载, 但是是私信消息
// 则获取会话信息后添加到会话消息中
getCachedConverseInfo(converseId).then((converse) => {
if (converse.type === ChatConverseType.DM) {
// 如果是私人会话, 则添加到dmlist
@ -182,7 +184,16 @@ function listenNotify(socket: AppSocket, store: AppStore) {
appendMessage();
});
} else {
console.warn('无法处理的新增会话内容', message);
// 是群组未加载的消息面板的消息
// 设置会话信息
store.dispatch(
chatActions.setLastMessageMap([
{
converseId,
lastMessageId: message._id,
},
])
);
}
});

@ -19,7 +19,12 @@ export interface ChatState {
currentConverseId: string | null; // 当前活跃的会话id
converses: Record<string, ChatConverseState>; // <会话Id, 会话信息>
ack: Record<string, string>; // <会话Id, 本地最后一条会话Id>
lastMessageMap: Record<string, string>; // <会话Id, 远程会话列表最后一条会话Id>
/**
* mapping
* <Id, Id>
*/
lastMessageMap: Record<string, string>;
}
const initialState: ChatState = {

@ -1,6 +1,6 @@
export {
/**
* @deprecated please import it from tailchat-design
* @deprecated please import it from `tailchat-design`
*/
Avatar,
} from 'tailchat-design';

@ -1,12 +1,19 @@
import { useEffect } from 'react';
import { ChatMessage, useConverseAck, useUpdateRef } from 'tailchat-shared';
import _debounce from 'lodash/debounce';
import {
ChatMessage,
useConverseAck,
useMemoizedFn,
useUpdateRef,
} from 'tailchat-shared';
import _last from 'lodash/last';
/**
*
*/
export function useMessageAck(converseId: string, messages: ChatMessage[]) {
const { updateConverseAck } = useConverseAck(converseId);
const messagesRef = useUpdateRef(messages);
const updateConverseAckRef = useUpdateRef(updateConverseAck);
const updateConverseAckMemo = useMemoizedFn(updateConverseAck);
useEffect(() => {
// 设置当前
@ -14,8 +21,11 @@ export function useMessageAck(converseId: string, messages: ChatMessage[]) {
return;
}
const lastMessageId = _last(messagesRef.current)!._id;
updateConverseAckRef.current(lastMessageId);
const lastMessage = _last(messagesRef.current);
if (lastMessage) {
const lastMessageId = lastMessage?._id;
updateConverseAckMemo(lastMessageId);
}
}, [converseId]);
return { updateConverseAck };

@ -1 +1,6 @@
export { Icon } from 'tailchat-design';
export {
/**
* @deprecated please import it from `tailchat-design`
*/
Icon,
} from 'tailchat-design';

@ -1,7 +1,6 @@
import { Avatar } from '@/components/Avatar';
import { Avatar, Icon } from 'tailchat-design';
import { openModal } from '@/components/Modal';
import { ModalCreateGroup } from '@/components/modals/CreateGroup';
import { Icon } from '@/components/Icon';
import React, { useCallback, useMemo } from 'react';
import { GroupInfo, t, useAppSelector, useGroupUnread } from 'tailchat-shared';
import { NavbarNavItem } from './NavItem';

@ -1,7 +1,6 @@
import { Avatar } from '@/components/Avatar';
import { Avatar } from 'tailchat-design';
import React from 'react';
import { t, useDMConverseList, useUserInfo } from 'tailchat-shared';
import { useUnread } from 'tailchat-shared/redux/hooks/useUnread';
import { t, useDMConverseList, useUserInfo, useUnread } from 'tailchat-shared';
import { NavbarNavItem } from './NavItem';
function usePersonalUnread(): boolean {

Loading…
Cancel
Save