"use client"; import { updatePasswordAction } from "@/app/(dashboard)/ajustes/actions"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { RiEyeLine, RiEyeOffLine, RiCheckLine, RiCloseLine, RiAlertLine } from "@remixicon/react"; import { useState, useTransition, useMemo } from "react"; import { toast } from "sonner"; type UpdatePasswordFormProps = { authProvider?: string; // 'google' | 'credential' | undefined }; export function UpdatePasswordForm({ authProvider }: UpdatePasswordFormProps) { const [isPending, startTransition] = useTransition(); const [currentPassword, setCurrentPassword] = useState(""); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [showCurrentPassword, setShowCurrentPassword] = useState(false); const [showNewPassword, setShowNewPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); // Verificar se o usuário usa login via Google const isGoogleAuth = authProvider === "google"; // Validação em tempo real: senhas coincidem const passwordsMatch = useMemo(() => { if (!confirmPassword) return null; // Não mostrar erro se campo vazio return newPassword === confirmPassword; }, [newPassword, confirmPassword]); // Indicador de força da senha (básico) const passwordStrength = useMemo(() => { if (!newPassword) return null; if (newPassword.length < 6) return "weak"; if (newPassword.length >= 12 && /[A-Z]/.test(newPassword) && /[0-9]/.test(newPassword) && /[^A-Za-z0-9]/.test(newPassword)) { return "strong"; } if (newPassword.length >= 8 && (/[A-Z]/.test(newPassword) || /[0-9]/.test(newPassword))) { return "medium"; } return "weak"; }, [newPassword]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // Validação frontend antes de enviar if (newPassword !== confirmPassword) { toast.error("As senhas não coincidem"); return; } if (newPassword.length < 6) { toast.error("A senha deve ter no mínimo 6 caracteres"); return; } startTransition(async () => { const result = await updatePasswordAction({ currentPassword, newPassword, confirmPassword, }); if (result.success) { toast.success(result.message); setCurrentPassword(""); setNewPassword(""); setConfirmPassword(""); } else { toast.error(result.error); } }); }; // Se o usuário usa Google OAuth, mostrar aviso if (isGoogleAuth) { return (
Você fez login usando sua conta do Google. A senha é gerenciada diretamente pelo Google e não pode ser alterada aqui. Para modificar sua senha, acesse as configurações de segurança da sua conta Google.