import { useRef, useState } from "react"; import { toast } from "sonner"; import Avatar from "@/components/avatar"; import { Button } from "@/components/ui/button"; import Icon from "@/components/ui/icon"; import { Label } from "@/components/ui/label"; import { useUploadAvatar } from "@/lib/query/hooks"; import { parseError } from "@/lib/server"; import { cn } from "@/lib/utils"; export function UploadAvatar({ name, username, avatarURL, onAvatarUploaded, skipOrgCheck = false, className, }: { name?: string; username?: string; avatarURL?: string | null; onAvatarUploaded: (avatarURL: string) => void; label?: string; skipOrgCheck?: boolean; className?: string; }) { const [uploading, setUploading] = useState(false); const [error, setError] = useState(null); const fileInputRef = useRef(null); const [showEdit, setShowEdit] = useState(false); const uploadAvatar = useUploadAvatar(); const handleFileChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); setError(null); try { const url = await uploadAvatar.mutateAsync(file); onAvatarUploaded(url); setUploading(false); toast.success(
Avatar uploaded successfully
, { dismissible: false, }); } catch (err) { const message = parseError(err as Error); setError(message); setUploading(false); toast.error(`Error uploading avatar: ${message}`, { dismissible: false, }); } }; return (
{error && }
); }