'use client'; import { UseFormReturn } from 'react-hook-form'; import { z } from 'zod'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { RAGFlowSelect } from '@/components/ui/select'; import { IModalProps } from '@/interfaces/common'; import { buildOptions } from '@/utils/form'; import { loader } from '@monaco-editor/react'; import { Dispatch, SetStateAction } from 'react'; import { useTranslation } from 'react-i18next'; loader.config({ paths: { vs: '/vs' } }); export const FormId = 'EditMcpForm'; export enum ServerType { SSE = 'sse', StreamableHttp = 'streamable-http', } const ServerTypeOptions = buildOptions(ServerType); export function useBuildFormSchema() { const { t } = useTranslation(); const FormSchema = z.object({ name: z .string() .min(1, { message: t('common.mcp.namePlaceholder'), }) .regex(/^[a-zA-Z0-9_-]{1,64}$/, { message: t('common.mcp.nameRequired'), }) .trim(), url: z .string() .url() .min(1, { message: t('common.mcp.urlPlaceholder'), }) .trim(), server_type: z .string() .min(1, { message: t('common.pleaseSelect'), }) .trim(), authorization_token: z.string().optional(), }); return FormSchema; } export function EditMcpForm({ form, onOk, setFieldChanged, }: IModalProps & { form: UseFormReturn; setFieldChanged: Dispatch>; }) { const { t } = useTranslation(); const FormSchema = useBuildFormSchema(); function onSubmit(data: z.infer) { onOk?.(data); } return (
( {t('common.name')} )} /> ( {t('mcp.url')} { field.onChange(e.target.value.trim()); setFieldChanged(true); }} /> )} /> ( {t('mcp.serverType')} { field.onChange(value); setFieldChanged(true); }} /> )} /> ( Authorization Token { field.onChange(e.target.value.trim()); setFieldChanged(true); }} /> )} /> ); }