index.tsx 813 B

123456789101112131415161718192021222324252627282930313233343536
  1. import { memo } from 'react'
  2. import type { NodeProps } from 'reactflow'
  3. import type { Node } from '../types'
  4. import {
  5. NodeComponentMap,
  6. PanelComponentMap,
  7. } from './constants'
  8. import BaseNode from './_base/node'
  9. import BasePanel from './_base/panel'
  10. const CustomNode = memo((props: NodeProps) => {
  11. const nodeData = props.data
  12. const NodeComponent = NodeComponentMap[nodeData.type]
  13. return (
  14. <BaseNode { ...props }>
  15. <NodeComponent />
  16. </BaseNode>
  17. )
  18. })
  19. CustomNode.displayName = 'CustomNode'
  20. export const Panel = memo((props: Node) => {
  21. const nodeData = props.data
  22. const PanelComponent = PanelComponentMap[nodeData.type]
  23. return (
  24. <BasePanel key={props.id} {...props}>
  25. <PanelComponent />
  26. </BasePanel>
  27. )
  28. })
  29. Panel.displayName = 'Panel'
  30. export default memo(CustomNode)