mirror of https://github.com/msgbyte/tailchat
feat: 收件箱增加message类型的消息内容渲染
parent
170a243a66
commit
a9f2d00d9e
@ -0,0 +1,84 @@
|
||||
import { NormalMessageList } from '@/components/ChatBox/ChatMessageList/NormalList';
|
||||
import { LoadingSpinner } from '@/components/LoadingSpinner';
|
||||
import { Problem } from '@/components/Problem';
|
||||
import React from 'react';
|
||||
import { useNavigate } from 'react-router';
|
||||
import {
|
||||
InboxItem,
|
||||
model,
|
||||
showErrorToasts,
|
||||
t,
|
||||
useAsync,
|
||||
} from 'tailchat-shared';
|
||||
|
||||
interface Props {
|
||||
info: InboxItem;
|
||||
}
|
||||
export const InboxMessageContent: React.FC<Props> = React.memo((props) => {
|
||||
const info = props.info;
|
||||
const navigate = useNavigate();
|
||||
|
||||
const message = info.message;
|
||||
if (!message) {
|
||||
return <Problem />;
|
||||
}
|
||||
const { groupId, converseId, messageId } = message;
|
||||
|
||||
return (
|
||||
<div className="w-full relative">
|
||||
<NearbyMessages converseId={converseId} messageId={messageId} />
|
||||
|
||||
<div className="absolute bottom-4 left-0 right-0 text-center">
|
||||
<div
|
||||
className="shadow-lg px-6 py-2 rounded-full inline-block bg-indigo-600 hover:bg-indigo-700 text-white cursor-pointer"
|
||||
onClick={() => {
|
||||
if (groupId) {
|
||||
// 跳转到群组
|
||||
navigate(`/main/group/${groupId}/${converseId}`);
|
||||
} else {
|
||||
navigate(`/main/personal/converse/${converseId}`);
|
||||
}
|
||||
}}
|
||||
>
|
||||
{t('跳转到会话')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
InboxMessageContent.displayName = 'InboxMessageContent';
|
||||
|
||||
export const NearbyMessages: React.FC<{
|
||||
converseId: string;
|
||||
messageId: string;
|
||||
}> = React.memo((props) => {
|
||||
const { value = [], loading } = useAsync(async () => {
|
||||
try {
|
||||
const list = await model.message.fetchNearbyMessage(
|
||||
props.converseId,
|
||||
props.messageId
|
||||
);
|
||||
|
||||
return list;
|
||||
} catch (err) {
|
||||
showErrorToasts(err);
|
||||
console.error(err);
|
||||
}
|
||||
}, [props.converseId, props.messageId]);
|
||||
|
||||
if (loading) {
|
||||
return <LoadingSpinner />;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<NormalMessageList
|
||||
messages={value}
|
||||
isLoadingMore={false}
|
||||
hasMoreMessage={false}
|
||||
onLoadMore={async () => {}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
NearbyMessages.displayName = 'NearbyMessages';
|
@ -0,0 +1,21 @@
|
||||
import { NotFound } from '@/components/NotFound';
|
||||
import React from 'react';
|
||||
import { useParams } from 'react-router';
|
||||
import { t, useInboxItem } from 'tailchat-shared';
|
||||
import { InboxMessageContent } from './Message';
|
||||
|
||||
export const InboxContent: React.FC = React.memo((props) => {
|
||||
const { inboxItemId } = useParams();
|
||||
const inboxItem = useInboxItem(inboxItemId ?? '');
|
||||
|
||||
if (!inboxItem) {
|
||||
return <NotFound message={t('没有找到该记录')} />;
|
||||
}
|
||||
|
||||
if (inboxItem.type === 'message') {
|
||||
return <InboxMessageContent info={inboxItem} />;
|
||||
}
|
||||
|
||||
return <NotFound message={t('没有找到该类型的渲染方式')} />;
|
||||
});
|
||||
InboxContent.displayName = 'InboxContent';
|
Loading…
Reference in New Issue