diff --git a/src/flow/Node/NodeConfig/CharacterImageConfig.tsx b/src/flow/Node/NodeConfig/CharacterImageConfig.tsx new file mode 100644 index 0000000..b87647b --- /dev/null +++ b/src/flow/Node/NodeConfig/CharacterImageConfig.tsx @@ -0,0 +1,6 @@ +import React from 'react' +interface Props {} + +export default function CharacterImageConfig({}: Props) { + return
+} diff --git a/src/flow/Node/NodeConfig/NodeConfig.tsx b/src/flow/Node/NodeConfig/NodeConfig.tsx new file mode 100644 index 0000000..465e5ae --- /dev/null +++ b/src/flow/Node/NodeConfig/NodeConfig.tsx @@ -0,0 +1,72 @@ +import React, { useCallback, useState } from 'react' +import { + INodeType, + useFlowNodesEdges, +} from '../../../store/useFlowNodesEdges.ts' +import { node } from 'globals' +import TopicConfig from '@/flow/Node/NodeConfig/TopicConfig.tsx' +import SettingConfig from '@/flow/Node/NodeConfig/SettingConfig.tsx' +import CharacterImageConfig from '@/flow/Node/NodeConfig/CharacterImageConfig.tsx' +import TranslateConfig from '@/flow/Node/NodeConfig/TranslateConfig.tsx' +import { useOnSelectionChange } from '@xyflow/react' +import { LucideDribbble } from 'lucide-react' +import { twMerge } from 'tailwind-merge' +interface Props {} + +const TopicConfigNodeType: INodeType[] = ['TopicNode'] +const SettingConfigNodeType: INodeType[] = [ + 'MainNode', + 'SupportNode', + 'SettingNode', + 'CharacterNode', + 'ChapterNode', + 'TopicNode', + 'BackgroundNode', + 'CombatNode', + 'WorldviewNode', + 'StoryNode', +] +const CharacterImageConfigNodeType: INodeType[] = ['CharacterImageNode'] +const TranslateConfigNodeType: INodeType[] = ['TranslateNode'] + +function getConfig(nodeType: INodeType) { + if (TopicConfigNodeType.includes(nodeType)) return TopicConfig + if (SettingConfigNodeType.includes(nodeType)) return SettingConfig + if (CharacterImageConfigNodeType.includes(nodeType)) + return CharacterImageConfig + if (TranslateConfigNodeType.includes(nodeType)) return TranslateConfig + throw Error('no Such node type') +} + +export default function NodeConfig({}: Props) { + const { nodes, edges } = useFlowNodesEdges() + const [showWiderRing, setShowWiderRing] = useState(false) + const activeNode = nodes.filter((node) => { + return node.selected + })[0] + + const onChange = useCallback(({}) => { + const timer = setTimeout(() => { + setShowWiderRing(false) + clearTimeout(timer) + }, 300) + setShowWiderRing(true) + }, []) + + useOnSelectionChange({ + onChange, + }) + + const Config = getConfig(activeNode.type) + return ( +