|
|
|
@ -13,7 +13,12 @@ import { useAppDispatch, useAppSelector } from './useAppSelector';
|
|
|
|
|
/**
|
|
|
|
|
* 会话消息管理
|
|
|
|
|
*/
|
|
|
|
|
export function useConverseMessage(converseId: string) {
|
|
|
|
|
interface ConverseContext {
|
|
|
|
|
converseId: string;
|
|
|
|
|
isGroup: boolean;
|
|
|
|
|
}
|
|
|
|
|
export function useConverseMessage(context: ConverseContext) {
|
|
|
|
|
const { converseId, isGroup } = context;
|
|
|
|
|
const converse = useAppSelector((state) => state.chat.converses[converseId]);
|
|
|
|
|
const dispatch = useAppDispatch();
|
|
|
|
|
const messages = converse?.messages ?? [];
|
|
|
|
@ -21,10 +26,23 @@ export function useConverseMessage(converseId: string) {
|
|
|
|
|
const { loading, error } = useAsync(async () => {
|
|
|
|
|
if (!converse) {
|
|
|
|
|
// 如果是一个新会话(或者当前会话列表中没有)
|
|
|
|
|
|
|
|
|
|
// Step 1. 创建会话 并确保私信列表中存在该会话
|
|
|
|
|
const converse = await ensureDMConverse(converseId);
|
|
|
|
|
dispatch(chatActions.setConverseInfo(converse));
|
|
|
|
|
if (!isGroup) {
|
|
|
|
|
// 如果是私信会话
|
|
|
|
|
// Step 1. 创建会话 并确保私信列表中存在该会话
|
|
|
|
|
const converse = await ensureDMConverse(converseId);
|
|
|
|
|
dispatch(chatActions.setConverseInfo(converse));
|
|
|
|
|
} else {
|
|
|
|
|
// 如果是群组会话(文本频道)
|
|
|
|
|
// Step 1. 确保群组会话存在
|
|
|
|
|
dispatch(
|
|
|
|
|
chatActions.setConverseInfo({
|
|
|
|
|
_id: converseId,
|
|
|
|
|
name: '',
|
|
|
|
|
type: 'Group',
|
|
|
|
|
members: [],
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Step 2. 拉取消息
|
|
|
|
|
const messages = await fetchConverseMessage(converseId);
|
|
|
|
@ -35,7 +53,7 @@ export function useConverseMessage(converseId: string) {
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}, [converse, converseId]);
|
|
|
|
|
}, [converse, converseId, isGroup]);
|
|
|
|
|
|
|
|
|
|
const handleSendMessage = useCallback(async (payload: SendMessagePayload) => {
|
|
|
|
|
// TODO: 增加临时消息, 对网络环境不佳的状态进行优化
|
|
|
|
|