|
import { IModalProps } from '@/interfaces/common'; |
|
import { Drawer, Form } from 'antd'; |
|
import { useEffect } from 'react'; |
|
import { Node } from 'reactflow'; |
|
import AnswerForm from '../answer-form'; |
|
import BeginForm from '../begin-form'; |
|
import { Operator } from '../constant'; |
|
import GenerateForm from '../generate-form'; |
|
import { useHandleFormValuesChange } from '../hooks'; |
|
import RetrievalForm from '../retrieval-form'; |
|
|
|
interface IProps { |
|
node?: Node; |
|
} |
|
|
|
const FormMap = { |
|
[Operator.Begin]: BeginForm, |
|
[Operator.Retrieval]: RetrievalForm, |
|
[Operator.Generate]: GenerateForm, |
|
[Operator.Answer]: AnswerForm, |
|
}; |
|
|
|
const FlowDrawer = ({ |
|
visible, |
|
hideModal, |
|
node, |
|
}: IModalProps<any> & IProps) => { |
|
const operatorName: Operator = node?.data.label; |
|
const OperatorForm = FormMap[operatorName]; |
|
const [form] = Form.useForm(); |
|
|
|
const { handleValuesChange } = useHandleFormValuesChange(node?.id); |
|
|
|
useEffect(() => { |
|
if (visible) { |
|
form.setFieldsValue(node?.data?.form); |
|
} |
|
}, [visible, form, node?.data?.form]); |
|
|
|
return ( |
|
<Drawer |
|
title={node?.data.label} |
|
placement="right" |
|
onClose={hideModal} |
|
open={visible} |
|
getContainer={false} |
|
mask={false} |
|
width={470} |
|
> |
|
{visible && ( |
|
<OperatorForm |
|
onValuesChange={handleValuesChange} |
|
form={form} |
|
></OperatorForm> |
|
)} |
|
</Drawer> |
|
); |
|
}; |
|
|
|
export default FlowDrawer; |
|
|