node-render.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import '@flowgram.ai/free-layout-editor/index.css';
  6. import {
  7. useNodeRender,
  8. WorkflowNodeProps,
  9. WorkflowNodeRenderer,
  10. } from '@flowgram.ai/free-layout-editor';
  11. import { PortRender } from './port';
  12. import { NodeBorderColorMap, NodeColorMap } from './node-color';
  13. export const NodeRender = (props: WorkflowNodeProps) => {
  14. const { selected, node, ports } = useNodeRender();
  15. const nodeColor = NodeColorMap[node.id] ?? '#fff';
  16. const borderColor = NodeBorderColorMap[node.id] ?? '#fff';
  17. return (
  18. <WorkflowNodeRenderer
  19. style={{
  20. width: 60,
  21. minHeight: 150,
  22. height: 'auto',
  23. background: nodeColor,
  24. border: selected ? `2px solid ${borderColor}` : `2px solid ${nodeColor}`,
  25. borderRadius: 16,
  26. boxShadow: '0 2px 6px 0 rgba(0, 0, 0, 0.04), 0 4px 12px 0 rgba(0, 0, 0, 0.02)',
  27. display: 'flex',
  28. flexDirection: 'column',
  29. justifyContent: 'center',
  30. position: 'relative',
  31. padding: 12,
  32. cursor: 'move',
  33. }}
  34. portStyle={{
  35. display: 'none',
  36. }}
  37. node={props.node}
  38. >
  39. {ports.map((p) => (
  40. <PortRender key={p.id} entity={p} />
  41. ))}
  42. </WorkflowNodeRenderer>
  43. );
  44. };