优化
This commit is contained in:
31
client/shared/redux/hooks/useConverse.ts
Normal file
31
client/shared/redux/hooks/useConverse.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { useMemo } from 'react';
|
||||
import { ChatConverseType } from '../../model/converse';
|
||||
import type { ChatConverseState } from '../slices/chat';
|
||||
import { useAppSelector } from './useAppSelector';
|
||||
|
||||
/**
|
||||
* 获取私信会话列表
|
||||
* 并补充一些信息
|
||||
*/
|
||||
export function useDMConverseList(): ChatConverseState[] {
|
||||
const converses = useAppSelector((state) => state.chat.converses);
|
||||
const lastMessageMap = useAppSelector((state) => state.chat.lastMessageMap);
|
||||
|
||||
const filteredConverse = useMemo(
|
||||
() =>
|
||||
Object.entries(converses)
|
||||
.filter(([, info]) =>
|
||||
[ChatConverseType.DM, ChatConverseType.Multi].includes(info.type)
|
||||
)
|
||||
.map(([, info]) => info),
|
||||
[converses]
|
||||
);
|
||||
|
||||
return useMemo(() => {
|
||||
return filteredConverse.sort((a, b) => {
|
||||
return (lastMessageMap[a._id] ?? '') < (lastMessageMap[b._id] ?? '')
|
||||
? 1
|
||||
: -1;
|
||||
});
|
||||
}, [filteredConverse, lastMessageMap]);
|
||||
}
|
||||
Reference in New Issue
Block a user