import { FormContainer } from '@/components/form-container'; import { SelectWithSearch } from '@/components/originui/select-with-search'; import { RAGFlowFormItem } from '@/components/ragflow-form'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { Button, ButtonLoading } from '@/components/ui/button'; import { FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { PermissionRole } from '@/constants/permission'; import { useUpdateKnowledge } from '@/hooks/knowledge-hooks'; import { transformFile2Base64 } from '@/utils/file-util'; import { Pencil, Upload } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { useParams } from 'umi'; export function GeneralForm() { const form = useFormContext(); const { t } = useTranslation(); const [avatarFile, setAvatarFile] = useState(null); const [avatarBase64Str, setAvatarBase64Str] = useState(''); // Avatar Image base64 const { saveKnowledgeConfiguration, loading: submitLoading } = useUpdateKnowledge(); const defaultValues = useMemo( () => form.formState.defaultValues ?? {}, [form.formState.defaultValues], ); const parser_id = defaultValues['parser_id']; const { id: kb_id } = useParams(); const teamOptions = useMemo(() => { return Object.values(PermissionRole).map((x) => ({ label: t('knowledgeConfiguration.' + x), value: x, })); }, [t]); // init avatar file if it exists in defaultValues useEffect(() => { if (!avatarFile) { let avatarList = defaultValues['avatar']; if (avatarList && avatarList.length > 0) { setAvatarBase64Str(avatarList[0].thumbUrl); } } }, [avatarFile, defaultValues]); // input[type=file] on change event, get img base64 useEffect(() => { if (avatarFile) { (async () => { // make use of img compression transformFile2Base64 setAvatarBase64Str(await transformFile2Base64(avatarFile)); })(); } }, [avatarFile]); return ( <> (
* {t('common.name')}
)} /> (
{t('setting.avatar')}
{!avatarBase64Str ? (

{t('common.upload')}

) : (
)} { const file = ev.target?.files?.[0]; if ( /\.(jpg|jpeg|png|webp|bmp)$/i.test(file?.name ?? '') ) { setAvatarFile(file!); } ev.target.value = ''; }} />
{t('knowledgeConfiguration.photoTip')}
)} /> { // null initialize empty string if (typeof field.value === 'object' && !field.value) { form.setValue('description', ' '); } return (
{t('flow.description')}
); }} />
{ (async () => { let isValidate = await form.trigger('name'); const { name, description, permission } = form.getValues(); const avatar = avatarBase64Str; if (isValidate) { saveKnowledgeConfiguration({ kb_id, parser_id, name, description, avatar, permission, }); } })(); }} > {t('knowledgeConfiguration.save')}
); }