| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | import {  memo,  useMemo,} from 'react'import type { NodeProps } from 'reactflow'import type { Node } from '../types'import { CUSTOM_NODE } from '../constants'import {  NodeComponentMap,  PanelComponentMap,} from './constants'import BaseNode from './_base/node'import BasePanel from './_base/panel'const CustomNode = (props: NodeProps) => {  const nodeData = props.data  const NodeComponent = NodeComponentMap[nodeData.type]  return (    <>      <BaseNode { ...props }>        <NodeComponent />      </BaseNode>    </>  )}CustomNode.displayName = 'CustomNode'export const Panel = memo((props: Node) => {  const nodeClass = props.type  const nodeData = props.data  const PanelComponent = useMemo(() => {    if (nodeClass === CUSTOM_NODE)      return PanelComponentMap[nodeData.type]    return () => null  }, [nodeClass, nodeData.type])  if (nodeClass === CUSTOM_NODE) {    return (      <BasePanel key={props.id} {...props}>        <PanelComponent />      </BasePanel>    )  }  return null})Panel.displayName = 'Panel'export default memo(CustomNode)
 |