import { Input } from '@/components/ui/input'; import { Sheet, SheetContent, SheetHeader, SheetTitle, } from '@/components/ui/sheet'; import { useTranslate } from '@/hooks/common-hooks'; import { IModalProps } from '@/interfaces/common'; import { RAGFlowNodeType } from '@/interfaces/database/flow'; import { cn } from '@/lib/utils'; import { zodResolver } from '@hookform/resolvers/zod'; import { get, isPlainObject, lowerFirst } from 'lodash'; import { Play, X } from 'lucide-react'; import { useEffect, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { BeginId, Operator, operatorMap } from '../constant'; import { FlowFormContext } from '../context'; import { RunTooltip } from '../flow-tooltip'; import { useHandleFormValuesChange, useHandleNodeNameChange } from '../hooks'; import OperatorIcon from '../operator-icon'; import { buildCategorizeListFromObject, needsSingleStepDebugging, } from '../utils'; import SingleDebugDrawer from './single-debug-drawer'; import { useFormConfigMap } from './use-form-config-map'; interface IProps { node?: RAGFlowNodeType; singleDebugDrawerVisible: IModalProps['visible']; hideSingleDebugDrawer: IModalProps['hideModal']; showSingleDebugDrawer: IModalProps['showModal']; } const EmptyContent = () =>
; const FormSheet = ({ 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( operatorName, node?.id, form, ); useEffect(() => { if (visible && !form.formState.isDirty) { if (node?.id !== previousId.current) { 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 FormSheet;