"use client"; import { RiCheckLine, RiCloseLine, RiEyeLine, RiEyeOffLine, } from "@remixicon/react"; import { useMemo, useState, useTransition } from "react"; import { toast } from "sonner"; import { updateEmailAction } from "@/app/(dashboard)/ajustes/actions"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; type UpdateEmailFormProps = { currentEmail: string; authProvider?: string; // 'google' | 'credential' | undefined }; export function UpdateEmailForm({ currentEmail, authProvider, }: UpdateEmailFormProps) { const [isPending, startTransition] = useTransition(); const [password, setPassword] = useState(""); const [newEmail, setNewEmail] = useState(""); const [confirmEmail, setConfirmEmail] = useState(""); const [showPassword, setShowPassword] = useState(false); // Verificar se o usuário usa login via Google (não precisa de senha) const isGoogleAuth = authProvider === "google"; // Validação em tempo real: e-mails coincidem const emailsMatch = useMemo(() => { if (!confirmEmail) return null; // Não mostrar erro se campo vazio return newEmail.toLowerCase() === confirmEmail.toLowerCase(); }, [newEmail, confirmEmail]); // Validação: novo e-mail é diferente do atual const isEmailDifferent = useMemo(() => { if (!newEmail) return true; return newEmail.toLowerCase() !== currentEmail.toLowerCase(); }, [newEmail, currentEmail]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // Validação frontend antes de enviar if (newEmail.toLowerCase() !== confirmEmail.toLowerCase()) { toast.error("Os e-mails não coincidem"); return; } if (newEmail.toLowerCase() === currentEmail.toLowerCase()) { toast.error("O novo e-mail deve ser diferente do atual"); return; } startTransition(async () => { const result = await updateEmailAction({ password: isGoogleAuth ? undefined : password, newEmail, confirmEmail, }); if (result.success) { toast.success(result.message); setPassword(""); setNewEmail(""); setConfirmEmail(""); } else { toast.error(result.error); } }); }; return (
); }