import { useEffect, useState, useRef } from 'react'; import styles from './index.module.less'; import classNames from 'classnames'; import CustomMarkdown from '../custom-markdown'; import IconFont from '../iconfont'; import PackIcon from '../../assets/pack-up.svg'; import PackDisableIcon from '../../assets/pack-up-disabled.svg'; import { Tooltip } from 'antd'; import QueryItem from './components/query-item'; import SearchItem from './components/search-item'; import Loading from '../loading'; import EmptyPlaceHolder from './components/empty-placeholder'; interface IProps { nodeInfo: any; stashInfo?: any; historyNode?: any; toggleRight: () => void; chatIsOver?: Boolean; } const ChatRight = ({ nodeInfo, historyNode = null, toggleRight, chatIsOver = false }: IProps) => { const [subQuestion, setSubQuestion] = useState(''); const [queries, setQuries] = useState([]); const [searchList, setSearchList] = useState([]); const [conclusionRef, setConclusionRef] = useState(null); const [isLoading, setIsLoading] = useState(false); const [selectedIds, setSelectedIds] = useState([]); const [currentStep, setCurrentStep] = useState(0); const [conclusion, setConclusion] = useState(''); const [thinkingData, setThinking] = useState(null); const [readingData, setReading] = useState(null); const [isOutputing, setIsOutputing] = useState(false); // steps展开收起的信息 const [collapseInfo, setCollapseInfo] = useState([true, true, true]); const [currentNode, setCurrentNode] = useState(); // 展开收起 const toggleCard = (index: number) => { const arr = [...collapseInfo]; arr[index] = !arr[index]; setCollapseInfo(arr); }; // 高亮searchList const highLightSearchList = (ids: any) => { setCurrentStep(2); const highlightArr: any = [...searchList]; highlightArr.forEach((item: any) => { if (ids.includes(Number(item.id))) { item.highLight = true; } }); highlightArr.sort((item1: any, item2: any) => { if (item1.highLight === item2.highLight) { return 0; } // 如果item1是highlight,放在前面 if (item1.highLight) { return -1; } // 如果item2是highlight,放在后面 return 1; }); setSearchList(highlightArr); setCollapseInfo([false, false, true]); }; const handleReceiveHistory = () => { setCurrentNode(2); setCollapseInfo([false, false, true]); setIsLoading(false); setThinking(historyNode.thinkingData); setConclusion(historyNode.conclusion); setReading(historyNode.readingData); setQuries(historyNode.queries); setSearchList(historyNode.searchList); setConclusionRef(historyNode.conclusionRef); setSelectedIds(historyNode.selectedIds); setSubQuestion(historyNode.subQuestion); }; const resetStatus = () => { // 初始化组件状态 console.log('reset status-------'); setCurrentStep(0); setCollapseInfo([true, true, true]); setSelectedIds([]); setSearchList([]); setConclusionRef(null); setThinking(null); setReading(null); setConclusion(''); setSubQuestion(''); }; const hideRight = () => { if (isOutputing) return; toggleRight(); }; useEffect(() => { if (!historyNode) return; handleReceiveHistory(); }, [historyNode]); useEffect(() => { if (!selectedIds.length) return; highLightSearchList(selectedIds); }, [selectedIds]); useEffect(() => { if (historyNode) return; // 有历史记录,不处理 try { if (nodeInfo?.current_node !== currentNode) { setCurrentNode(nodeInfo?.current_node); resetStatus(); } setIsOutputing(nodeInfo?.outputing); if (!subQuestion && nodeInfo?.subQuestion) { setSubQuestion(nodeInfo.subQuestion); } if (nodeInfo?.thinkingData) { setThinking(nodeInfo.thinkingData); } if (nodeInfo?.readingData) { setReading(nodeInfo.readingData); } if (nodeInfo?.queries?.length) { setQuries(nodeInfo.queries); } if (nodeInfo?.searchList && !searchList?.length) { setSearchList(nodeInfo.searchList); setCurrentStep(1); setCollapseInfo([false, true, true]); } if (nodeInfo?.selectedIds && !selectedIds?.length) { setSelectedIds(nodeInfo.selectedIds); } if (nodeInfo?.conclusion) { setConclusion(nodeInfo.conclusion); } if (nodeInfo?.conclusionRef) { setConclusionRef(nodeInfo.conclusionRef); } } catch (err) { console.log('[chat right]--error from nodeinfo---', err); } }, [nodeInfo, currentStep]); return
{ currentNode ? <>
{subQuestion}
{thinkingData && (
思考
{ toggleCard(0); }} >
{queries.length > 0 && (
搜索关键词
{queries.map((item: string, index: number) => ( ))}
)} {searchList.length > 0 && currentStep === 0 && (
信息来源
5 ? { height: '542px' } : {}}>
5 ? {} : {}}> {searchList.map((item: any) => ( ))}
)}
)} {currentStep > 0 && readingData && (
信息来源
{ toggleCard(1); }} >
{searchList.length > 0 && (
5 ? { height: '542px' } : {}}>
5 ? {} : {}}> {searchList.map((item: any) => ( ))}
)}
)} { conclusion && (
信息整合
{ toggleCard(2); }} >
)} {isLoading && }
: }
}; export default ChatRight;