import React, { useState } from "react"; import { z } from "zod"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import showToast from "../../services/toastService"; import AuthRepository from "../../repositories/AuthRepository"; import "./page-auth.css"; import { useSelector } from "react-redux"; // --- Zod Schema for validation --- const ChangePasswordSchema = z .object({ newPassword: z .string() .min(8, "Password must be at least 8 characters") .regex(/[A-Z]/, "Must contain an uppercase letter") .regex(/[a-z]/, "Must contain a lowercase letter") .regex(/\d/, "Must contain a number") .regex( /[!@#$%^&*()_+{}\[\]:;<>,.?~\\/-]/, "Must contain a special character" ), confirmPassword: z.string().min(1, "Confirm Password is required"), oldPassword: z.string().min(1, "Old Password is required"), }) .refine((data) => data.newPassword === data.confirmPassword, { message: "New password and Confirm password do not match", path: ["confirmPassword"], }); const ChangePasswordPage = ({ onClose }) => { const [loading, setLoading] = useState(false); const [hideOldPass, setHideOldPass] = useState(true); const [hideNewPass, setHideNewPass] = useState(true); const [hideConfirmPass, setHideConfirmPass] = useState(true); const loggedUser = useSelector((store) => store.globalVariables.loginUser); const { register, handleSubmit, formState: { errors }, reset, setError, } = useForm({ resolver: zodResolver(ChangePasswordSchema), }); const onChangePassword = async (data) => { try { let formData = { email: loggedUser?.employeeInfo?.email, oldPassword: data.oldPassword, newPassword: data.newPassword, }; console.log(formData); setLoading(true); await AuthRepository.changepassword(formData); showToast("Your Password changed Successfully", "success"); setLoading(false); reset(); onClose(); } catch (error) { setLoading(false); showToast("Something went wrong", "error"); } }; return (
{/* Close Button */}
Change Password

Enter old and new password to update.

{/* Old Password */}
{errors.oldPassword && (

{errors.oldPassword.message}

)}
{errors.newPassword && (
{errors.newPassword.message}
)}
{/* Confirm Password */}
{errors.confirmPassword && (
{errors.confirmPassword.message}
)}
{/* Action Buttons */}

Password must be:

- at least 8 characters long

- must contain at least one uppercase letter

- must contain at least one lowercase letter

- must contain at least one number

- must contain at least one special character

); }; export default ChangePasswordPage;