import { apiInterceptors, chunkAddQuestion, getChunkList } from '@/client/api'; import MenuModal from '@/components/MenuModal'; import MarkDownContext from '@/new-components/common/MarkdownContext'; import { MinusCircleOutlined, PlusOutlined, SearchOutlined } from '@ant-design/icons'; import { useRequest } from 'ahooks'; import { App, Breadcrumb, Button, Card, Empty, Form, Input, Pagination, Space, Spin, Tag } from 'antd'; import cls from 'classnames'; import { debounce } from 'lodash'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; const DEDAULT_PAGE_SIZE = 10; function ChunkList() { const router = useRouter(); const { t } = useTranslation(); const [chunkList, setChunkList] = useState([]); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(false); // const [isExpand, setIsExpand] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false); const [currentChunkInfo, setCurrentChunkInfo] = useState(null); const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); const [form] = Form.useForm(); const { message } = App.useApp(); const { query: { id, spaceName }, } = useRouter(); const fetchChunks = async () => { setLoading(true); const [_, data] = await apiInterceptors( getChunkList(spaceName as string, { document_id: id as string, page: 1, page_size: DEDAULT_PAGE_SIZE, }), ); setChunkList(data?.data); setTotal(data?.total ?? 0); setLoading(false); }; const loaderMore = async (page: number, page_size: number) => { setPageSize(page_size); setLoading(true); const [_, data] = await apiInterceptors( getChunkList(spaceName as string, { document_id: id as string, page, page_size, }), ); setChunkList(data?.data || []); setLoading(false); setCurrentPage(page); }; useEffect(() => { spaceName && id && fetchChunks(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [id, spaceName]); const onSearch = async (e: any) => { const content = e.target.value; if (!content) { return; } const [_, data] = await apiInterceptors( getChunkList(spaceName as string, { document_id: id as string, page: currentPage, page_size: pageSize, content, }), ); setChunkList(data?.data || []); }; // 添加问题 const { run: addQuestionRun, loading: addLoading } = useRequest( async (questions: string[]) => apiInterceptors(chunkAddQuestion({ chunk_id: currentChunkInfo.id, questions })), { manual: true, onSuccess: async () => { message.success('添加成功'); setIsModalOpen(false); await fetchChunks(); }, }, ); return (
} placeholder={t('please_enter_the_keywords')} onChange={debounce(onSearch, 300)} allowClear />
{chunkList?.length > 0 ? (
{chunkList?.map((chunk: any, index: number) => { return ( # {index + (currentPage - 1) * DEDAULT_PAGE_SIZE} {/* */} {chunk.doc_name} } className={cls('h-96 rounded-xl overflow-hidden', { // 'h-auto': isExpand, 'h-auto': true, })} onClick={() => { setIsModalOpen(true); setCurrentChunkInfo(chunk); }} >

{t('Content')}:

{chunk?.content}

{t('Meta_Data')}:

{chunk?.meta_info}

{/* setIsExpand(!isExpand)} > {isExpand ? '收起' : '展开'} */}
); })}
) : ( )} `Total ${total} items`} onChange={loaderMore} /> setIsModalOpen(false), afterOpenChange: open => { if (open) { form.setFieldValue( 'questions', JSON.parse(currentChunkInfo?.questions || '[]')?.map((item: any) => ({ question: item })), ); } }, }} items={[ { key: 'edit', label: t('Data_content'), children: (
{currentChunkInfo?.content} {currentChunkInfo?.meta_info}
), }, { key: 'delete', label: t('Add_problem'), children: ( { const formVal = form.getFieldsValue(); if (!formVal.questions) { message.warning(t('enter_question_first')); return; } if (formVal.questions?.filter(Boolean).length === 0) { message.warning(t('enter_question_first')); return; } const questions = formVal.questions?.filter(Boolean).map((item: any) => item.question); await addQuestionRun(questions); }} loading={addLoading} > {t('save')} } >
{(fields, { add, remove }) => ( <> {fields.map(({ key, name }) => (
{ remove(name); }} />
))} )}
), }, ]} />
); } export default ChunkList;