|
import { useTranslate } from '@/hooks/common-hooks'; |
|
import { IModalProps } from '@/interfaces/common'; |
|
import { Drawer, Flex, Form, Input } from 'antd'; |
|
import { useEffect } from 'react'; |
|
import { Node } from 'reactflow'; |
|
import AnswerForm from '../answer-form'; |
|
import ArXivForm from '../arxiv-form'; |
|
import BaiduFanyiForm from '../baidu-fanyi-form'; |
|
import BaiduForm from '../baidu-form'; |
|
import BeginForm from '../begin-form'; |
|
import BingForm from '../bing-form'; |
|
import CategorizeForm from '../categorize-form'; |
|
import { Operator } from '../constant'; |
|
import DeepLForm from '../deepl-form'; |
|
import DuckDuckGoForm from '../duckduckgo-form'; |
|
import ExeSQLForm from '../exesql-form'; |
|
import GenerateForm from '../generate-form'; |
|
import GithubForm from '../github-form'; |
|
import GoogleForm from '../google-form'; |
|
import GoogleScholarForm from '../google-scholar-form'; |
|
import { useHandleFormValuesChange, useHandleNodeNameChange } from '../hooks'; |
|
import KeywordExtractForm from '../keyword-extract-form'; |
|
import MessageForm from '../message-form'; |
|
import OperatorIcon from '../operator-icon'; |
|
import PubMedForm from '../pubmed-form'; |
|
import QWeatherForm from '../qweather-form'; |
|
import RelevantForm from '../relevant-form'; |
|
import RetrievalForm from '../retrieval-form'; |
|
import RewriteQuestionForm from '../rewrite-question-form'; |
|
import SwitchForm from '../switch-form'; |
|
import WikipediaForm from '../wikipedia-form'; |
|
|
|
import styles from './index.less'; |
|
|
|
interface IProps { |
|
node?: Node; |
|
} |
|
|
|
const FormMap = { |
|
[Operator.Begin]: BeginForm, |
|
[Operator.Retrieval]: RetrievalForm, |
|
[Operator.Generate]: GenerateForm, |
|
[Operator.Answer]: AnswerForm, |
|
[Operator.Categorize]: CategorizeForm, |
|
[Operator.Message]: MessageForm, |
|
[Operator.Relevant]: RelevantForm, |
|
[Operator.RewriteQuestion]: RewriteQuestionForm, |
|
[Operator.Baidu]: BaiduForm, |
|
[Operator.DuckDuckGo]: DuckDuckGoForm, |
|
[Operator.KeywordExtract]: KeywordExtractForm, |
|
[Operator.Wikipedia]: WikipediaForm, |
|
[Operator.PubMed]: PubMedForm, |
|
[Operator.ArXiv]: ArXivForm, |
|
[Operator.Google]: GoogleForm, |
|
[Operator.Bing]: BingForm, |
|
[Operator.GoogleScholar]: GoogleScholarForm, |
|
[Operator.DeepL]: DeepLForm, |
|
[Operator.GitHub]: GithubForm, |
|
[Operator.BaiduFanyi]: BaiduFanyiForm, |
|
[Operator.QWeather]: QWeatherForm, |
|
[Operator.ExeSQL]: ExeSQLForm, |
|
[Operator.Switch]: SwitchForm, |
|
}; |
|
|
|
const EmptyContent = () => <div>empty</div>; |
|
|
|
const FlowDrawer = ({ |
|
visible, |
|
hideModal, |
|
node, |
|
}: IModalProps<any> & IProps) => { |
|
const operatorName: Operator = node?.data.label; |
|
const OperatorForm = FormMap[operatorName] ?? EmptyContent; |
|
const [form] = Form.useForm(); |
|
const { name, handleNameBlur, handleNameChange } = |
|
useHandleNodeNameChange(node); |
|
const { t } = useTranslate('flow'); |
|
|
|
const { handleValuesChange } = useHandleFormValuesChange(node?.id); |
|
|
|
useEffect(() => { |
|
if (visible) { |
|
form.setFieldsValue(node?.data?.form); |
|
} |
|
}, [visible, form, node?.data?.form]); |
|
|
|
return ( |
|
<Drawer |
|
title={ |
|
<Flex gap={'middle'} align="center"> |
|
<OperatorIcon name={operatorName}></OperatorIcon> |
|
<Flex align="center" gap={'small'} flex={1}> |
|
<label htmlFor="" className={styles.title}> |
|
{t('title')} |
|
</label> |
|
<Input |
|
value={name} |
|
onBlur={handleNameBlur} |
|
onChange={handleNameChange} |
|
></Input> |
|
</Flex> |
|
</Flex> |
|
} |
|
placement="right" |
|
onClose={hideModal} |
|
open={visible} |
|
getContainer={false} |
|
mask={false} |
|
width={470} |
|
> |
|
{visible && ( |
|
<OperatorForm |
|
onValuesChange={handleValuesChange} |
|
form={form} |
|
node={node} |
|
></OperatorForm> |
|
)} |
|
</Drawer> |
|
); |
|
}; |
|
|
|
export default FlowDrawer; |
|
|