11import type { FC } from 'react' ;
2- import React from 'react' ;
3- import { PlusOutlined , MinusOutlined } from '@ant-design/icons' ;
2+ import React , { useState } from 'react' ;
3+ import {
4+ PlusOutlined ,
5+ MinusOutlined ,
6+ CaretUpOutlined ,
7+ CaretDownOutlined ,
8+ } from '@ant-design/icons' ;
49import chorma from 'chroma-js' ;
510import type { ReactShape } from '@antv/x6-react-shape' ;
11+ import cls from 'classnames' ;
612
713import { mapColorToHex , mapTypeToColor } from '../../utils' ;
8-
914import type { NodeData } from '../../types' ;
1015
1116import './style.less' ;
@@ -16,9 +21,14 @@ interface BaseNodeProps {
1621
1722const MindNode : FC < BaseNodeProps > = ( { node } ) => {
1823 const data = node . getData < NodeData > ( ) ;
19- const { type, collapsed, hasChildren } = data ;
24+
25+ const { type, collapsed, leaf = true , title, description } = data ;
2026 const baseColor = chorma ( mapColorToHex ( mapTypeToColor ( type ) ) ) ;
2127
28+ const [ unfold , setUnfold ] = useState ( false ) ;
29+
30+ const cantFold = ! description ;
31+
2232 return (
2333 < div
2434 className = "mind-node-container"
@@ -28,9 +38,34 @@ const MindNode: FC<BaseNodeProps> = ({ node }) => {
2838 borderLeftColor : baseColor . hex ( ) ,
2939 } }
3040 >
31- < div className = "mind-node-title" > { data . text } </ div >
41+ < div className = "mind-node-header" >
42+ { cantFold ? null : (
43+ < span
44+ className = "mind-node-arrow"
45+ onClick = { ( ) => {
46+ setUnfold ( ! unfold ) ;
47+ } }
48+ >
49+ { unfold ? < CaretUpOutlined /> : < CaretDownOutlined /> }
50+ </ span >
51+ ) }
52+
53+ < div
54+ className = { cls (
55+ 'mind-node-title' ,
56+ unfold ? 'mind-node-title-expand' : '' ,
57+ ) }
58+ >
59+ { title }
60+ </ div >
61+ </ div >
62+ { unfold ? (
63+ < div >
64+ < div className = "mind-node-desc" > { description } </ div >
65+ </ div >
66+ ) : null }
3267
33- { hasChildren ? (
68+ { leaf ? null : (
3469 < div
3570 className = "mind-node-collapse"
3671 style = { { borderColor : baseColor . hex ( ) } }
@@ -47,7 +82,7 @@ const MindNode: FC<BaseNodeProps> = ({ node }) => {
4782 />
4883 ) }
4984 </ div >
50- ) : null }
85+ ) }
5186 </ div >
5287 ) ;
5388} ;
0 commit comments