import { Box, Flex } from '@chakra-ui/react'; import { SearchDataResponseItemType } from '@fastgpt/global/core/dataset/type'; import MyIcon from '@fastgpt/web/components/common/Icon'; import MyBox from '@fastgpt/web/components/common/MyBox'; import { useTranslation } from 'next-i18next'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import QuoteItem from './QuoteItem'; import { useMemo } from 'react'; import { getSourceNameIcon } from '@fastgpt/global/core/dataset/utils'; import { formatScore } from '@/components/core/dataset/QuoteItem'; import { GetAllQuoteDataProps } from '@/web/core/chat/context/chatItemContext'; import { getQuoteDataList } from '@/web/core/chat/api'; const QuoteReader = ({ rawSearch, metadata, onClose }: { rawSearch: SearchDataResponseItemType[]; metadata: GetAllQuoteDataProps; onClose: () => void; }) => { const { t } = useTranslation(); const filterRawSearch = useMemo(() => { return rawSearch.filter((item) => metadata.collectionIdList.includes(item.collectionId)); }, [rawSearch, metadata.collectionIdList]); const { data: quoteList, loading } = useRequest2( async () => await getQuoteDataList({ datasetDataIdList: filterRawSearch.map((item) => item.id), collectionIdList: metadata.collectionIdList, chatItemDataId: metadata.chatItemDataId, appId: metadata.appId, chatId: metadata.chatId, ...metadata.outLinkAuthData }), { refreshDeps: [metadata, filterRawSearch], manual: false } ); const formatedDataList = useMemo(() => { return filterRawSearch .map((searchItem) => { const dataItem = quoteList?.find((item) => item._id === searchItem.id); return { id: searchItem.id, q: dataItem?.q || 'Can not find Data', a: dataItem?.a || '', score: formatScore(searchItem.score), sourceName: searchItem?.sourceName || '', icon: getSourceNameIcon({ sourceId: searchItem.sourceId, sourceName: searchItem.sourceName }) }; }) .sort((a, b) => { return (b.score.primaryScore?.value || 0) - (a.score.primaryScore?.value || 0); }); }, [quoteList, filterRawSearch]); return ( {/* title */} {metadata.sourceId ? ( <> {metadata.sourceName || t('common:common.UnKnow Source')} ) : ( <> {t('common:core.chat.Quote Amount', { amount: filterRawSearch.length })} )} {t('common:core.chat.quote.Quote Tip')} {/* quote list */} {!loading && ( {formatedDataList?.map((item, index) => ( ))} )} ); }; export default QuoteReader;