import React, { useCallback, useMemo, useState } from 'react'; import { ModalBody, Box, useTheme } from '@chakra-ui/react'; import { getDatasetDataItemById } from '@/api/core/dataset/data'; import { useLoading } from '@/hooks/useLoading'; import { useToast } from '@/hooks/useToast'; import { getErrText } from '@/utils/tools'; import { QuoteItemType } from '@/types/chat'; import MyIcon from '@/components/Icon'; import InputDataModal, { RawFileText } from '@/pages/kb/detail/components/InputDataModal'; import MyModal from '../MyModal'; import type { PgDataItemType } from '@/types/core/dataset/data'; import { useRouter } from 'next/router'; type SearchType = PgDataItemType & { kb_id?: string; }; const QuoteModal = ({ onUpdateQuote, rawSearch = [], onClose }: { onUpdateQuote: (quoteId: string, sourceText?: string) => Promise; rawSearch: SearchType[]; onClose: () => void; }) => { const theme = useTheme(); const router = useRouter(); const { toast } = useToast(); const { setIsLoading, Loading } = useLoading(); const [editDataItem, setEditDataItem] = useState(); const isShare = useMemo(() => router.pathname === '/chat/share', [router.pathname]); /** * click edit, get new kbDataItem */ const onclickEdit = useCallback( async (item: SearchType) => { if (!item.id) return; try { setIsLoading(true); const data = await getDatasetDataItemById(item.id); if (!data) { onUpdateQuote(item.id, '已删除'); throw new Error('该数据已被删除'); } setEditDataItem(data); } catch (err) { toast({ status: 'warning', title: getErrText(err) }); } setIsLoading(false); }, [setIsLoading, toast, onUpdateQuote] ); return ( <> 知识库引用({rawSearch.length}条) 注意: 修改知识库内容成功后,此处不会显示变更情况。点击编辑后,会显示知识库最新的内容。 } > {rawSearch.map((item, i) => ( {item.source && !isShare && ( )} {item.q} {item.a} {item.id && !isShare && ( onclickEdit(item)} /> )} ))} {editDataItem && ( setEditDataItem(undefined)} onSuccess={() => onUpdateQuote(editDataItem.id)} onDelete={() => onUpdateQuote(editDataItem.id, '已删除')} kbId={editDataItem.kb_id} defaultValues={{ ...editDataItem, dataId: editDataItem.id }} /> )} ); }; export default QuoteModal;