import { DelimiterInput } from '@/components/delimiter-form-field'; import { RAGFlowFormItem } from '@/components/ragflow-form'; import { SliderInputFormField } from '@/components/slider-input-form-field'; import { BlockButton, Button } from '@/components/ui/button'; import { Form } from '@/components/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trash2 } from 'lucide-react'; import { memo } from 'react'; import { useFieldArray, useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { initialSplitterValues } from '../../constant'; import { useFormValues } from '../../hooks/use-form-values'; import { useWatchFormChange } from '../../hooks/use-watch-form-change'; import { INextOperatorForm } from '../../interface'; import { buildOutputList } from '../../utils/build-output-list'; import { FormWrapper } from '../components/form-wrapper'; import { Output } from '../components/output'; const outputList = buildOutputList(initialSplitterValues.outputs); export const FormSchema = z.object({ chunk_token_size: z.number(), delimiters: z.array( z.object({ value: z.string().optional(), }), ), overlapped_percent: z.number(), // 0.0 - 0.3 , 0% - 30% }); export type SplitterFormSchemaType = z.infer; const SplitterForm = ({ node }: INextOperatorForm) => { const defaultValues = useFormValues(initialSplitterValues, node); const { t } = useTranslation(); const form = useForm({ defaultValues, resolver: zodResolver(FormSchema), }); const name = 'delimiters'; const { fields, append, remove } = useFieldArray({ name: name, control: form.control, }); useWatchFormChange(node?.id, form); return (
{t('flow.delimiters')}
{fields.map((field, index) => (
))}
append({ value: '\n' })}> {t('common.add')}
); }; export default memo(SplitterForm);