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 'react-i18next'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useChatStore } from '@/web/core/chat/context/useChatStore'; import QuoteItem from './QuoteItem'; import { useMemo } from 'react'; import { getSourceNameIcon } from '@fastgpt/global/core/dataset/utils'; import { formatScore } from '@/components/core/dataset/QuoteItem'; import { metadataType } from '@/web/core/chat/context/chatItemContext'; import { getQuoteDataList } from '@/web/core/chat/api'; const QuoteReader = ({ rawSearch, metadata, chatTime, onClose }: { rawSearch: SearchDataResponseItemType[]; metadata: metadataType; chatTime: Date; onClose: () => void; }) => { const { t } = useTranslation(); const { chatId, appId, outLinkAuthData } = useChatStore(); const { data, loading } = useRequest2( async () => await getQuoteDataList({ datasetDataIdList: rawSearch.map((item) => item.id), chatTime, collectionIdList: metadata.collectionIdList, chatItemId: metadata.chatItemId, appId, chatId, ...outLinkAuthData }), { manual: false } ); const filterResults = useMemo(() => { if (!metadata.collectionId) { return rawSearch; } return rawSearch.filter( (item) => item.collectionId === metadata.collectionId && item.sourceId === metadata.sourceId ); }, [metadata, rawSearch]); const formatedDataList = useMemo(() => { return filterResults .map((item) => { const currentFilterItem = data?.quoteList.find((res) => res._id === item.id); return { ...item, q: currentFilterItem?.q || '', a: currentFilterItem?.a || '', score: formatScore(item.score), icon: getSourceNameIcon({ sourceId: item.sourceId, sourceName: item.sourceName }) }; }) .sort((a, b) => { return (b.score.primaryScore?.value || 0) - (a.score.primaryScore?.value || 0); }); }, [data?.quoteList, filterResults]); return ( {/* title */} {metadata.sourceName ? metadata.sourceName : t('common:core.chat.Quote Amount', { amount: rawSearch.length })} {t('common:core.chat.quote.Quote Tip')} {/* quote list */} {!loading && ( {formatedDataList?.map((item, index) => ( ))} )} ); }; export default QuoteReader;