Spaces:
Sleeping
Sleeping
| import styles from './index.module.less'; | |
| import classNames from 'classnames'; | |
| import { useEffect, useContext } from 'react'; | |
| import { MindsearchContext } from '../../provider/context'; | |
| // 递归组件用于渲染mindMap中的节点 | |
| const MindMapItem = ({ item, isEnd, selectNode }: any) => { | |
| const { activeNode, chatIsOver } = useContext(MindsearchContext); | |
| // console.log('[ms item------]', item, isEnd, currentNodeName) | |
| // 递归渲染子节点 | |
| const renderChildren = () => { | |
| if (item?.children?.length > 0) { | |
| return ( | |
| <ul className={item.children.length === 1 ? styles.onlyone : ''}> | |
| {item.children.map((child: any, idx: number) => ( | |
| <MindMapItem key={`${child?.name}-${idx}`} item={child} isEnd={isEnd} selectNode={selectNode} /> | |
| ))} | |
| </ul> | |
| ); | |
| } | |
| return null; | |
| }; | |
| const handleClick = () => { | |
| if (item?.state === 0 || (item?.name === '原始问题' || item?.name === '最终回复')) { | |
| return; | |
| } | |
| selectNode(item?.name); | |
| }; | |
| return ( | |
| <li> | |
| <article | |
| onClick={handleClick} | |
| className={classNames( | |
| item?.state === 1 ? styles.loading : item?.state === 2 ? styles.disabled : item?.state === 3 ? styles.finished : '', | |
| item?.id === 0 ? styles.init : '', | |
| !item?.name ? styles.emptyNode : '', | |
| item?.name && item?.name === activeNode ? styles.active : '', | |
| (isEnd && !chatIsOver) ? styles.forbidden : '' | |
| )} | |
| > | |
| <span>{item?.name}</span> | |
| {item?.state === 1 && <div className={styles.looping} />} | |
| {item?.id !== 0 && <div className={styles.finishDot} />} | |
| {item?.name && item?.name === activeNode ? <div className={styles.dot} /> : ''} | |
| </article> | |
| {item?.children?.length > 0 && renderChildren()} | |
| {isEnd && (item?.children?.length === 0 || !item?.children) && <div className={classNames(styles.endLine, 'endline')} />} | |
| </li> | |
| ); | |
| }; | |
| export default MindMapItem; | |