refactor: 用户私信列表管理

pull/13/head
moonrailgun 4 years ago
parent d96d137893
commit ad8bef67b7

@ -0,0 +1,15 @@
import { getCachedConverseInfo } from '../cache/cache';
import type { ChatConverseInfo } from '../model/converse';
import { appendUserDMConverse } from '../model/user';
/**
*
*/
export async function ensureDMConverse(
converseId: string
): Promise<ChatConverseInfo> {
const converse = await getCachedConverseInfo(converseId);
await appendUserDMConverse(converseId);
return converse;
}

@ -13,6 +13,14 @@ export interface UserLoginInfo extends UserBaseInfo {
createdAt: string; createdAt: string;
} }
/**
*
*/
export interface UserDMList {
userId: string;
converseIds: string[];
}
/** /**
* *
* @param email * @param email
@ -104,3 +112,18 @@ export async function getUserOnlineStatus(
return data; return data;
} }
/**
*
*
*/
export async function appendUserDMConverse(converseId: string) {
const { data } = await request.post<UserDMList>(
'/api/user/dmlist/addConverse',
{
converseId,
}
);
return data;
}

@ -1,5 +1,5 @@
import { useCallback } from 'react'; import { useCallback } from 'react';
import { getCachedConverseInfo } from '../../cache/cache'; import { ensureDMConverse } from '../../helper/converse-helper';
import { useAsync } from '../../hooks/useAsync'; import { useAsync } from '../../hooks/useAsync';
import { showErrorToasts } from '../../manager/ui'; import { showErrorToasts } from '../../manager/ui';
import { import {
@ -20,9 +20,13 @@ export function useConverseMessage(converseId: string) {
const { loading, error } = useAsync(async () => { const { loading, error } = useAsync(async () => {
if (!converse) { if (!converse) {
const converse = await getCachedConverseInfo(converseId); // 如果是一个新会话(或者当前会话列表中没有)
// Step 1. 创建会话 并确保私信列表中存在该会话
const converse = await ensureDMConverse(converseId);
dispatch(chatActions.setConverseInfo(converse)); dispatch(chatActions.setConverseInfo(converse));
// Step 2. 拉取消息
const messages = await fetchConverseMessage(converseId); const messages = await fetchConverseMessage(converseId);
dispatch( dispatch(
chatActions.appendConverseMessage({ chatActions.appendConverseMessage({

@ -1,7 +1,10 @@
import type { AppStore } from './store'; import type { AppStore } from './store';
import type { AppSocket } from '../api/socket'; import type { AppSocket } from '../api/socket';
import { userActions } from './slices'; import { chatActions, userActions } from './slices';
import type { FriendRequest } from '../model/friend'; import type { FriendRequest } from '../model/friend';
import type { UserDMList } from '../model/user';
import { fetchConverseInfo } from '../model/converse';
import { getCachedConverseInfo } from '../cache/cache';
/** /**
* Redux * Redux
@ -19,6 +22,17 @@ export function setupRedux(socket: AppSocket, store: AppStore) {
store.dispatch(userActions.setFriendRequests(data)); store.dispatch(userActions.setFriendRequests(data));
}); });
socket.request<UserDMList>('user.dmlist.getAllConverse').then((data) => {
data.converseIds.forEach(async (converseId) => {
// TODO: 待优化, 可以在后端一次性返回
const converse = await getCachedConverseInfo(converseId);
store.dispatch(chatActions.setConverseInfo(converse));
});
});
// ------------------ 通知
socket.listen<{ userId: string }>('friend.add', ({ userId }) => { socket.listen<{ userId: string }>('friend.add', ({ userId }) => {
if (typeof userId !== 'string') { if (typeof userId !== 'string') {
console.error('错误的信息', userId); console.error('错误的信息', userId);

Loading…
Cancel
Save