You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { Flex } from 'antd';
  2. import classNames from 'classnames';
  3. import pick from 'lodash/pick';
  4. import { Handle, NodeProps, Position } from 'reactflow';
  5. import { Operator, operatorMap } from '../../constant';
  6. import { NodeData } from '../../interface';
  7. import OperatorIcon from '../../operator-icon';
  8. import NodeDropdown from './dropdown';
  9. import styles from './index.less';
  10. import NodePopover from './popover';
  11. export function RagNode({
  12. id,
  13. data,
  14. isConnectable = true,
  15. selected,
  16. }: NodeProps<NodeData>) {
  17. const style = operatorMap[data.label as Operator];
  18. return (
  19. <NodePopover nodeId={id}>
  20. <section
  21. className={classNames(styles.ragNode, {
  22. [styles.selectedNode]: selected,
  23. })}
  24. style={{
  25. ...pick(style, ['backgroundColor', 'color']),
  26. }}
  27. >
  28. <Handle
  29. id="c"
  30. type="source"
  31. position={Position.Left}
  32. isConnectable={isConnectable}
  33. className={styles.handle}
  34. ></Handle>
  35. <Handle type="source" position={Position.Top} id="d" isConnectable />
  36. <Handle
  37. type="source"
  38. position={Position.Right}
  39. isConnectable={isConnectable}
  40. className={styles.handle}
  41. id="b"
  42. ></Handle>
  43. <Handle type="source" position={Position.Bottom} id="a" isConnectable />
  44. <Flex vertical align="center" justify={'space-around'}>
  45. <Flex flex={1} justify="center" align="center">
  46. <label htmlFor=""> </label>
  47. </Flex>
  48. <Flex flex={1}>
  49. <OperatorIcon
  50. name={data.label as Operator}
  51. fontSize={style?.iconFontSize ?? 16}
  52. width={style?.iconWidth}
  53. ></OperatorIcon>
  54. </Flex>
  55. <Flex flex={1}>
  56. <NodeDropdown
  57. id={id}
  58. iconFontColor={style?.moreIconColor}
  59. ></NodeDropdown>
  60. </Flex>
  61. </Flex>
  62. <section className={styles.bottomBox}>
  63. <div className={styles.nodeName}>{data.name}</div>
  64. </section>
  65. </section>
  66. </NodePopover>
  67. );
  68. }