balibabu commited on
Commit
cd85d9e
·
1 Parent(s): fa01f2d

feat: Add a note node to the agent canvas #2767 (#2768)

Browse files

### What problem does this PR solve?

feat: Add a note node to the agent canvas #2767

### Type of change

- [ ] Bug Fix (non-breaking change which fixes an issue)
- [x] New Feature (non-breaking change which adds functionality)
- [ ] Documentation Update
- [ ] Refactoring
- [ ] Performance Improvement
- [ ] Other (please describe):

Files changed (49) hide show
  1. web/src/assets/svg/note.svg +9 -0
  2. web/src/locales/en.ts +3 -0
  3. web/src/locales/zh-traditional.ts +3 -0
  4. web/src/locales/zh.ts +3 -0
  5. web/src/pages/flow/canvas/index.tsx +9 -14
  6. web/src/pages/flow/canvas/node/index.less +21 -6
  7. web/src/pages/flow/canvas/node/index.tsx +1 -14
  8. web/src/pages/flow/canvas/node/note-node.tsx +46 -0
  9. web/src/pages/flow/constant.tsx +12 -0
  10. web/src/pages/flow/flow-drawer/index.tsx +28 -28
  11. web/src/pages/flow/flow-sider/index.tsx +12 -9
  12. web/src/pages/flow/{akshare-form → form/akshare-form}/index.tsx +1 -1
  13. web/src/pages/flow/{answer-form → form/answer-form}/index.tsx +0 -0
  14. web/src/pages/flow/{arxiv-form → form/arxiv-form}/index.tsx +1 -1
  15. web/src/pages/flow/{baidu-fanyi-form → form/baidu-fanyi-form}/index.tsx +2 -2
  16. web/src/pages/flow/{baidu-form → form/baidu-form}/index.tsx +1 -1
  17. web/src/pages/flow/{begin-form → form/begin-form}/index.tsx +1 -1
  18. web/src/pages/flow/{bing-form → form/bing-form}/index.tsx +2 -2
  19. web/src/pages/flow/{categorize-form → form/categorize-form}/dynamic-categorize.tsx +2 -2
  20. web/src/pages/flow/{categorize-form → form/categorize-form}/hooks.ts +2 -2
  21. web/src/pages/flow/{categorize-form → form/categorize-form}/index.tsx +2 -2
  22. web/src/pages/flow/{concentrator-form → form/concentrator-form}/index.tsx +1 -1
  23. web/src/pages/flow/{deepl-form → form/deepl-form}/index.tsx +3 -3
  24. web/src/pages/flow/{duckduckgo-form → form/duckduckgo-form}/index.tsx +2 -2
  25. web/src/pages/flow/{exesql-form → form/exesql-form}/index.tsx +2 -2
  26. web/src/pages/flow/{generate-form → form/generate-form}/dynamic-parameters.tsx +2 -2
  27. web/src/pages/flow/{generate-form → form/generate-form}/hooks.ts +2 -2
  28. web/src/pages/flow/{generate-form → form/generate-form}/index.less +0 -0
  29. web/src/pages/flow/{generate-form → form/generate-form}/index.tsx +2 -2
  30. web/src/pages/flow/{github-form → form/github-form}/index.tsx +1 -1
  31. web/src/pages/flow/{google-form → form/google-form}/index.tsx +2 -2
  32. web/src/pages/flow/{google-scholar-form → form/google-scholar-form}/index.tsx +2 -2
  33. web/src/pages/flow/{jin10-form → form/jin10-form}/index.tsx +2 -2
  34. web/src/pages/flow/{keyword-extract-form → form/keyword-extract-form}/index.tsx +2 -2
  35. web/src/pages/flow/{message-form → form/message-form}/index.less +0 -0
  36. web/src/pages/flow/{message-form → form/message-form}/index.tsx +1 -1
  37. web/src/pages/flow/{pubmed-form → form/pubmed-form}/index.tsx +1 -1
  38. web/src/pages/flow/{qweather-form → form/qweather-form}/index.tsx +2 -2
  39. web/src/pages/flow/{relevant-form → form/relevant-form}/hooks.ts +2 -2
  40. web/src/pages/flow/{relevant-form → form/relevant-form}/index.tsx +4 -4
  41. web/src/pages/flow/{retrieval-form → form/retrieval-form}/index.tsx +1 -1
  42. web/src/pages/flow/{rewrite-question-form → form/rewrite-question-form}/index.tsx +2 -2
  43. web/src/pages/flow/{switch-form → form/switch-form}/index.tsx +5 -5
  44. web/src/pages/flow/{tushare-form → form/tushare-form}/index.tsx +2 -2
  45. web/src/pages/flow/{wencai-form → form/wencai-form}/index.tsx +2 -2
  46. web/src/pages/flow/{wikipedia-form → form/wikipedia-form}/index.tsx +2 -2
  47. web/src/pages/flow/{yahoo-finance-form → form/yahoo-finance-form}/index.tsx +1 -1
  48. web/src/pages/flow/hooks.ts +2 -0
  49. web/src/pages/flow/utils.ts +17 -15
