import { Collapse } from '@/components/collapse'; import { Button } from '@/components/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { RAGFlowSelect } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { Textarea } from '@/components/ui/textarea'; import { FormTooltip } from '@/components/ui/tooltip'; import { buildSelectOptions } from '@/utils/component-util'; import { zodResolver } from '@hookform/resolvers/zod'; import { Plus } from 'lucide-react'; import { memo, useEffect, useRef } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { AgentDialogueMode } from '../../constant'; import { INextOperatorForm } from '../../interface'; import { ParameterDialog } from './parameter-dialog'; import { QueryTable } from './query-table'; import { useEditQueryRecord } from './use-edit-query'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; const ModeOptions = buildSelectOptions([ AgentDialogueMode.Conversational, AgentDialogueMode.Task, ]); function BeginForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const values = useValues(node); const FormSchema = z.object({ enablePrologue: z.boolean().optional(), prologue: z.string().trim().optional(), mode: z.string(), inputs: z .array( z.object({ key: z.string(), type: z.string(), value: z.string(), optional: z.boolean(), name: z.string(), options: z.array(z.union([z.number(), z.string(), z.boolean()])), }), ) .optional(), }); const form = useForm({ defaultValues: values, resolver: zodResolver(FormSchema), }); useWatchFormChange(node?.id, form); const inputs = useWatch({ control: form.control, name: 'inputs' }); const mode = useWatch({ control: form.control, name: 'mode' }); const enablePrologue = useWatch({ control: form.control, name: 'enablePrologue', }); const previousModeRef = useRef(mode); useEffect(() => { if ( previousModeRef.current === AgentDialogueMode.Task && mode === AgentDialogueMode.Conversational ) { form.setValue('enablePrologue', true); } previousModeRef.current = mode; }, [mode, form]); const { ok, currentRecord, visible, hideModal, showModal, otherThanCurrentQuery, handleDeleteRecord, } = useEditQueryRecord({ form, node, }); return (
( Mode )} /> {mode === AgentDialogueMode.Conversational && ( ( {t('flow.openingSwitch')} )} /> )} {mode === AgentDialogueMode.Conversational && enablePrologue && ( ( {t('flow.openingCopy')} )} /> )} {/* Create a hidden field to make Form instance record this */}
} /> {t('flow.input')} } rightContent={ } > {visible && ( )}
); } export default memo(BeginForm);