'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trash } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { type ChangeEvent, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { toast } from 'sonner'; import { Button } from '@/components/ui/common/Button'; import { Form, FormField } from '@/components/ui/common/Form'; import { Skeleton } from '@/components/ui/common/Skeleton'; import { ChannelAvatar } from '@/components/ui/elements/ChannelAvatar'; import { ConfirmModal } from '@/components/ui/elements/ConfirmModal'; import { FormWrapper } from '@/components/ui/elements/FormWrapper'; import { useChangeProfileAvatarMutation, useRemoveProfileAvatarMutation, } from '@/graphql/generated/output'; import { useCurrent } from '@/hooks/useCurrent'; import { type TypeUploadFileSchema, uploadFileSchema, } from '@/schemas/upload-file.schema'; export const ChangeAvatarFormSkeleton = () => ; export const ChangeAvatarForm = () => { const t = useTranslations('dashboard.settings.profile.avatar'); const { user, isLoadingProfile, refetch } = useCurrent(); const inputRef = useRef(null); const form = useForm({ resolver: zodResolver(uploadFileSchema), values: { file: user?.avatar ?? '', }, }); const [update, { loading: isLoadingUpdate }] = useChangeProfileAvatarMutation({ onCompleted() { void refetch(); toast.success(t('successUpdateMessage')); }, onError() { toast.error(t('errorUpdateMessage')); }, }); const [remove, { loading: isLoadingRemove }] = useRemoveProfileAvatarMutation({ onCompleted() { void refetch(); toast.success(t('successRemoveMessage')); }, onError() { toast.error(t('errorRemoveMessage')); }, }); function handleImageChange(event: ChangeEvent) { const file = event.target.files?.[0]; if (file) { void update({ variables: { avatar: file } }); form.setValue('file', file); } } if (!user) { return null; } return isLoadingProfile ? ( ) : (
(
{user?.avatar ? ( remove()} > ) : null}

{t('info')}

)} />
); };