|
'use client'; |
|
|
|
import { zodResolver } from '@hookform/resolvers/zod'; |
|
import { useForm } from 'react-hook-form'; |
|
import { z } from 'zod'; |
|
|
|
import { FileUploader } from '@/components/file-uploader'; |
|
import { |
|
Form, |
|
FormControl, |
|
FormField, |
|
FormItem, |
|
FormLabel, |
|
FormMessage, |
|
} from '@/components/ui/form'; |
|
import { RAGFlowSelect } from '@/components/ui/select'; |
|
import { FileMimeType, Platform } from '@/constants/common'; |
|
import { IModalProps } from '@/interfaces/common'; |
|
import { TagRenameId } from '@/pages/add-knowledge/constant'; |
|
import { useTranslation } from 'react-i18next'; |
|
|
|
const options = Object.values(Platform).map((x) => ({ label: x, value: x })); |
|
|
|
export function UploadAgentForm({ hideModal, onOk }: IModalProps<any>) { |
|
const { t } = useTranslation(); |
|
const FormSchema = z.object({ |
|
platform: z |
|
.string() |
|
.min(1, { |
|
message: t('common.namePlaceholder'), |
|
}) |
|
.trim(), |
|
fileList: z.array(z.instanceof(File)), |
|
}); |
|
|
|
const form = useForm<z.infer<typeof FormSchema>>({ |
|
resolver: zodResolver(FormSchema), |
|
defaultValues: { platform: Platform.RAGFlow }, |
|
}); |
|
|
|
async function onSubmit(data: z.infer<typeof FormSchema>) { |
|
console.log('π ~ onSubmit ~ data:', data); |
|
const ret = await onOk?.(data); |
|
if (ret) { |
|
hideModal?.(); |
|
} |
|
} |
|
|
|
return ( |
|
<Form {...form}> |
|
<form |
|
onSubmit={form.handleSubmit(onSubmit)} |
|
className="space-y-6" |
|
id={TagRenameId} |
|
> |
|
<FormField |
|
control={form.control} |
|
name="fileList" |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('common.name')}</FormLabel> |
|
<FormControl> |
|
<FileUploader |
|
value={field.value} |
|
onValueChange={field.onChange} |
|
maxFileCount={1} |
|
maxSize={4 * 1024 * 1024} |
|
accept={{ '*.json': [FileMimeType.Json] }} |
|
/> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
<FormField |
|
control={form.control} |
|
name="platform" |
|
render={({ field }) => ( |
|
<FormItem> |
|
<FormLabel>{t('common.name')}</FormLabel> |
|
<FormControl> |
|
<RAGFlowSelect {...field} options={options} /> |
|
</FormControl> |
|
<FormMessage /> |
|
</FormItem> |
|
)} |
|
/> |
|
</form> |
|
</Form> |
|
); |
|
} |
|
|