diff --git a/shared/model/user.ts b/shared/model/user.ts index 08223eaa..ad4cb01f 100644 --- a/shared/model/user.ts +++ b/shared/model/user.ts @@ -12,6 +12,12 @@ export interface UserLoginInfo extends UserBaseInfo { createdAt: string; } +export interface FriendRequest { + from: string; + to: string; + message: string; +} + /** * 邮箱登录 * @param email 邮箱 diff --git a/shared/redux/setup.ts b/shared/redux/setup.ts index 8a984427..eac27f80 100644 --- a/shared/redux/setup.ts +++ b/shared/redux/setup.ts @@ -1,12 +1,21 @@ import type { AppStore } from './store'; import type { AppSocket } from '../api/socket'; +import { userActions } from './slices'; +import type { FriendRequest, UserBaseInfo } from '../model/user'; /** * 初始化Redux 上下文 */ export function setupRedux(socket: AppSocket, store: AppStore) { - socket.request('friend.getAllFriends').then((resp) => { - // TODO - console.log('好友列表', resp); + // 获取好友列表 + socket.request('friend.getAllFriends').then((data) => { + store.dispatch(userActions.setFriendList(data)); }); + + // 获取好友邀请列表 + socket + .request('friend.request.allRelatived') + .then((data) => { + store.dispatch(userActions.setFriendRequests(data)); + }); } diff --git a/shared/redux/slices/user.ts b/shared/redux/slices/user.ts index 3b3a8469..969e1d67 100644 --- a/shared/redux/slices/user.ts +++ b/shared/redux/slices/user.ts @@ -1,12 +1,17 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit'; -import type { UserBaseInfo, UserLoginInfo } from '../../model/user'; +import type { + FriendRequest, + UserBaseInfo, + UserLoginInfo, +} from '../../model/user'; interface UserState { info: UserLoginInfo | null; friends: UserBaseInfo[]; + friendRequests: FriendRequest[]; } -const initialState: UserState = { info: null, friends: [] }; +const initialState: UserState = { info: null, friends: [], friendRequests: [] }; const userSlice = createSlice({ name: 'user', @@ -15,6 +20,12 @@ const userSlice = createSlice({ setUserInfo(state, action: PayloadAction) { state.info = action.payload; }, + setFriendList(state, action: PayloadAction) { + state.friends = action.payload; + }, + setFriendRequests(state, action: PayloadAction) { + state.friendRequests = action.payload; + }, }, }); diff --git a/web/src/routes/Main/Content.tsx b/web/src/routes/Main/Content.tsx index 93af1ddc..74411047 100644 --- a/web/src/routes/Main/Content.tsx +++ b/web/src/routes/Main/Content.tsx @@ -7,6 +7,8 @@ import { useAppSelector } from '../../hooks/useAppSelector'; */ export const Content: React.FC = React.memo(() => { const friends = useAppSelector((state) => state.user.friends); + const friendRequests = useAppSelector((state) => state.user.friendRequests); + const userId = useAppSelector((state) => state.user.info?._id); return (
@@ -17,6 +19,32 @@ export const Content: React.FC = React.memo(() => {
{JSON.stringify(friends)}
+ +
+
发送的好友请求
+
+ {JSON.stringify( + friendRequests.filter((item) => item.from === userId) + )} +
+
+
+ +
+
接受的好友请求
+
+ {JSON.stringify( + friendRequests.filter((item) => item.to === userId) + )} +
+
+
+ 添加好友} + key="4" + > + 添加好友 + );