marco.pms.web/src/pages/authentication/ForgotPasswordPage.jsx

103 lines
3.0 KiB
JavaScript

import { useState } from "react";
import { Link } from "react-router-dom";
import { AuthWrapper } from "./AuthWrapper"
import "./page-auth.css";
import AuthRepository from "../../repositories/AuthRepository";
import showToast from "../../services/toastService";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod";
const forgotPassSceham = z.object({
email: z.string().trim().email(),
})
const ForgotPasswordPage = () => {
const [loding, setLoading] = useState(false)
const { register,
handleSubmit,
formState: { errors },
reset,
getValues } = useForm({
resolver: zodResolver(forgotPassSceham),
defaultValues: {
email: ""
}
})
const onSubmit = async (data) => {
try {
setLoading(true)
const response = await AuthRepository.forgotPassword(data)
if (response.data && response.success)
showToast("verification email has been sent to your registered email address", "success")
reset()
setLoading(false)
} catch (err) {
reset()
if (err.response.status === 404) {
showToast("verification email has been sent to your registered email address", "success")
} else {
showToast("Something wrong", "error")
}
setLoading(false)
}
}
return (
<div className="col-12 col-lg-5 col-xl-4 d-flex align-items-center p-4 p-sm-5 bg-gray-60">
<div className="w-100" style={{ maxWidth: 420, margin: "0 auto" }}>
<h4 className="mb-2">Forgot Password? 🔒</h4>
<p className="mb-4">
Enter your email and we'll send you instructions to reset your password
</p>
<form id="formAuthentication" className="mb-3" onSubmit={handleSubmit(onSubmit)}>
<div className="mb-3 text-start">
<label htmlFor="email" className="form-label">
Email
</label>
<input
type="text"
className="form-control"
id="email"
name="email"
{...register("email")}
placeholder="Enter your email"
autoFocus
/>
{errors.email && (
<div
className="danger-text text-start"
style={{ fontSize: "12px" }}
>
{errors.email.message}
</div>
)}
</div>
<button aria-label="Click me" className="btn btn-primary d-grid w-100">
{loding ? "Please Wait..." : "Send Reset Link"}
</button>
</form>
<div className="text-center">
<Link
aria-label="Go to Login Page"
to="/auth/login"
className="d-flex align-items-center justify-content-center"
>
<i className="bx bx-chevron-left scaleX-n1-rtl bx-sm"></i>
Back to login
</Link>
</div>
{/* Footer Text */}
</div>
</div>
);
};
export default ForgotPasswordPage;