"use client"; import { UploadIcon } from "lucide-react"; import { useTranslations } from "next-intl"; import Image from "next/image"; import { useEffect, useState } from "react"; import { DropzoneOptions } from "react-dropzone"; import { FileInput, FileUploader } from "../../../../components"; import { Button } from "../../../../shadcnui"; import { isRemoteImageSrc } from "../../../../utils"; import { UserInterface } from "../../data"; type UserAvatarEditorProps = { user?: UserInterface; file?: File | null; setFile: (file: File | null) => void; resetImage: boolean; setResetImage: (reset: boolean) => void; }; export function UserAvatarEditor({ user, file, setFile, resetImage, setResetImage }: UserAvatarEditorProps) { const [files, setFiles] = useState(null); const t = useTranslations(); useEffect(() => { if (files && files.length > 0) { setResetImage(false); setFile(files[0]); } }, [files]); const avatarSrc = file ? URL.createObjectURL(file) : user?.avatar || ""; const dropzone = { multiple: false, maxSize: 100 * 1024 * 1024, preventDropOnDocument: false, accept: { "application/images": [".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg"], }, } satisfies DropzoneOptions; return (
{!resetImage && (file || user?.avatar) ? ( {t(`common.avatar`)} ) : ( )} {!resetImage && (file || user?.avatar) && ( )}
); }