mirror of https://github.com/msgbyte/tailchat
feat: 增加群组所有消息已读
parent
085a51a914
commit
125c503217
@ -0,0 +1,31 @@
|
||||
import { useMemoizedFn } from '../../hooks/useMemoizedFn';
|
||||
import { updateAck } from '../../model/converse';
|
||||
import { isConversePanel } from '../../utils/panel-helper';
|
||||
import { chatActions } from '../slices';
|
||||
import { useAppDispatch, useAppSelector } from './useAppSelector';
|
||||
import { useGroupInfo } from './useGroup';
|
||||
|
||||
/**
|
||||
* 群组级别的已读管理
|
||||
*/
|
||||
export function useGroupAck(groupId: string) {
|
||||
const groupInfo = useGroupInfo(groupId);
|
||||
const lastMessageMap = useAppSelector((state) => state.chat.lastMessageMap);
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
const markGroupAllAck = useMemoizedFn(() => {
|
||||
const conversePanels = (groupInfo?.panels ?? []).filter(isConversePanel);
|
||||
|
||||
for (const converse of conversePanels) {
|
||||
const converseId = converse.id;
|
||||
const lastMessageId = lastMessageMap[converseId];
|
||||
|
||||
if (converseId && lastMessageId) {
|
||||
dispatch(chatActions.setConverseAck({ converseId, lastMessageId }));
|
||||
updateAck(converseId, lastMessageId);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return { markGroupAllAck };
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
import { GroupPanel, GroupPanelType } from '../model/group';
|
||||
|
||||
/**
|
||||
* 判断面板是否为会话面板
|
||||
*
|
||||
* 会话面板的属性是带有已读未读属性的(如默认的文本面板)
|
||||
*/
|
||||
export function isConversePanel(panel: GroupPanel) {
|
||||
// 目前只有文本面板
|
||||
|
||||
if (panel.type === GroupPanelType.TEXT) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
Loading…
Reference in New Issue