import { FormContainer } from '@/components/form-container'; import { IconFont } from '@/components/icon-font'; import { BlockButton, Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { Form, FormControl, FormField, FormItem, FormMessage, } from '@/components/ui/form'; import { RAGFlowSelect } from '@/components/ui/select'; import { Separator } from '@/components/ui/separator'; import { Textarea } from '@/components/ui/textarea'; import { ISwitchForm } from '@/interfaces/database/flow'; import { cn } from '@/lib/utils'; import { zodResolver } from '@hookform/resolvers/zod'; import { X } from 'lucide-react'; import { useCallback, useMemo } from 'react'; import { useFieldArray, useForm, useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { Operator, SwitchLogicOperatorOptions, SwitchOperatorOptions, } from '../../constant'; import { useBuildFormSelectOptions } from '../../form-hooks'; import { useBuildComponentIdAndBeginOptions } from '../../hooks/use-get-begin-query'; import { IOperatorForm } from '../../interface'; import { useValues } from './use-values'; const ConditionKey = 'conditions'; const ItemKey = 'items'; type ConditionCardsProps = { name: string; removeParent(index: number): void; parentIndex: number; parentLength: number; } & IOperatorForm; function useBuildSwitchOperatorOptions() { const { t } = useTranslation(); const switchOperatorOptions = useMemo(() => { return SwitchOperatorOptions.map((x) => ({ value: x.value, icon: ( ', })} > ), label: t(`flow.switchOperatorOptions.${x.label}`), })); }, [t]); return switchOperatorOptions; } function ConditionCards({ name: parentName, node, parentIndex, removeParent, parentLength, }: ConditionCardsProps) { const form = useFormContext(); const { t } = useTranslation(); const componentIdOptions = useBuildComponentIdAndBeginOptions( node?.id, node?.parentId, ); const switchOperatorOptions = useBuildSwitchOperatorOptions(); const name = `${parentName}.${ItemKey}`; const { fields, remove, append } = useFieldArray({ name: name, control: form.control, }); const handleRemove = useCallback( (index: number) => () => { remove(index); if (parentIndex !== 0 && index === 0 && parentLength === 1) { removeParent(parentIndex); } }, [parentIndex, parentLength, remove, removeParent], ); return (
{fields.map((field, index) => { return (
( )} />
( )} />
(