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 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { useTranslate } from '@/hooks/common-hooks';
  2. 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 { 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. import styles from './index.less';
  38. interface IProps {
  39. node?: Node;
  40. }
  41. const FormMap = {
  42. [Operator.Begin]: BeginForm,
  43. [Operator.Retrieval]: RetrievalForm,
  44. [Operator.Generate]: GenerateForm,
  45. [Operator.Answer]: AnswerForm,
  46. [Operator.Categorize]: CategorizeForm,
  47. [Operator.Message]: MessageForm,
  48. [Operator.Relevant]: RelevantForm,
  49. [Operator.RewriteQuestion]: RewriteQuestionForm,
  50. [Operator.Baidu]: BaiduForm,
  51. [Operator.DuckDuckGo]: DuckDuckGoForm,
  52. [Operator.KeywordExtract]: KeywordExtractForm,
  53. [Operator.Wikipedia]: WikipediaForm,
  54. [Operator.PubMed]: PubMedForm,
  55. [Operator.ArXiv]: ArXivForm,
  56. [Operator.Google]: GoogleForm,
  57. [Operator.Bing]: BingForm,
  58. [Operator.GoogleScholar]: GoogleScholarForm,
  59. [Operator.DeepL]: DeepLForm,
  60. [Operator.GitHub]: GithubForm,
  61. [Operator.BaiduFanyi]: BaiduFanyiForm,
  62. [Operator.QWeather]: QWeatherForm,
  63. [Operator.ExeSQL]: ExeSQLForm,
  64. [Operator.Switch]: SwitchForm,
  65. [Operator.WenCai]: WenCaiForm,
  66. [Operator.AkShare]: AkShareForm,
  67. [Operator.YahooFinance]: YahooFinanceForm,
  68. [Operator.Jin10]: Jin10Form,
  69. [Operator.TuShare]: TuShareForm,
  70. };
  71. const EmptyContent = () => <div>empty</div>;
  72. const FlowDrawer = ({
  73. visible,
  74. hideModal,
  75. node,
  76. }: IModalProps<any> & IProps) => {
  77. const operatorName: Operator = node?.data.label;
  78. const OperatorForm = FormMap[operatorName] ?? EmptyContent;
  79. const [form] = Form.useForm();
  80. const { name, handleNameBlur, handleNameChange } =
  81. useHandleNodeNameChange(node);
  82. const { t } = useTranslate('flow');
  83. const { handleValuesChange } = useHandleFormValuesChange(node?.id);
  84. useEffect(() => {
  85. if (visible) {
  86. form.setFieldsValue(node?.data?.form);
  87. }
  88. }, [visible, form, node?.data?.form]);
  89. return (
  90. <Drawer
  91. title={
  92. <Flex gap={'middle'} align="center">
  93. <OperatorIcon name={operatorName}></OperatorIcon>
  94. <Flex align="center" gap={'small'} flex={1}>
  95. <label htmlFor="" className={styles.title}>
  96. {t('title')}
  97. </label>
  98. <Input
  99. value={name}
  100. onBlur={handleNameBlur}
  101. onChange={handleNameChange}
  102. ></Input>
  103. </Flex>
  104. </Flex>
  105. }
  106. placement="right"
  107. onClose={hideModal}
  108. open={visible}
  109. getContainer={false}
  110. mask={false}
  111. width={470}
  112. >
  113. {visible && (
  114. <OperatorForm
  115. onValuesChange={handleValuesChange}
  116. form={form}
  117. node={node}
  118. ></OperatorForm>
  119. )}
  120. </Drawer>
  121. );
  122. };
  123. export default FlowDrawer;