refactor: modify friend data struct

add nickname in friend model
pull/90/head
moonrailgun 2 years ago
parent 1932c3c26d
commit 0991dcde8e

@ -100,7 +100,9 @@ function initial(socket: AppSocket, store: AppStore) {
); );
// 获取好友列表 // 获取好友列表
socket.request<string[]>('friend.getAllFriends').then((data) => { socket
.request<{ id: string; nickname?: string }[]>('friend.getAllFriends')
.then((data) => {
store.dispatch(userActions.setFriendList(data)); store.dispatch(userActions.setFriendList(data));
}); });
@ -144,7 +146,7 @@ function listenNotify(socket: AppSocket, store: AppStore) {
console.error('错误的信息', userId); console.error('错误的信息', userId);
return; return;
} }
store.dispatch(userActions.appendFriend(userId)); store.dispatch(userActions.appendFriend({ id: userId }));
}); });
socket.listen<FriendRequest>('friend.request.add', (request) => { socket.listen<FriendRequest>('friend.request.add', (request) => {

@ -3,9 +3,14 @@ import _set from 'lodash/set';
import type { UserLoginInfo } from '../../model/user'; import type { UserLoginInfo } from '../../model/user';
import type { FriendRequest } from '../../model/friend'; import type { FriendRequest } from '../../model/friend';
export interface FriendInfo {
id: string;
nickname?: string;
}
export interface UserState { export interface UserState {
info: UserLoginInfo | null; info: UserLoginInfo | null;
friends: string[]; // 好友的id列表 friends: FriendInfo[]; // 好友的id列表
friendRequests: FriendRequest[]; friendRequests: FriendRequest[];
} }
@ -44,13 +49,13 @@ const userSlice = createSlice({
_set(state.info, ['extra', fieldName], fieldValue); _set(state.info, ['extra', fieldName], fieldValue);
}, },
setFriendList(state, action: PayloadAction<string[]>) { setFriendList(state, action: PayloadAction<FriendInfo[]>) {
state.friends = action.payload; state.friends = action.payload;
}, },
setFriendRequests(state, action: PayloadAction<FriendRequest[]>) { setFriendRequests(state, action: PayloadAction<FriendRequest[]>) {
state.friendRequests = action.payload; state.friendRequests = action.payload;
}, },
appendFriend(state, action: PayloadAction<string>) { appendFriend(state, action: PayloadAction<FriendInfo>) {
if (state.friends.some((id) => id === action.payload)) { if (state.friends.some((id) => id === action.payload)) {
return; return;
} }
@ -59,7 +64,7 @@ const userSlice = createSlice({
}, },
removeFriend(state, action: PayloadAction<string>) { removeFriend(state, action: PayloadAction<string>) {
const friendId = action.payload; const friendId = action.payload;
const index = state.friends.indexOf(friendId); const index = state.friends.findIndex((item) => item.id === friendId);
if (index >= 0) { if (index >= 0) {
state.friends.splice(index, 1); state.friends.splice(index, 1);
} }

@ -71,16 +71,16 @@ export const FriendList: React.FC<{
<div className="py-2.5 px-5"> <div className="py-2.5 px-5">
<div>{t('好友列表')}</div> <div>{t('好友列表')}</div>
<div> <div>
{friends.map((friendId) => ( {friends.map((item) => (
<UserListItem <UserListItem
key={friendId} key={item.id}
userId={friendId} userId={item.id}
actions={[ actions={[
<Tooltip key="message" title={t('发送消息')}> <Tooltip key="message" title={t('发送消息')}>
<div> <div>
<IconBtn <IconBtn
icon="mdi:message-text-outline" icon="mdi:message-text-outline"
onClick={() => handleCreateConverse(friendId)} onClick={() => handleCreateConverse(item.id)}
/> />
</div> </div>
</Tooltip>, </Tooltip>,
@ -91,7 +91,7 @@ export const FriendList: React.FC<{
{ {
key: 'delete', key: 'delete',
danger: true, danger: true,
onClick: () => handleRemoveFriend(friendId), onClick: () => handleRemoveFriend(item.id),
label: t('删除'), label: t('删除'),
}, },
], ],

@ -31,6 +31,12 @@ export class Friend extends FindOrCreate implements Base {
}) })
to: Ref<User>; to: Ref<User>;
/**
* ,
*/
@prop()
nickname?: string;
@prop() @prop()
createdAt: Date; createdAt: Date;

@ -1,5 +1,8 @@
import { TcCacheCleaner } from '../../../mixins/cache.cleaner.mixin'; import type {
import type { FriendDocument, FriendModel } from '../../../models/user/friend'; Friend,
FriendDocument,
FriendModel,
} from '../../../models/user/friend';
import { TcService, TcDbService, TcContext } from 'tailchat-server-sdk'; import { TcService, TcDbService, TcContext } from 'tailchat-server-sdk';
interface FriendService interface FriendService
@ -44,10 +47,13 @@ class FriendService extends TcService {
}, },
}); });
const records = await this.transformDocuments(ctx, {}, list); const records: Friend[] = await this.transformDocuments(ctx, {}, list);
const ids = records.map((r) => r.to); const res = records.map((r) => ({
id: r.to,
nickname: r.nickname,
}));
return ids; return res;
} }
/** /**

Loading…
Cancel
Save