import { useForm, useWatch } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Box } from "@mui/material"; import { KeyRound } from "lucide-react"; import { PasswordChecklist } from "@/components/auth/password-checklist"; import { Button } from "@/components/ui/button"; import { FormField } from "@/components/ui/form-field"; import { PasswordField } from "@/components/ui/password-field"; import { Text } from "@/components/ui/text"; import { CURRENT_PASSWORD_INCORRECT_MESSAGE, changePasswordSchema, type ChangePasswordFormValues, } from "@/domain/auth/schemas/change-password-schema"; import { useChangePassword } from "@/domain/auth/use-cases/use-change-password"; const EMPTY_VALUES: ChangePasswordFormValues = { currentPassword: "", newPassword: "", confirmPassword: "", }; export function ChangePasswordSection() { const changePassword = useChangePassword(); const { register, handleSubmit, control, reset, setError, formState: { errors }, } = useForm({ resolver: zodResolver(changePasswordSchema), defaultValues: EMPTY_VALUES, mode: "onTouched", }); const values = useWatch({ control }); const newPassword = values.newPassword ?? ""; const canSubmit = changePasswordSchema.safeParse(values).success; const serverError = changePassword.error?.message; const showServerError = Boolean(serverError) && serverError !== CURRENT_PASSWORD_INCORRECT_MESSAGE; const onSubmit = (form: ChangePasswordFormValues) => { changePassword.mutate( { Currentpassword: form.currentPassword, Newpassword: form.newPassword, Confirmpassword: form.confirmPassword, }, { onSuccess: () => reset(EMPTY_VALUES), onError: (error) => { if (error.message === CURRENT_PASSWORD_INCORRECT_MESSAGE) { setError("currentPassword", { message: CURRENT_PASSWORD_INCORRECT_MESSAGE }); } }, }, ); }; return (
{showServerError && {serverError}}
); }