import { useRef, useState } from 'react' import { Button } from '@shared/ui' import { useMe, useUploadAvatar } from '@features/auth' import styles from './ProfileAvatar.module.css' function fileToBase64(file: File): Promise { return new Promise((resolve, reject) => { const reader = new FileReader() reader.onload = () => { const result = reader.result as string const comma = result.indexOf(',') resolve(comma >= 0 ? result.slice(comma + 1) : result) } reader.onerror = () => reject(reader.error) reader.readAsDataURL(file) }) } export function ProfileAvatar() { const { data } = useMe() const { mutateAsync: upload, isPending } = useUploadAvatar() const inputRef = useRef(null) const [error, setError] = useState(null) const avatarLink = data?.avatar_link ?? null const openPicker = () => { if (isPending) return inputRef.current?.click() } const handleFileChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0] e.target.value = '' if (!file) return setError(null) try { const photo_base64 = await fileToBase64(file) await upload({ photo_base64, decoded_bytes: String(file.size) }) } catch { setError('Не удалось загрузить фото') } } return (
{avatarLink ? ( avatar ) : ( )}
{error && {error}}
) }