web/src/assets/svg/note.svg ADDED
web/src/locales/en.ts CHANGED
@@ -985,6 +985,9 @@ The above is the content you need to summarize.`,
985
  startDate: 'Start date',
986
  endDate: 'End date',
987
  keyword: 'Keyword',
 
 
 
988
  },
989
  footer: {
990
  profile: 'All rights reserved @ React',
 
985
  startDate: 'Start date',
986
  endDate: 'End date',
987
  keyword: 'Keyword',
988
+ note: 'Note',
989
+ noteDescription: 'Note',
990
+ notePlaceholder: 'Please enter a note',
991
  },
992
  footer: {
993
  profile: 'All rights reserved @ React',
web/src/locales/zh-traditional.ts CHANGED
@@ -937,6 +937,9 @@ export default {
937
  startDate: '開始日期',
938
  endDate: '結束日期',
939
  keyword: '關鍵字',
 
 
 
940
  },
941
  footer: {
942
  profile: '“保留所有權利 @ react”',
 
937
  startDate: '開始日期',
938
  endDate: '結束日期',
939
  keyword: '關鍵字',
940
+ note: '註解',
941
+ noteDescription: '註解',
942
+ notePlaceholder: '請輸入註釋',
943
  },
944
  footer: {
945
  profile: '“保留所有權利 @ react”',
web/src/locales/zh.ts CHANGED
@@ -955,6 +955,9 @@ export default {
955
  startDate: '开始日期',
956
  endDate: '结束日期',
957
  keyword: '关键字',
 
 
 
958
  },
959
  footer: {
960
  profile: 'All rights reserved @ React',
 
955
  startDate: '开始日期',
956
  endDate: '结束日期',
957
  keyword: '关键字',
958
+ note: '注释',
959
+ noteDescription: '注释',
960
+ notePlaceholder: '请输入注释',
961
  },
962
  footer: {
963
  profile: 'All rights reserved @ React',
web/src/pages/flow/canvas/index.tsx CHANGED
@@ -6,9 +6,8 @@ import ReactFlow, {
6
  NodeMouseHandler,
7
  } from 'reactflow';
8
  import 'reactflow/dist/style.css';
9
-
10
- import { ButtonEdge } from './edge';
11
-
12
  import FlowDrawer from '../flow-drawer';
13
  import {
14
  useHandleDrop,
@@ -18,13 +17,13 @@ import {
18
  useValidateConnection,
19
  useWatchNodeFormDataChange,
20
  } from '../hooks';
21
- import { RagNode } from './node';
22
-
23
- import ChatDrawer from '../chat/drawer';
24
  import styles from './index.less';
 
25
  import { BeginNode } from './node/begin-node';
26
  import { CategorizeNode } from './node/categorize-node';
27
  import { LogicNode } from './node/logic-node';
 
28
  import { RelevantNode } from './node/relevant-node';
29
 
30
  const nodeTypes = {
@@ -33,6 +32,7 @@ const nodeTypes = {
33
  beginNode: BeginNode,
34
  relevantNode: RelevantNode,
35
  logicNode: LogicNode,
 
36
  };
37
 
38
  const edgeTypes = {
@@ -60,7 +60,9 @@ function FlowCanvas({ chatDrawerVisible, hideChatDrawer }: IProps) {
60
 
61
  const onNodeClick: NodeMouseHandler = useCallback(
62
  (e, node) => {
63
- showDrawer(node);
 
 
64
  },
65
  [showDrawer],
66
  );
@@ -121,14 +123,7 @@ function FlowCanvas({ chatDrawerVisible, hideChatDrawer }: IProps) {
121
  defaultEdgeOptions={{
122
  type: 'buttonEdge',
123
  markerEnd: 'logo',
124
- // markerEnd: {
125
- // type: MarkerType.ArrowClosed,
126
- // color: 'rgb(157 149 225)',
127
- // width: 20,
128
- // height: 20,
129
- // },
130
  style: {
131
- // edge style
132
  strokeWidth: 2,
133
  stroke: 'rgb(202 197 245)',
134
  },
 
6
  NodeMouseHandler,
7
  } from 'reactflow';
8
  import 'reactflow/dist/style.css';
9
+ import ChatDrawer from '../chat/drawer';
10
+ import { Operator } from '../constant';
 
11
  import FlowDrawer from '../flow-drawer';
12
  import {
13
  useHandleDrop,
 
17
  useValidateConnection,
18
  useWatchNodeFormDataChange,
19
  } from '../hooks';
20
+ import { ButtonEdge } from './edge';
 
 
21
  import styles from './index.less';
22
+ import { RagNode } from './node';
23
  import { BeginNode } from './node/begin-node';
24
  import { CategorizeNode } from './node/categorize-node';
25
  import { LogicNode } from './node/logic-node';
26
+ import NoteNode from './node/note-node';
27
  import { RelevantNode } from './node/relevant-node';
28
 
29
  const nodeTypes = {
 
32
  beginNode: BeginNode,
33
  relevantNode: RelevantNode,
34
  logicNode: LogicNode,
35
+ noteNode: NoteNode,
36
  };
37
 
38
  const edgeTypes = {
 
60
 
61
  const onNodeClick: NodeMouseHandler = useCallback(
62
  (e, node) => {
63
+ if (node.data.label !== Operator.Note) {
64
+ showDrawer(node);
65
+ }
66
  },
67
  [showDrawer],
68
  );
 
123
  defaultEdgeOptions={{
124
  type: 'buttonEdge',
125
  markerEnd: 'logo',
 
 
 
 
 
 
126
  style: {
 
127
  strokeWidth: 2,
128
  stroke: 'rgb(202 197 245)',
129
  },
web/src/pages/flow/canvas/node/index.less CHANGED
@@ -1,9 +1,13 @@
1
- .ragNode {
2
- position: relative;
3
  box-shadow:
4
  -6px 0 12px 0 rgba(179, 177, 177, 0.08),
5
  -3px 0 6px -4px rgba(0, 0, 0, 0.12),
6
  -6px 0 16px 6px rgba(0, 0, 0, 0.05);
 
 
 
 
 
7
 
8
  padding: 5px;
9
  border-radius: 5px;
@@ -68,10 +72,7 @@
68
 
69
  .logicNode {
70
  position: relative;
71
- box-shadow:
72
- -6px 0 12px 0 rgba(179, 177, 177, 0.08),
73
- -3px 0 6px -4px rgba(0, 0, 0, 0.12),
74
- -6px 0 16px 6px rgba(0, 0, 0, 0.05);
75
 
76
  padding: 5px;
77
  border-radius: 5px;
@@ -116,3 +117,17 @@
116
  white-space: nowrap;
117
  }
118
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .commonNode() {
 
2
  box-shadow:
3
  -6px 0 12px 0 rgba(179, 177, 177, 0.08),
4
  -3px 0 6px -4px rgba(0, 0, 0, 0.12),
5
  -6px 0 16px 6px rgba(0, 0, 0, 0.05);
6
+ }
7
+
8
+ .ragNode {
9
+ position: relative;
10
+ .commonNode();
11
 
12
  padding: 5px;
13
  border-radius: 5px;
 
72
 
73
  .logicNode {
74
  position: relative;
75
+ .commonNode();
 
 
 
76
 
77
  padding: 5px;
78
  border-radius: 5px;
 
117
  white-space: nowrap;
118
  }
119
  }
120
+
121
+ .noteNode {
122
+ .commonNode();
123
+ width: 140px;
124
+ padding: 4px 6px 6px;
125
+ border-radius: 10px;
126
+ background-color: #dbf8f4;
127
+ .noteTitle {
128
+ font-size: 12px;
129
+ }
130
+ .noteForm {
131
+ margin-top: 4px;
132
+ }
133
+ }
web/src/pages/flow/canvas/node/index.tsx CHANGED
@@ -1,4 +1,3 @@
1
- import { useTranslate } from '@/hooks/common-hooks';
2
  import { Flex } from 'antd';
3
  import classNames from 'classnames';
4
  import pick from 'lodash/pick';
@@ -10,12 +9,6 @@ import NodeDropdown from './dropdown';
10
  import styles from './index.less';
11
  import NodePopover from './popover';
12
 
13
- const ZeroGapOperators = [
14
- Operator.RewriteQuestion,
15
- Operator.KeywordExtract,
16
- Operator.ArXiv,
17
- ];
18
-
19
  export function RagNode({
20
  id,
21
  data,
@@ -23,7 +16,6 @@ export function RagNode({
23
  selected,
24
  }: NodeProps<NodeData>) {
25
  const style = operatorMap[data.label as Operator];
26
- const { t } = useTranslate('flow');
27
 
28
  return (
29
  <NodePopover nodeId={id}>
@@ -51,12 +43,7 @@ export function RagNode({
51
  id="b"
52
  ></Handle>
53
  <Handle type="source" position={Position.Bottom} id="a" isConnectable />
54
- <Flex
55
- vertical
56
- align="center"
57
- justify={'space-around'}
58
- // gap={ZeroGapOperators.some((x) => x === data.label) ? 0 : 6}
59
- >
60
  <Flex flex={1} justify="center" align="center">
61
  <label htmlFor=""> </label>
62
  </Flex>
 
 
1
  import { Flex } from 'antd';
2
  import classNames from 'classnames';
3
  import pick from 'lodash/pick';
 
9
  import styles from './index.less';
10
  import NodePopover from './popover';
11
 
 
 
 
 
 
 
12
  export function RagNode({
13
  id,
14
  data,
 
16
  selected,
17
  }: NodeProps<NodeData>) {
18
  const style = operatorMap[data.label as Operator];
 
19
 
20
  return (
21
  <NodePopover nodeId={id}>
 
43
  id="b"
44
  ></Handle>
45
  <Handle type="source" position={Position.Bottom} id="a" isConnectable />
46
+ <Flex vertical align="center" justify={'space-around'}>
 
 
 
 
 
47
  <Flex flex={1} justify="center" align="center">
48
  <label htmlFor=""> </label>
49
  </Flex>
web/src/pages/flow/canvas/node/note-node.tsx ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Flex, Form, Input, Space } from 'antd';
2
+ import { NodeProps } from 'reactflow';
3
+ import { NodeData } from '../../interface';
4
+ import NodeDropdown from './dropdown';
5
+
6
+ import SvgIcon from '@/components/svg-icon';
7
+ import { useEffect } from 'react';
8
+ import { useTranslation } from 'react-i18next';
9
+ import { useHandleFormValuesChange } from '../../hooks';
10
+ import styles from './index.less';
11
+
12
+ const { TextArea } = Input;
13
+
14
+ function NoteNode({ data, id }: NodeProps<NodeData>) {
15
+ const { t } = useTranslation();
16
+ const [form] = Form.useForm();
17
+
18
+ const { handleValuesChange } = useHandleFormValuesChange(id);
19
+
20
+ useEffect(() => {
21
+ form.setFieldsValue(data?.form);
22
+ }, [form, data?.form]);
23
+
24
+ return (
25
+ <section className={styles.noteNode}>
26
+ <Flex justify={'space-between'}>
27
+ <Space size={'small'}>
28
+ <SvgIcon name="note" width={14}></SvgIcon>
29
+ <span className={styles.noteTitle}>{t('flow.note')}</span>
30
+ </Space>
31
+ <NodeDropdown id={id}></NodeDropdown>
32
+ </Flex>
33
+ <Form
34
+ onValuesChange={handleValuesChange}
35
+ form={form}
36
+ className={styles.noteForm}
37
+ >
38
+ <Form.Item name="text" noStyle>
39
+ <TextArea rows={3} placeholder={t('flow.notePlaceholder')} />
40
+ </Form.Item>
41
+ </Form>
42
+ </section>
43
+ );
44
+ }
45
+
46
+ export default NoteNode;
web/src/pages/flow/constant.tsx CHANGED
@@ -12,6 +12,7 @@ import { ReactComponent as GoogleScholarIcon } from '@/assets/svg/google-scholar
12
  import { ReactComponent as GoogleIcon } from '@/assets/svg/google.svg';
13
  import { ReactComponent as Jin10Icon } from '@/assets/svg/jin10.svg';
14
  import { ReactComponent as KeywordIcon } from '@/assets/svg/keyword.svg';
 
15
  import { ReactComponent as PubMedIcon } from '@/assets/svg/pubmed.svg';
16
  import { ReactComponent as QWeatherIcon } from '@/assets/svg/qweather.svg';
17
  import { ReactComponent as SwitchIcon } from '@/assets/svg/switch.svg';
@@ -71,6 +72,7 @@ export enum Operator {
71
  Jin10 = 'Jin10',
72
  Concentrator = 'Concentrator',
73
  TuShare = 'TuShare',
 
74
  }
75
 
76
  export const operatorIconMap = {
@@ -103,6 +105,7 @@ export const operatorIconMap = {
103
  [Operator.Jin10]: Jin10Icon,
104
  [Operator.Concentrator]: ConcentratorIcon,
105
  [Operator.TuShare]: TuShareIcon,
 
106
  };
107
 
108
  export const operatorMap: Record<
@@ -225,6 +228,7 @@ export const operatorMap: Record<
225
  iconFontSize: 16,
226
  },
227
  [Operator.TuShare]: { backgroundColor: '#f8cfa0' },
 
228
  };
229
 
230
  export const componentMenuList = [
@@ -258,6 +262,9 @@ export const componentMenuList = [
258
  {
259
  name: Operator.Concentrator,
260
  },
 
 
 
261
  {
262
  name: Operator.DuckDuckGo,
263
  },
@@ -480,6 +487,10 @@ export const initialTuShareValues = {
480
  start_date: '2024-01-01 09:00:00',
481
  };
482
 
 
 
 
 
483
  export const CategorizeAnchorPointPositions = [
484
  { top: 1, right: 34 },
485
  { top: 8, right: 18 },
@@ -588,6 +599,7 @@ export const NodeMap = {
588
  [Operator.YahooFinance]: 'ragNode',
589
  [Operator.Jin10]: 'ragNode',
590
  [Operator.TuShare]: 'ragNode',
 
591
  };
592
 
593
  export const LanguageOptions = [
 
12
  import { ReactComponent as GoogleIcon } from '@/assets/svg/google.svg';
13
  import { ReactComponent as Jin10Icon } from '@/assets/svg/jin10.svg';
14
  import { ReactComponent as KeywordIcon } from '@/assets/svg/keyword.svg';
15
+ import { ReactComponent as NoteIcon } from '@/assets/svg/note.svg';
16
  import { ReactComponent as PubMedIcon } from '@/assets/svg/pubmed.svg';
17
  import { ReactComponent as QWeatherIcon } from '@/assets/svg/qweather.svg';
18
  import { ReactComponent as SwitchIcon } from '@/assets/svg/switch.svg';
 
72
  Jin10 = 'Jin10',
73
  Concentrator = 'Concentrator',
74
  TuShare = 'TuShare',
75
+ Note = 'Note',
76
  }
77
 
78
  export const operatorIconMap = {
 
105
  [Operator.Jin10]: Jin10Icon,
106
  [Operator.Concentrator]: ConcentratorIcon,
107
  [Operator.TuShare]: TuShareIcon,
108
+ [Operator.Note]: NoteIcon,
109
  };
110
 
111
  export const operatorMap: Record<
 
228
  iconFontSize: 16,
229
  },
230
  [Operator.TuShare]: { backgroundColor: '#f8cfa0' },
231
+ [Operator.Note]: { backgroundColor: '#f8cfa0' },
232
  };
233
 
234
  export const componentMenuList = [
 
262
  {
263
  name: Operator.Concentrator,
264
  },
265
+ {
266
+ name: Operator.Note,
267
+ },
268
  {
269
  name: Operator.DuckDuckGo,
270
  },
 
487
  start_date: '2024-01-01 09:00:00',
488
  };
489
 
490
+ export const initialNoteValues = {
491
+ text: '',
492
+ };
493
+
494
  export const CategorizeAnchorPointPositions = [
495
  { top: 1, right: 34 },
496
  { top: 8, right: 18 },
 
599
  [Operator.YahooFinance]: 'ragNode',
600
  [Operator.Jin10]: 'ragNode',
601
  [Operator.TuShare]: 'ragNode',
602
+ [Operator.Note]: 'noteNode',
603
  };
604
 
605
  export const LanguageOptions = [
web/src/pages/flow/flow-drawer/index.tsx CHANGED
@@ -3,38 +3,38 @@ import { IModalProps } from '@/interfaces/common';
3
  import { Drawer, Flex, Form, Input } from 'antd';
4
  import { useEffect } from 'react';
5
  import { Node } from 'reactflow';
6
- import AkShareForm from '../akshare-form';
7
- import AnswerForm from '../answer-form';
8
- import ArXivForm from '../arxiv-form';
9
- import BaiduFanyiForm from '../baidu-fanyi-form';
10
- import BaiduForm from '../baidu-form';
11
- import BeginForm from '../begin-form';
12
- import BingForm from '../bing-form';
13
- import CategorizeForm from '../categorize-form';
14
  import { Operator } from '../constant';
15
- import DeepLForm from '../deepl-form';
16
- import DuckDuckGoForm from '../duckduckgo-form';
17
- import ExeSQLForm from '../exesql-form';
18
- import GenerateForm from '../generate-form';
19
- import GithubForm from '../github-form';
20
- import GoogleForm from '../google-form';
21
- import GoogleScholarForm from '../google-scholar-form';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  import { useHandleFormValuesChange, useHandleNodeNameChange } from '../hooks';
23
- import KeywordExtractForm from '../keyword-extract-form';
24
- import MessageForm from '../message-form';
25
  import OperatorIcon from '../operator-icon';
26
- import PubMedForm from '../pubmed-form';
27
- import QWeatherForm from '../qweather-form';
28
- import RelevantForm from '../relevant-form';
29
- import RetrievalForm from '../retrieval-form';
30
- import RewriteQuestionForm from '../rewrite-question-form';
31
- import SwitchForm from '../switch-form';
32
- import TuShareForm from '../tushare-form';
33
- import WenCaiForm from '../wencai-form';
34
- import WikipediaForm from '../wikipedia-form';
35
 
36
- import Jin10Form from '../jin10-form';
37
- import YahooFinanceForm from '../yahoo-finance-form';
38
  import styles from './index.less';
39
 
40
  interface IProps {
 
3
  import { Drawer, Flex, Form, Input } from 'antd';
4
  import { useEffect } from 'react';
5
  import { Node } from 'reactflow';
 
 
 
 
 
 
 
 
6
  import { Operator } from '../constant';
7
+ import AkShareForm from '../form/akshare-form';
8
+ import AnswerForm from '../form/answer-form';
9
+ import ArXivForm from '../form/arxiv-form';
10
+ import BaiduFanyiForm from '../form/baidu-fanyi-form';
11
+ import BaiduForm from '../form/baidu-form';
12
+ import BeginForm from '../form/begin-form';
13
+ import BingForm from '../form/bing-form';
14
+ import CategorizeForm from '../form/categorize-form';
15
+ import DeepLForm from '../form/deepl-form';
16
+ import DuckDuckGoForm from '../form/duckduckgo-form';
17
+ import ExeSQLForm from '../form/exesql-form';
18
+ import GenerateForm from '../form/generate-form';
19
+ import GithubForm from '../form/github-form';
20
+ import GoogleForm from '../form/google-form';
21
+ import GoogleScholarForm from '../form/google-scholar-form';
22
+ import Jin10Form from '../form/jin10-form';
23
+ import KeywordExtractForm from '../form/keyword-extract-form';
24
+ import MessageForm from '../form/message-form';
25
+ import PubMedForm from '../form/pubmed-form';
26
+ import QWeatherForm from '../form/qweather-form';
27
+ import RelevantForm from '../form/relevant-form';
28
+ import RetrievalForm from '../form/retrieval-form';
29
+ import RewriteQuestionForm from '../form/rewrite-question-form';
30
+ import SwitchForm from '../form/switch-form';
31
+ import TuShareForm from '../form/tushare-form';
32
+ import WenCaiForm from '../form/wencai-form';
33
+ import WikipediaForm from '../form/wikipedia-form';
34
+ import YahooFinanceForm from '../form/yahoo-finance-form';
35
  import { useHandleFormValuesChange, useHandleNodeNameChange } from '../hooks';
 
 
36
  import OperatorIcon from '../operator-icon';
 
 
 
 
 
 
 
 
 
37
 
 
 
38
  import styles from './index.less';
39
 
40
  interface IProps {
web/src/pages/flow/flow-sider/index.tsx CHANGED
@@ -15,6 +15,14 @@ interface IProps {
15
  collapsed: boolean;
16
  }
17
 
 
 
 
 
 
 
 
 
18
  const FlowSide = ({ setCollapsed, collapsed }: IProps) => {
19
  const { handleDragStart } = useHandleDrag();
20
  const { t } = useTranslate('flow');
@@ -31,16 +39,11 @@ const FlowSide = ({ setCollapsed, collapsed }: IProps) => {
31
  {componentMenuList.map((x) => {
32
  return (
33
  <React.Fragment key={x.name}>
 
 
 
34
  {x.name === Operator.DuckDuckGo && (
35
- <Divider
36
- style={{
37
- marginTop: 10,
38
- marginBottom: 10,
39
- padding: 0,
40
- borderBlockColor: '#b4afaf',
41
- borderStyle: 'dotted',
42
- }}
43
- ></Divider>
44
  )}
45
  <Card
46
  key={x.name}
 
15
  collapsed: boolean;
16
  }
17
 
18
+ const dividerProps = {
19
+ marginTop: 10,
20
+ marginBottom: 10,
21
+ padding: 0,
22
+ borderBlockColor: '#b4afaf',
23
+ borderStyle: 'dotted',
24
+ };
25
+
26
  const FlowSide = ({ setCollapsed, collapsed }: IProps) => {
27
  const { handleDragStart } = useHandleDrag();
28
  const { t } = useTranslate('flow');
 
39
  {componentMenuList.map((x) => {
40
  return (
41
  <React.Fragment key={x.name}>
42
+ {x.name === Operator.Note && (
43
+ <Divider style={dividerProps}></Divider>
44
+ )}
45
  {x.name === Operator.DuckDuckGo && (
46
+ <Divider style={dividerProps}></Divider>
 
 
 
 
 
 
 
 
47
  )}
48
  <Card
49
  key={x.name}
web/src/pages/flow/{akshare-form → form/akshare-form}/index.tsx RENAMED
@@ -1,6 +1,6 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { Form } from 'antd';
3
- import { IOperatorForm } from '../interface';
4
 
5
  const AkShareForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  return (
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { Form } from 'antd';
3
+ import { IOperatorForm } from '../../interface';
4
 
5
  const AkShareForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  return (
web/src/pages/flow/{answer-form → form/answer-form}/index.tsx RENAMED
File without changes
web/src/pages/flow/{arxiv-form → form/arxiv-form}/index.tsx RENAMED
@@ -2,7 +2,7 @@ import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
  import { useMemo } from 'react';
5
- import { IOperatorForm } from '../interface';
6
 
7
  const ArXivForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('flow');
 
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
  import { useMemo } from 'react';
5
+ import { IOperatorForm } from '../../interface';
6
 
7
  const ArXivForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('flow');
web/src/pages/flow/{baidu-fanyi-form → form/baidu-fanyi-form}/index.tsx RENAMED
@@ -4,8 +4,8 @@ import { useMemo } from 'react';
4
  import {
5
  BaiduFanyiDomainOptions,
6
  BaiduFanyiSourceLangOptions,
7
- } from '../constant';
8
- import { IOperatorForm } from '../interface';
9
 
10
  const BaiduFanyiForm = ({ onValuesChange, form }: IOperatorForm) => {
11
  const { t } = useTranslate('flow');
 
4
  import {
5
  BaiduFanyiDomainOptions,
6
  BaiduFanyiSourceLangOptions,
7
+ } from '../../constant';
8
+ import { IOperatorForm } from '../../interface';
9
 
10
  const BaiduFanyiForm = ({ onValuesChange, form }: IOperatorForm) => {
11
  const { t } = useTranslate('flow');
web/src/pages/flow/{baidu-form → form/baidu-form}/index.tsx RENAMED
@@ -1,6 +1,6 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { Form } from 'antd';
3
- import { IOperatorForm } from '../interface';
4
 
5
  const BaiduForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  return (
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { Form } from 'antd';
3
+ import { IOperatorForm } from '../../interface';
4
 
5
  const BaiduForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  return (
web/src/pages/flow/{begin-form → form/begin-form}/index.tsx RENAMED
@@ -1,6 +1,6 @@
1
  import { useTranslate } from '@/hooks/common-hooks';
2
  import { Form, Input } from 'antd';
3
- import { IOperatorForm } from '../interface';
4
 
5
  type FieldType = {
6
  prologue?: string;
 
1
  import { useTranslate } from '@/hooks/common-hooks';
2
  import { Form, Input } from 'antd';
3
+ import { IOperatorForm } from '../../interface';
4
 
5
  type FieldType = {
6
  prologue?: string;
web/src/pages/flow/{bing-form → form/bing-form}/index.tsx RENAMED
@@ -2,8 +2,8 @@ import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input, Select } from 'antd';
4
  import { useMemo } from 'react';
5
- import { BingCountryOptions, BingLanguageOptions } from '../constant';
6
- import { IOperatorForm } from '../interface';
7
 
8
  const BingForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
 
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input, Select } from 'antd';
4
  import { useMemo } from 'react';
5
+ import { BingCountryOptions, BingLanguageOptions } from '../../constant';
6
+ import { IOperatorForm } from '../../interface';
7
 
8
  const BingForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
web/src/pages/flow/{categorize-form → form/categorize-form}/dynamic-categorize.tsx RENAMED
@@ -12,8 +12,8 @@ import {
12
  useState,
13
  } from 'react';
14
  import { useUpdateNodeInternals } from 'reactflow';
15
- import { Operator } from '../constant';
16
- import { useBuildFormSelectOptions } from '../form-hooks';
17
 
18
  interface IProps {
19
  nodeId?: string;
 
12
  useState,
13
  } from 'react';
14
  import { useUpdateNodeInternals } from 'reactflow';
15
+ import { Operator } from '../../constant';
16
+ import { useBuildFormSelectOptions } from '../../form-hooks';
17
 
18
  interface IProps {
19
  nodeId?: string;
web/src/pages/flow/{categorize-form → form/categorize-form}/hooks.ts RENAMED
@@ -5,8 +5,8 @@ import {
5
  ICategorizeItem,
6
  ICategorizeItemResult,
7
  IOperatorForm,
8
- } from '../interface';
9
- import useGraphStore from '../store';
10
 
11
  /**
12
  * convert the following object into a list
 
5
  ICategorizeItem,
6
  ICategorizeItemResult,
7
  IOperatorForm,
8
+ } from '../../interface';
9
+ import useGraphStore from '../../store';
10
 
11
  /**
12
  * convert the following object into a list
web/src/pages/flow/{categorize-form → form/categorize-form}/index.tsx RENAMED
@@ -1,8 +1,8 @@
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form } from 'antd';
4
- import { useSetLlmSetting } from '../hooks';
5
- import { IOperatorForm } from '../interface';
6
  import DynamicCategorize from './dynamic-categorize';
7
  import { useHandleFormValuesChange } from './hooks';
8
 
 
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form } from 'antd';
4
+ import { useSetLlmSetting } from '../../hooks';
5
+ import { IOperatorForm } from '../../interface';
6
  import DynamicCategorize from './dynamic-categorize';
7
  import { useHandleFormValuesChange } from './hooks';
8
 
web/src/pages/flow/{concentrator-form → form/concentrator-form}/index.tsx RENAMED
@@ -1,5 +1,5 @@
1
  import { Form } from 'antd';
2
- import { IOperatorForm } from '../interface';
3
 
4
  const ConcentratorForm = ({ onValuesChange, form }: IOperatorForm) => {
5
  return (
 
1
  import { Form } from 'antd';
2
+ import { IOperatorForm } from '../../interface';
3
 
4
  const ConcentratorForm = ({ onValuesChange, form }: IOperatorForm) => {
5
  return (
web/src/pages/flow/{deepl-form → form/deepl-form}/index.tsx RENAMED
@@ -1,9 +1,9 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
- import { DeepLSourceLangOptions, DeepLTargetLangOptions } from '../constant';
5
- import { useBuildSortOptions } from '../form-hooks';
6
- import { IOperatorForm } from '../interface';
7
 
8
  const DeepLForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
+ import { DeepLSourceLangOptions, DeepLTargetLangOptions } from '../../constant';
5
+ import { useBuildSortOptions } from '../../form-hooks';
6
+ import { IOperatorForm } from '../../interface';
7
 
8
  const DeepLForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
web/src/pages/flow/{duckduckgo-form → form/duckduckgo-form}/index.tsx RENAMED
@@ -2,8 +2,8 @@ import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
  import { useMemo } from 'react';
5
- import { Channel } from '../constant';
6
- import { IOperatorForm } from '../interface';
7
 
8
  const DuckDuckGoForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
 
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
  import { useMemo } from 'react';
5
+ import { Channel } from '../../constant';
6
+ import { IOperatorForm } from '../../interface';
7
 
8
  const DuckDuckGoForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
web/src/pages/flow/{exesql-form → form/exesql-form}/index.tsx RENAMED
@@ -3,8 +3,8 @@ import { useTranslate } from '@/hooks/common-hooks';
3
  import { useTestDbConnect } from '@/hooks/flow-hooks';
4
  import { Button, Flex, Form, Input, InputNumber, Select } from 'antd';
5
  import { useCallback } from 'react';
6
- import { ExeSQLOptions } from '../constant';
7
- import { IOperatorForm } from '../interface';
8
 
9
  const ExeSQLForm = ({ onValuesChange, form }: IOperatorForm) => {
10
  const { t } = useTranslate('flow');
 
3
  import { useTestDbConnect } from '@/hooks/flow-hooks';
4
  import { Button, Flex, Form, Input, InputNumber, Select } from 'antd';
5
  import { useCallback } from 'react';
6
+ import { ExeSQLOptions } from '../../constant';
7
+ import { IOperatorForm } from '../../interface';
8
 
9
  const ExeSQLForm = ({ onValuesChange, form }: IOperatorForm) => {
10
  const { t } = useTranslate('flow');
web/src/pages/flow/{generate-form → form/generate-form}/dynamic-parameters.tsx RENAMED
@@ -2,9 +2,9 @@ import { EditableCell, EditableRow } from '@/components/editable-cell';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { DeleteOutlined } from '@ant-design/icons';
4
  import { Button, Flex, Select, Table, TableProps } from 'antd';
5
- import { IGenerateParameter } from '../interface';
6
 
7
- import { useBuildComponentIdSelectOptions } from '../hooks';
8
  import { useHandleOperateParameters } from './hooks';
9
  import styles from './index.less';
10
 
 
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { DeleteOutlined } from '@ant-design/icons';
4
  import { Button, Flex, Select, Table, TableProps } from 'antd';
5
+ import { IGenerateParameter } from '../../interface';
6
 
7
+ import { useBuildComponentIdSelectOptions } from '../../hooks';
8
  import { useHandleOperateParameters } from './hooks';
9
  import styles from './index.less';
10
 
web/src/pages/flow/{generate-form → form/generate-form}/hooks.ts RENAMED
@@ -1,8 +1,8 @@
1
  import get from 'lodash/get';
2
  import { useCallback, useMemo } from 'react';
3
  import { v4 as uuid } from 'uuid';
4
- import { IGenerateParameter } from '../interface';
5
- import useGraphStore from '../store';
6
 
7
  export const useHandleOperateParameters = (nodeId: string) => {
8
  const { getNode, updateNodeForm } = useGraphStore((state) => state);
 
1
  import get from 'lodash/get';
2
  import { useCallback, useMemo } from 'react';
3
  import { v4 as uuid } from 'uuid';
4
+ import { IGenerateParameter } from '../../interface';
5
+ import useGraphStore from '../../store';
6
 
7
  export const useHandleOperateParameters = (nodeId: string) => {
8
  const { getNode, updateNodeForm } = useGraphStore((state) => state);
web/src/pages/flow/{generate-form → form/generate-form}/index.less RENAMED
File without changes
web/src/pages/flow/{generate-form → form/generate-form}/index.tsx RENAMED
@@ -1,8 +1,8 @@
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input, InputNumber, Switch } from 'antd';
4
- import { useSetLlmSetting } from '../hooks';
5
- import { IOperatorForm } from '../interface';
6
  import DynamicParameters from './dynamic-parameters';
7
 
8
  const GenerateForm = ({ onValuesChange, form, node }: IOperatorForm) => {
 
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input, InputNumber, Switch } from 'antd';
4
+ import { useSetLlmSetting } from '../../hooks';
5
+ import { IOperatorForm } from '../../interface';
6
  import DynamicParameters from './dynamic-parameters';
7
 
8
  const GenerateForm = ({ onValuesChange, form, node }: IOperatorForm) => {
web/src/pages/flow/{github-form → form/github-form}/index.tsx RENAMED
@@ -1,6 +1,6 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { Form } from 'antd';
3
- import { IOperatorForm } from '../interface';
4
 
5
  const GithubForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  return (
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { Form } from 'antd';
3
+ import { IOperatorForm } from '../../interface';
4
 
5
  const GithubForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  return (
web/src/pages/flow/{google-form → form/google-form}/index.tsx RENAMED
@@ -1,8 +1,8 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input, Select } from 'antd';
4
- import { GoogleCountryOptions, GoogleLanguageOptions } from '../constant';
5
- import { IOperatorForm } from '../interface';
6
 
7
  const GoogleForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('flow');
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input, Select } from 'antd';
4
+ import { GoogleCountryOptions, GoogleLanguageOptions } from '../../constant';
5
+ import { IOperatorForm } from '../../interface';
6
 
7
  const GoogleForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('flow');
web/src/pages/flow/{google-scholar-form → form/google-scholar-form}/index.tsx RENAMED
@@ -3,8 +3,8 @@ import { useTranslate } from '@/hooks/common-hooks';
3
  import { DatePicker, DatePickerProps, Form, Select, Switch } from 'antd';
4
  import dayjs from 'dayjs';
5
  import { useCallback, useMemo } from 'react';
6
- import { useBuildSortOptions } from '../form-hooks';
7
- import { IOperatorForm } from '../interface';
8
 
9
  const YearPicker = ({
10
  onChange,
 
3
  import { DatePicker, DatePickerProps, Form, Select, Switch } from 'antd';
4
  import dayjs from 'dayjs';
5
  import { useCallback, useMemo } from 'react';
6
+ import { useBuildSortOptions } from '../../form-hooks';
7
+ import { IOperatorForm } from '../../interface';
8
 
9
  const YearPicker = ({
10
  onChange,
web/src/pages/flow/{jin10-form → form/jin10-form}/index.tsx RENAMED
@@ -8,8 +8,8 @@ import {
8
  Jin10SymbolsDatatypeOptions,
9
  Jin10SymbolsTypeOptions,
10
  Jin10TypeOptions,
11
- } from '../constant';
12
- import { IOperatorForm } from '../interface';
13
 
14
  const Jin10Form = ({ onValuesChange, form }: IOperatorForm) => {
15
  const { t } = useTranslate('flow');
 
8
  Jin10SymbolsDatatypeOptions,
9
  Jin10SymbolsTypeOptions,
10
  Jin10TypeOptions,
11
+ } from '../../constant';
12
+ import { IOperatorForm } from '../../interface';
13
 
14
  const Jin10Form = ({ onValuesChange, form }: IOperatorForm) => {
15
  const { t } = useTranslate('flow');
web/src/pages/flow/{keyword-extract-form → form/keyword-extract-form}/index.tsx RENAMED
@@ -2,8 +2,8 @@ import LLMSelect from '@/components/llm-select';
2
  import TopNItem from '@/components/top-n-item';
3
  import { useTranslate } from '@/hooks/common-hooks';
4
  import { Form } from 'antd';
5
- import { useSetLlmSetting } from '../hooks';
6
- import { IOperatorForm } from '../interface';
7
 
8
  const KeywordExtractForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
 
2
  import TopNItem from '@/components/top-n-item';
3
  import { useTranslate } from '@/hooks/common-hooks';
4
  import { Form } from 'antd';
5
+ import { useSetLlmSetting } from '../../hooks';
6
+ import { IOperatorForm } from '../../interface';
7
 
8
  const KeywordExtractForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
web/src/pages/flow/{message-form → form/message-form}/index.less RENAMED
File without changes
web/src/pages/flow/{message-form → form/message-form}/index.tsx RENAMED
@@ -1,7 +1,7 @@
1
  import { useTranslate } from '@/hooks/common-hooks';
2
  import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
3
  import { Button, Form, Input } from 'antd';
4
- import { IOperatorForm } from '../interface';
5
 
6
  import styles from './index.less';
7
 
 
1
  import { useTranslate } from '@/hooks/common-hooks';
2
  import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
3
  import { Button, Form, Input } from 'antd';
4
+ import { IOperatorForm } from '../../interface';
5
 
6
  import styles from './index.less';
7
 
web/src/pages/flow/{pubmed-form → form/pubmed-form}/index.tsx RENAMED
@@ -1,7 +1,7 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input } from 'antd';
4
- import { IOperatorForm } from '../interface';
5
 
6
  const PubMedForm = ({ onValuesChange, form }: IOperatorForm) => {
7
  const { t } = useTranslate('flow');
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Input } from 'antd';
4
+ import { IOperatorForm } from '../../interface';
5
 
6
  const PubMedForm = ({ onValuesChange, form }: IOperatorForm) => {
7
  const { t } = useTranslate('flow');
web/src/pages/flow/{qweather-form → form/qweather-form}/index.tsx RENAMED
@@ -6,8 +6,8 @@ import {
6
  QWeatherTimePeriodOptions,
7
  QWeatherTypeOptions,
8
  QWeatherUserTypeOptions,
9
- } from '../constant';
10
- import { IOperatorForm } from '../interface';
11
 
12
  const QWeatherForm = ({ onValuesChange, form }: IOperatorForm) => {
13
  const { t } = useTranslate('flow');
 
6
  QWeatherTimePeriodOptions,
7
  QWeatherTypeOptions,
8
  QWeatherUserTypeOptions,
9
+ } from '../../constant';
10
+ import { IOperatorForm } from '../../interface';
11
 
12
  const QWeatherForm = ({ onValuesChange, form }: IOperatorForm) => {
13
  const { t } = useTranslate('flow');
web/src/pages/flow/{relevant-form → form/relevant-form}/hooks.ts RENAMED
@@ -1,8 +1,8 @@
1
  import pick from 'lodash/pick';
2
  import { useCallback, useEffect } from 'react';
3
  import { Edge } from 'reactflow';
4
- import { IOperatorForm } from '../interface';
5
- import useGraphStore from '../store';
6
 
7
  export const useBuildRelevantOptions = () => {
8
  const nodes = useGraphStore((state) => state.nodes);
 
1
  import pick from 'lodash/pick';
2
  import { useCallback, useEffect } from 'react';
3
  import { Edge } from 'reactflow';
4
+ import { IOperatorForm } from '../../interface';
5
+ import useGraphStore from '../../store';
6
 
7
  export const useBuildRelevantOptions = () => {
8
  const nodes = useGraphStore((state) => state.nodes);
web/src/pages/flow/{relevant-form → form/relevant-form}/index.tsx RENAMED
@@ -1,10 +1,10 @@
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
- import { Operator } from '../constant';
5
- import { useBuildFormSelectOptions } from '../form-hooks';
6
- import { useSetLlmSetting } from '../hooks';
7
- import { IOperatorForm } from '../interface';
8
  import { useWatchConnectionChanges } from './hooks';
9
 
10
  const RelevantForm = ({ onValuesChange, form, node }: IOperatorForm) => {
 
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
+ import { Operator } from '../../constant';
5
+ import { useBuildFormSelectOptions } from '../../form-hooks';
6
+ import { useSetLlmSetting } from '../../hooks';
7
+ import { IOperatorForm } from '../../interface';
8
  import { useWatchConnectionChanges } from './hooks';
9
 
10
  const RelevantForm = ({ onValuesChange, form, node }: IOperatorForm) => {
web/src/pages/flow/{retrieval-form → form/retrieval-form}/index.tsx RENAMED
@@ -5,7 +5,7 @@ import TopNItem from '@/components/top-n-item';
5
  import { useTranslate } from '@/hooks/common-hooks';
6
  import type { FormProps } from 'antd';
7
  import { Form, Input } from 'antd';
8
- import { IOperatorForm } from '../interface';
9
 
10
  type FieldType = {
11
  top_n?: number;
 
5
  import { useTranslate } from '@/hooks/common-hooks';
6
  import type { FormProps } from 'antd';
7
  import { Form, Input } from 'antd';
8
+ import { IOperatorForm } from '../../interface';
9
 
10
  type FieldType = {
11
  top_n?: number;
web/src/pages/flow/{rewrite-question-form → form/rewrite-question-form}/index.tsx RENAMED
@@ -1,8 +1,8 @@
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, InputNumber } from 'antd';
4
- import { useSetLlmSetting } from '../hooks';
5
- import { IOperatorForm } from '../interface';
6
 
7
  const RewriteQuestionForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('chat');
 
1
  import LLMSelect from '@/components/llm-select';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, InputNumber } from 'antd';
4
+ import { useSetLlmSetting } from '../../hooks';
5
+ import { IOperatorForm } from '../../interface';
6
 
7
  const RewriteQuestionForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('chat');
web/src/pages/flow/{switch-form → form/switch-form}/index.tsx RENAMED
@@ -7,11 +7,11 @@ import {
7
  SwitchElseTo,
8
  SwitchLogicOperatorOptions,
9
  SwitchOperatorOptions,
10
- } from '../constant';
11
- import { useBuildFormSelectOptions } from '../form-hooks';
12
- import { useBuildComponentIdSelectOptions } from '../hooks';
13
- import { IOperatorForm, ISwitchForm } from '../interface';
14
- import { getOtherFieldValues } from '../utils';
15
 
16
  const subLabelCol = {
17
  span: 11,
 
7
  SwitchElseTo,
8
  SwitchLogicOperatorOptions,
9
  SwitchOperatorOptions,
10
+ } from '../../constant';
11
+ import { useBuildFormSelectOptions } from '../../form-hooks';
12
+ import { useBuildComponentIdSelectOptions } from '../../hooks';
13
+ import { IOperatorForm, ISwitchForm } from '../../interface';
14
+ import { getOtherFieldValues } from '../../utils';
15
 
16
  const subLabelCol = {
17
  span: 11,
web/src/pages/flow/{tushare-form → form/tushare-form}/index.tsx RENAMED
@@ -2,8 +2,8 @@ import { useTranslate } from '@/hooks/common-hooks';
2
  import { DatePicker, DatePickerProps, Form, Input, Select } from 'antd';
3
  import dayjs from 'dayjs';
4
  import { useCallback, useMemo } from 'react';
5
- import { TuShareSrcOptions } from '../constant';
6
- import { IOperatorForm } from '../interface';
7
 
8
  const DateTimePicker = ({
9
  onChange,
 
2
  import { DatePicker, DatePickerProps, Form, Input, Select } from 'antd';
3
  import dayjs from 'dayjs';
4
  import { useCallback, useMemo } from 'react';
5
+ import { TuShareSrcOptions } from '../../constant';
6
+ import { IOperatorForm } from '../../interface';
7
 
8
  const DateTimePicker = ({
9
  onChange,
web/src/pages/flow/{wencai-form → form/wencai-form}/index.tsx RENAMED
@@ -2,8 +2,8 @@ import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
  import { useMemo } from 'react';
5
- import { WenCaiQueryTypeOptions } from '../constant';
6
- import { IOperatorForm } from '../interface';
7
 
8
  const WenCaiForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
 
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
  import { useMemo } from 'react';
5
+ import { WenCaiQueryTypeOptions } from '../../constant';
6
+ import { IOperatorForm } from '../../interface';
7
 
8
  const WenCaiForm = ({ onValuesChange, form }: IOperatorForm) => {
9
  const { t } = useTranslate('flow');
web/src/pages/flow/{wikipedia-form → form/wikipedia-form}/index.tsx RENAMED
@@ -1,8 +1,8 @@
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
- import { LanguageOptions } from '../constant';
5
- import { IOperatorForm } from '../interface';
6
 
7
  const WikipediaForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('common');
 
1
  import TopNItem from '@/components/top-n-item';
2
  import { useTranslate } from '@/hooks/common-hooks';
3
  import { Form, Select } from 'antd';
4
+ import { LanguageOptions } from '../../constant';
5
+ import { IOperatorForm } from '../../interface';
6
 
7
  const WikipediaForm = ({ onValuesChange, form }: IOperatorForm) => {
8
  const { t } = useTranslate('common');
web/src/pages/flow/{yahoo-finance-form → form/yahoo-finance-form}/index.tsx RENAMED
@@ -1,6 +1,6 @@
1
  import { useTranslate } from '@/hooks/common-hooks';
2
  import { Form, Switch } from 'antd';
3
- import { IOperatorForm } from '../interface';
4
 
5
  const YahooFinanceForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  const { t } = useTranslate('flow');
 
1
  import { useTranslate } from '@/hooks/common-hooks';
2
  import { Form, Switch } from 'antd';
3
+ import { IOperatorForm } from '../../interface';
4
 
5
  const YahooFinanceForm = ({ onValuesChange, form }: IOperatorForm) => {
6
  const { t } = useTranslate('flow');
web/src/pages/flow/hooks.ts CHANGED
@@ -49,6 +49,7 @@ import {
49
  initialJin10Values,
50
  initialKeywordExtractValues,
51
  initialMessageValues,
 
52
  initialPubMedValues,
53
  initialQWeatherValues,
54
  initialRelevantValues,
@@ -125,6 +126,7 @@ export const useInitializeOperatorParams = () => {
125
  [Operator.Jin10]: initialJin10Values,
126
  [Operator.Concentrator]: initialConcentratorValues,
127
  [Operator.TuShare]: initialTuShareValues,
 
128
  };
129
  }, [llmId]);
130
 
 
49
  initialJin10Values,
50
  initialKeywordExtractValues,
51
  initialMessageValues,
52
+ initialNoteValues,
53
  initialPubMedValues,
54
  initialQWeatherValues,
55
  initialRelevantValues,
 
126
  [Operator.Jin10]: initialJin10Values,
127
  [Operator.Concentrator]: initialConcentratorValues,
128
  [Operator.TuShare]: initialTuShareValues,
129
+ [Operator.Note]: initialNoteValues,
130
  };
131
  }, [llmId]);
132
 
web/src/pages/flow/utils.ts CHANGED
@@ -122,21 +122,23 @@ export const buildDslComponentsByGraph = (
122
  ): DSLComponents => {
123
  const components: DSLComponents = {};
124
 
125
- nodes.forEach((x) => {
126
- const id = x.id;
127
- const operatorName = x.data.label;
128
- components[id] = {
129
- obj: {
130
- component_name: operatorName,
131
- params:
132
- buildOperatorParams(operatorName)(
133
- x.data.form as Record<string, unknown>,
134
- ) ?? {},
135
- },
136
- downstream: buildComponentDownstreamOrUpstream(edges, id, true),
137
- upstream: buildComponentDownstreamOrUpstream(edges, id, false),
138
- };
139
- });
 
 
140
 
141
  return components;
142
  };
 
122
  ): DSLComponents => {
123
  const components: DSLComponents = {};
124
 
125
+ nodes
126
+ .filter((x) => x.data.label !== Operator.Note)
127
+ .forEach((x) => {
128
+ const id = x.id;
129
+ const operatorName = x.data.label;
130
+ components[id] = {
131
+ obj: {
132
+ component_name: operatorName,
133
+ params:
134
+ buildOperatorParams(operatorName)(
135
+ x.data.form as Record<string, unknown>,
136
+ ) ?? {},
137
+ },
138
+ downstream: buildComponentDownstreamOrUpstream(edges, id, true),
139
+ upstream: buildComponentDownstreamOrUpstream(edges, id, false),
140
+ };
141
+ });
142
 
143
  return components;
144
  };