Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

index.tsx 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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, operatorMap } 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 CrawlerForm from '../form/crawler-form';
  16. import DeepLForm from '../form/deepl-form';
  17. import DuckDuckGoForm from '../form/duckduckgo-form';
  18. import ExeSQLForm from '../form/exesql-form';
  19. import GenerateForm from '../form/generate-form';
  20. import GithubForm from '../form/github-form';
  21. import GoogleForm from '../form/google-form';
  22. import GoogleScholarForm from '../form/google-scholar-form';
  23. import Jin10Form from '../form/jin10-form';
  24. import KeywordExtractForm from '../form/keyword-extract-form';
  25. import MessageForm from '../form/message-form';
  26. import PubMedForm from '../form/pubmed-form';
  27. import QWeatherForm from '../form/qweather-form';
  28. import RelevantForm from '../form/relevant-form';
  29. import RetrievalForm from '../form/retrieval-form';
  30. import RewriteQuestionForm from '../form/rewrite-question-form';
  31. import SwitchForm from '../form/switch-form';
  32. import TuShareForm from '../form/tushare-form';
  33. import WenCaiForm from '../form/wencai-form';
  34. import WikipediaForm from '../form/wikipedia-form';
  35. import YahooFinanceForm from '../form/yahoo-finance-form';
  36. import { useHandleFormValuesChange, useHandleNodeNameChange } from '../hooks';
  37. import OperatorIcon from '../operator-icon';
  38. import { CloseOutlined } from '@ant-design/icons';
  39. import { lowerFirst } from 'lodash';
  40. import styles from './index.less';
  41. interface IProps {
  42. node?: Node;
  43. }
  44. const FormMap = {
  45. [Operator.Begin]: BeginForm,
  46. [Operator.Retrieval]: RetrievalForm,
  47. [Operator.Generate]: GenerateForm,
  48. [Operator.Answer]: AnswerForm,
  49. [Operator.Categorize]: CategorizeForm,
  50. [Operator.Message]: MessageForm,
  51. [Operator.Relevant]: RelevantForm,
  52. [Operator.RewriteQuestion]: RewriteQuestionForm,
  53. [Operator.Baidu]: BaiduForm,
  54. [Operator.DuckDuckGo]: DuckDuckGoForm,
  55. [Operator.KeywordExtract]: KeywordExtractForm,
  56. [Operator.Wikipedia]: WikipediaForm,
  57. [Operator.PubMed]: PubMedForm,
  58. [Operator.ArXiv]: ArXivForm,
  59. [Operator.Google]: GoogleForm,
  60. [Operator.Bing]: BingForm,
  61. [Operator.GoogleScholar]: GoogleScholarForm,
  62. [Operator.DeepL]: DeepLForm,
  63. [Operator.GitHub]: GithubForm,
  64. [Operator.BaiduFanyi]: BaiduFanyiForm,
  65. [Operator.QWeather]: QWeatherForm,
  66. [Operator.ExeSQL]: ExeSQLForm,
  67. [Operator.Switch]: SwitchForm,
  68. [Operator.WenCai]: WenCaiForm,
  69. [Operator.AkShare]: AkShareForm,
  70. [Operator.YahooFinance]: YahooFinanceForm,
  71. [Operator.Jin10]: Jin10Form,
  72. [Operator.TuShare]: TuShareForm,
  73. [Operator.Crawler]: CrawlerForm,
  74. };
  75. const EmptyContent = () => <div></div>;
  76. const FlowDrawer = ({
  77. visible,
  78. hideModal,
  79. node,
  80. }: IModalProps<any> & IProps) => {
  81. const operatorName: Operator = node?.data.label;
  82. const OperatorForm = FormMap[operatorName] ?? EmptyContent;
  83. const [form] = Form.useForm();
  84. const { name, handleNameBlur, handleNameChange } = useHandleNodeNameChange({
  85. id: node?.id,
  86. data: node?.data,
  87. });
  88. const { t } = useTranslate('flow');
  89. const { handleValuesChange } = useHandleFormValuesChange(node?.id);
  90. useEffect(() => {
  91. if (visible) {
  92. form.setFieldsValue(node?.data?.form);
  93. }
  94. }, [visible, form, node?.data?.form]);
  95. return (
  96. <Drawer
  97. title={
  98. <Flex vertical>
  99. <Flex gap={'middle'} align="center">
  100. <OperatorIcon
  101. name={operatorName}
  102. color={operatorMap[operatorName]?.color}
  103. ></OperatorIcon>
  104. <Flex align="center" gap={'small'} flex={1}>
  105. <label htmlFor="" className={styles.title}>
  106. {t('title')}
  107. </label>
  108. <Input
  109. value={name}
  110. onBlur={handleNameBlur}
  111. onChange={handleNameChange}
  112. ></Input>
  113. </Flex>
  114. <CloseOutlined onClick={hideModal} />
  115. </Flex>
  116. <span className={styles.operatorDescription}>
  117. {t(`${lowerFirst(operatorName)}Description`)}
  118. </span>
  119. </Flex>
  120. }
  121. placement="right"
  122. onClose={hideModal}
  123. open={visible}
  124. getContainer={false}
  125. mask={false}
  126. width={470}
  127. closeIcon={null}
  128. >
  129. <section className={styles.formWrapper}>
  130. {visible && (
  131. <OperatorForm
  132. onValuesChange={handleValuesChange}
  133. form={form}
  134. node={node}
  135. ></OperatorForm>
  136. )}
  137. </section>
  138. </Drawer>
  139. );
  140. };
  141. export default FlowDrawer;