| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- import { z } from 'zod';
-
- import {
- FileUpload,
- FileUploadDropzone,
- FileUploadItem,
- FileUploadItemDelete,
- FileUploadItemMetadata,
- FileUploadItemPreview,
- FileUploadList,
- FileUploadTrigger,
- } from '@/components/file-upload';
- import { RAGFlowFormItem } from '@/components/ragflow-form';
- import { Button } from '@/components/ui/button';
- import { Form, FormControl, FormItem, FormLabel } from '@/components/ui/form';
- import { Input } from '@/components/ui/input';
- import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';
- import { Textarea } from '@/components/ui/textarea';
- import { useTranslate } from '@/hooks/common-hooks';
- import { useFetchAgent } from '@/hooks/use-agent-request';
- import { transformBase64ToFile } from '@/utils/file-util';
- import { zodResolver } from '@hookform/resolvers/zod';
- import { CloudUpload, X } from 'lucide-react';
- import { useEffect } from 'react';
- import { useForm } from 'react-hook-form';
-
- const formSchema = z.object({
- title: z.string().min(1, {}),
- avatar: z.array(z.custom<File>()),
- description: z.string(),
- permission: z.string(),
- });
-
- export type SettingFormSchemaType = z.infer<typeof formSchema>;
-
- export const AgentSettingId = 'agentSettingId';
-
- type SettingFormProps = {
- submit: (values: SettingFormSchemaType) => void;
- };
-
- export function SettingForm({ submit }: SettingFormProps) {
- const { t } = useTranslate('flow.settings');
- const { data } = useFetchAgent();
-
- const form = useForm<SettingFormSchemaType>({
- resolver: zodResolver(formSchema),
- defaultValues: {
- title: '',
- permission: 'me',
- },
- });
-
- useEffect(() => {
- form.reset({
- title: data?.title,
- description: data?.description,
- avatar: data.avatar ? [transformBase64ToFile(data.avatar)] : [],
- permission: data?.permission,
- });
- }, [data, form]);
-
- return (
- <Form {...form}>
- <form
- onSubmit={form.handleSubmit(submit)}
- className="space-y-8"
- id={AgentSettingId}
- >
- <RAGFlowFormItem name="title" label={t('title')}>
- <Input />
- </RAGFlowFormItem>
- <RAGFlowFormItem name="avatar" label={t('photo')}>
- {(field) => (
- <FileUpload
- value={field.value}
- onValueChange={field.onChange}
- accept="image/*"
- maxFiles={1}
- onFileReject={(_, message) => {
- form.setError('avatar', {
- message,
- });
- }}
- multiple
- >
- <FileUploadDropzone className="flex-row flex-wrap border-dotted text-center">
- <CloudUpload className="size-4" />
- Drag and drop or
- <FileUploadTrigger asChild>
- <Button variant="link" size="sm" className="p-0">
- choose files
- </Button>
- </FileUploadTrigger>
- to upload
- </FileUploadDropzone>
- <FileUploadList>
- {field.value?.map((file: File, index: number) => (
- <FileUploadItem key={index} value={file}>
- <FileUploadItemPreview />
- <FileUploadItemMetadata />
- <FileUploadItemDelete asChild>
- <Button variant="ghost" size="icon" className="size-7">
- <X />
- <span className="sr-only">Delete</span>
- </Button>
- </FileUploadItemDelete>
- </FileUploadItem>
- ))}
- </FileUploadList>
- </FileUpload>
- )}
- </RAGFlowFormItem>
- <RAGFlowFormItem name="description" label={t('description')}>
- <Textarea rows={4} />
- </RAGFlowFormItem>
-
- <RAGFlowFormItem
- name="permission"
- label={t('permissions')}
- tooltip={t('permissionsTip')}
- >
- {(field) => (
- <RadioGroup
- onValueChange={field.onChange}
- value={field.value}
- className="flex"
- >
- <FormItem className="flex items-center gap-3">
- <FormControl>
- <RadioGroupItem value="me" id="me" />
- </FormControl>
- <FormLabel
- className="font-normal !m-0 cursor-pointer"
- htmlFor="me"
- >
- {t('me')}
- </FormLabel>
- </FormItem>
-
- <FormItem className="flex items-center gap-3">
- <FormControl>
- <RadioGroupItem value="team" id="team" />
- </FormControl>
- <FormLabel
- className="font-normal !m-0 cursor-pointer"
- htmlFor="team"
- >
- {t('team')}
- </FormLabel>
- </FormItem>
- </RadioGroup>
- )}
- </RAGFlowFormItem>
- </form>
- </Form>
- );
- }
|