优化
This commit is contained in:
31
client/shared/redux/hooks/useGroupAck.ts
Normal file
31
client/shared/redux/hooks/useGroupAck.ts
Normal file
@@ -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 };
|
||||
}
|
||||
Reference in New Issue
Block a user