import { register } from "@antv/x6-react-shape"; import { EventArgs, Graph, Node, Path } from "@antv/x6"; import { topicData } from "@/config/data"; import { useSizeHook, useShapeProps } from "@/hooks"; import CustomInput from "../CustomInput"; import { useEffect, useState } from "react"; import { PlusOutlined } from "@ant-design/icons"; import { TopicType } from "@/enum"; import { addTopic } from "@/utils/mindMap"; const component = ({ node, graph }: { node: Node; graph: Graph }) => { const { fill, stroke, opacity, label, text, borderSize } = node.getData(); const { size, ref } = useSizeHook(); const { fillContent, strokeColor, strokeWidth, strokeDasharray } = useShapeProps(fill, size, stroke); const [selected, setSelected] = useState(true); const handleSelect = (_args: EventArgs["node:selected"]) => { const cells = graph.getSelectedCells(); setSelected(cells.length === 1 && cells[0].id === node.id); }; useEffect(() => { graph.createTransformWidget(node); graph.select(node); graph.on("node:selected", handleSelect); graph.on("node:unselected", handleSelect); return () => { graph.off("node:selected", handleSelect); graph.off("node:unselected", handleSelect); }; }, []); const handleAddBranch = () => { const data = node.getData(); if( data.type === TopicType.main) { addTopic(node, TopicType.branch); } else { addTopic(node, TopicType.sub); } } return ( <>