File size: 2,200 Bytes
38eebf9
f43283a
be99f83
38eebf9
f43283a
 
64b1da0
04225e2
454aa85
457b4e6
dcce454
e3b65ea
dcce454
ddd1aa2
 
dcce454
 
be99f83
04225e2
f43283a
38eebf9
e3b65ea
dcce454
e3b65ea
 
 
 
 
 
8a7a5d9
e3b65ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f43283a
e3b65ea
 
 
 
 
 
 
 
 
 
 
 
36669dc
e3b65ea
 
 
97cc326
e3b65ea
dcce454
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { useTranslate } from '@/hooks/commonHooks';
import { Flex } from 'antd';
import classNames from 'classnames';
import lowerFirst from 'lodash/lowerFirst';
import pick from 'lodash/pick';
import { Handle, NodeProps, Position } from 'reactflow';
import { Operator, operatorMap } from '../../constant';
import { NodeData } from '../../interface';
import OperatorIcon from '../../operator-icon';
import NodeDropdown from './dropdown';
import styles from './index.less';
import NodePopover from './popover';

export function RagNode({
  id,
  data,
  isConnectable = true,
  selected,
}: NodeProps<NodeData>) {
  const style = operatorMap[data.label as Operator];
  const { t } = useTranslate('flow');

  return (
    <NodePopover nodeId={id}>
      <section
        className={classNames(styles.ragNode, {
          [styles.selectedNode]: selected,
        })}
        style={pick(style, ['backgroundColor', 'width', 'height', 'color'])}
      >
        <Handle
          id="c"
          type="source"
          position={Position.Left}
          isConnectable={isConnectable}
          className={styles.handle}
        ></Handle>
        <Handle type="source" position={Position.Top} id="d" isConnectable />
        <Handle
          type="source"
          position={Position.Right}
          isConnectable={isConnectable}
          className={styles.handle}
          id="b"
        ></Handle>
        <Handle type="source" position={Position.Bottom} id="a" isConnectable />
        <Flex
          vertical
          align="center"
          justify={'center'}
          gap={data.label === Operator.RewriteQuestion ? 0 : 6}
        >
          <OperatorIcon
            name={data.label as Operator}
            fontSize={style['iconFontSize'] ?? 24}
          ></OperatorIcon>
          <span
            className={styles.type}
            style={{ fontSize: style.fontSize ?? 14 }}
          >
            {t(lowerFirst(data.label))}
          </span>
          <NodeDropdown id={id}></NodeDropdown>
        </Flex>

        <section className={styles.bottomBox}>
          <div className={styles.nodeName}>{data.name}</div>
        </section>
      </section>
    </NodePopover>
  );
}