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 }; }