import { useTranslate } from '@/hooks/common-hooks'; import { IModalProps } from '@/interfaces/common'; import { CloseOutlined } from '@ant-design/icons'; import { Flex, Input } from 'antd'; import { get, isPlainObject, lowerFirst } from 'lodash'; import { Play } from 'lucide-react'; import { useEffect, useRef } from 'react'; import { BeginId, Operator, operatorMap } from '../constant'; import { useHandleFormValuesChange, useHandleNodeNameChange } from '../hooks'; import OperatorIcon from '../operator-icon'; import { buildCategorizeListFromObject, needsSingleStepDebugging, } from '../utils'; import SingleDebugDrawer from './single-debug-drawer'; import { Sheet, SheetContent, SheetHeader } from '@/components/ui/sheet'; import { RAGFlowNodeType } from '@/interfaces/database/flow'; import { FlowFormContext } from '../context'; import { RunTooltip } from '../flow-tooltip'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { useFormConfigMap } from './use-form-config-map'; interface IProps { node?: RAGFlowNodeType; singleDebugDrawerVisible: IModalProps['visible']; hideSingleDebugDrawer: IModalProps['hideModal']; showSingleDebugDrawer: IModalProps['showModal']; } const EmptyContent = () =>
; const FormDrawer = ({ visible, hideModal, node, singleDebugDrawerVisible, hideSingleDebugDrawer, showSingleDebugDrawer, }: IModalProps & IProps) => { const operatorName: Operator = node?.data.label as Operator; const FormConfigMap = useFormConfigMap(); const currentFormMap = FormConfigMap[operatorName]; const OperatorForm = currentFormMap.component ?? EmptyContent; const form = useForm({ defaultValues: currentFormMap.defaultValues, resolver: zodResolver(currentFormMap.schema), }); const { name, handleNameBlur, handleNameChange } = useHandleNodeNameChange({ id: node?.id, data: node?.data, }); const previousId = useRef(node?.id); const { t } = useTranslate('flow'); const { handleValuesChange } = useHandleFormValuesChange(node?.id); useEffect(() => { if (visible) { if (node?.id !== previousId.current) { // form.resetFields(); form.reset(); form.clearErrors(); } if (operatorName === Operator.Categorize) { const items = buildCategorizeListFromObject( get(node, 'data.form.category_description', {}), ); const formData = node?.data?.form; if (isPlainObject(formData)) { // form.setFieldsValue({ ...formData, items }); form.reset({ ...formData, items }); } } else { // form.setFieldsValue(node?.data?.form); form.reset(node?.data?.form); } previousId.current = node?.id; } }, [visible, form, node?.data?.form, node?.id, node, operatorName]); return ( {node?.id === BeginId ? ( {t(BeginId)} ) : ( )} {needsSingleStepDebugging(operatorName) && ( )} {t(`${lowerFirst(operatorName)}Description`)}
{visible && ( )}
{singleDebugDrawerVisible && ( )}
); }; export default FormDrawer;