mirror of https://github.com/msgbyte/tailchat
feat: add text panel message search right panel
parent
0ff8f558ef
commit
176528b303
@ -0,0 +1,62 @@
|
|||||||
|
import { NormalMessage } from '@/components/ChatBox/ChatMessageList/Item';
|
||||||
|
import { Empty, Input } from 'antd';
|
||||||
|
import React from 'react';
|
||||||
|
import {
|
||||||
|
ChatMessage,
|
||||||
|
model,
|
||||||
|
showToasts,
|
||||||
|
t,
|
||||||
|
useAsyncRequest,
|
||||||
|
} from 'tailchat-shared';
|
||||||
|
|
||||||
|
export const MessageSearchPanel: React.FC<{
|
||||||
|
groupId?: string;
|
||||||
|
converseId: string;
|
||||||
|
}> = React.memo((props) => {
|
||||||
|
const { groupId, converseId } = props;
|
||||||
|
const [{ loading, value = [] }, handleSearch] = useAsyncRequest(
|
||||||
|
async (searchText: string) => {
|
||||||
|
if (searchText.length < 3) {
|
||||||
|
showToasts(t('搜索内容太短无法搜索'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const messages = await model.message.searchMessage(
|
||||||
|
searchText,
|
||||||
|
converseId,
|
||||||
|
groupId
|
||||||
|
);
|
||||||
|
|
||||||
|
return messages ?? [];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const searchedMessages = value as ChatMessage[];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="p-2">
|
||||||
|
<Input.Search
|
||||||
|
className="mb-2"
|
||||||
|
placeholder="请输入关键字"
|
||||||
|
loading={loading}
|
||||||
|
onSearch={handleSearch}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Result List */}
|
||||||
|
<div>
|
||||||
|
{searchedMessages.length === 0 && (
|
||||||
|
<Empty description={t('没有任何搜索结果')} />
|
||||||
|
)}
|
||||||
|
|
||||||
|
{searchedMessages.map((message) => (
|
||||||
|
<NormalMessage
|
||||||
|
key={message._id}
|
||||||
|
showAvatar={true}
|
||||||
|
payload={message}
|
||||||
|
hideAction={true}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
MessageSearchPanel.displayName = 'MessageSearchPanel';
|
Loading…
Reference in New Issue