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

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

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

@ -1,12 +1,19 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import { ChatMessage, useConverseAck, useUpdateRef } from 'tailchat-shared'; import {
import _debounce from 'lodash/debounce'; ChatMessage,
useConverseAck,
useMemoizedFn,
useUpdateRef,
} from 'tailchat-shared';
import _last from 'lodash/last'; import _last from 'lodash/last';
/**
*
*/
export function useMessageAck(converseId: string, messages: ChatMessage[]) { export function useMessageAck(converseId: string, messages: ChatMessage[]) {
const { updateConverseAck } = useConverseAck(converseId); const { updateConverseAck } = useConverseAck(converseId);
const messagesRef = useUpdateRef(messages); const messagesRef = useUpdateRef(messages);
const updateConverseAckRef = useUpdateRef(updateConverseAck); const updateConverseAckMemo = useMemoizedFn(updateConverseAck);
useEffect(() => { useEffect(() => {
// 设置当前 // 设置当前
@ -14,8 +21,11 @@ export function useMessageAck(converseId: string, messages: ChatMessage[]) {
return; return;
} }
const lastMessageId = _last(messagesRef.current)!._id; const lastMessage = _last(messagesRef.current);
updateConverseAckRef.current(lastMessageId); if (lastMessage) {
const lastMessageId = lastMessage?._id;
updateConverseAckMemo(lastMessageId);
}
}, [converseId]); }, [converseId]);
return { updateConverseAck }; 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 { openModal } from '@/components/Modal';
import { ModalCreateGroup } from '@/components/modals/CreateGroup'; import { ModalCreateGroup } from '@/components/modals/CreateGroup';
import { Icon } from '@/components/Icon';
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import { GroupInfo, t, useAppSelector, useGroupUnread } from 'tailchat-shared'; import { GroupInfo, t, useAppSelector, useGroupUnread } from 'tailchat-shared';
import { NavbarNavItem } from './NavItem'; import { NavbarNavItem } from './NavItem';

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

Loading…
Cancel
Save