DB-GPT/web/components/chat/chat-content/ReferencesContent.tsx
Dreammy23 471689ba20
feat(web): Unified frontend code style (#1923)
Co-authored-by: Fangyin Cheng <staneyffer@gmail.com>
Co-authored-by: 谨欣 <echo.cmy@antgroup.com>
Co-authored-by: 严志勇 <yanzhiyong@tiansuixiansheng.com>
Co-authored-by: yanzhiyong <932374019@qq.com>
2024-08-30 14:03:06 +08:00

73 lines
2.1 KiB
TypeScript

import MarkDownContext from '@/new-components/common/MarkdownContext';
import { LinkOutlined } from '@ant-design/icons';
import type { TabsProps } from 'antd';
import { Divider, Drawer, Tabs, Typography } from 'antd';
import { useRouter } from 'next/router';
import React, { useMemo, useState } from 'react';
const ReferencesContentView: React.FC<{ references: any }> = ({ references }) => {
const router = useRouter();
const [open, setOpen] = useState<boolean>(false);
// 是否移动端页面
const isMobile = useMemo(() => {
return router.pathname.includes('/mobile');
}, [router]);
const items: TabsProps['items'] = useMemo(() => {
return references?.knowledge?.map((reference: any) => {
return {
label: (
<div style={{ maxWidth: '120px' }}>
<Typography.Text
ellipsis={{
tooltip: reference.name,
}}
>
{decodeURIComponent(reference.name).split('_')[0]}
</Typography.Text>
</div>
),
key: reference.name,
children: (
<div className='h-full overflow-y-auto'>
{reference?.chunks?.map((chunk: any) => <MarkDownContext key={chunk.id}>{chunk.content}</MarkDownContext>)}
</div>
),
};
});
}, [references]);
return (
<div>
<Divider className='mb-1 mt-0' dashed />
<div className='flex text-sm gap-2 text-blue-400' onClick={() => setOpen(true)}>
<LinkOutlined />
<span className='text-sm'></span>
</div>
<Drawer
open={open}
title='回复引用'
placement={isMobile ? 'bottom' : 'right'}
onClose={() => setOpen(false)}
destroyOnClose={true}
className='p-0'
{...(!isMobile && { width: '30%' })}
>
<Tabs items={items} size='small' />
</Drawer>
</div>
);
};
const ReferencesContent: React.FC<{ references: any }> = ({ references }) => {
try {
const data = JSON.parse(references);
return <ReferencesContentView references={data} />;
} catch {
return null;
}
};
export default ReferencesContent;