import { transformFile2Base64 } from '@/utils/file-util'; import { Pencil, Plus, XIcon } from 'lucide-react'; import { ChangeEventHandler, forwardRef, useCallback, useEffect, useState, } from 'react'; import { useTranslation } from 'react-i18next'; import { Avatar, AvatarFallback, AvatarImage } from './ui/avatar'; import { Button } from './ui/button'; import { Input } from './ui/input'; type AvatarUploadProps = { value?: string; onChange?: (value: string) => void; tips?: string; }; export const AvatarUpload = forwardRef( function AvatarUpload({ value, onChange, tips }, ref) { const { t } = useTranslation(); const [avatarBase64Str, setAvatarBase64Str] = useState(''); // Avatar Image base64 const handleChange: ChangeEventHandler = useCallback( async (ev) => { const file = ev.target?.files?.[0]; if (/\.(jpg|jpeg|png|webp|bmp)$/i.test(file?.name ?? '')) { const str = await transformFile2Base64(file!); setAvatarBase64Str(str); onChange?.(str); } ev.target.value = ''; }, [onChange], ); const handleRemove = useCallback(() => { setAvatarBase64Str(''); onChange?.(''); }, [onChange]); useEffect(() => { if (value) { setAvatarBase64Str(value); } }, [value]); return (
{!avatarBase64Str ? (

{t('common.upload')}

) : (
)}
{tips ?? t('knowledgeConfiguration.photoTip')}
); }, );