kgroad-frontend2/src/widgets/forms/ForgotPasswordForm/confirm-code/confirm-code.tsx

95 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Image from "next/image";
import key from "./icons/key.svg";
import AuthInput from "@/features/AuthInput/AuthInput";
import "./confirm-code.scss";
import { useState } from "react";
import { apiInstance } from "@/shared/config/apiConfig";
import Loader from "@/shared/ui/components/Loader/Loader";
import { ITokens } from "@/shared/types/token-type";
import { useRouter } from "@/shared/config/navigation";
import { AxiosError } from "axios";
interface IConfirmCodeProps {
setChangeForm: (boolean: boolean) => void;
}
const ConfirmCode: React.FC<IConfirmCodeProps> = ({
setChangeForm,
}: IConfirmCodeProps) => {
const [error, setError] = useState<string>("");
const [loader, setLoader] = useState<boolean>(false);
const router = useRouter();
const handleSubmit: React.MouseEventHandler<
HTMLFormElement
> = async (e) => {
e.preventDefault();
const formData = new FormData(e.currentTarget);
if (!formData.get("code")) {
return setError("Заполните поле");
}
try {
setError("");
setLoader(true);
const res = await apiInstance.post<ITokens>(
"/users/password_reset/code/",
formData
);
if (res.status === 200 || res.status === 201) {
localStorage.setItem(
"transitional",
JSON.stringify(res.data)
);
router.push("/sign-in/reset-code");
}
setLoader(false);
} catch (error: unknown) {
if (error instanceof AxiosError) {
if (error.response?.status === 400) {
setError("Неверный код");
} else {
setError("Ошибка на стороне сервера");
}
} else {
setError("Произошла непредвиденная ошибка");
}
setLoader(false);
}
};
return (
<div className="auth-wrapper">
<div className="auth-icon2">
<Image src={key} alt="Key Icon" />
</div>
<div className="auth-header">
<h2>Введите код</h2>
<p>Введите код для сброса и восстановления пароля</p>
</div>
<form onSubmit={handleSubmit} className="confirm-code">
<AuthInput
type="text"
name="code"
label="Код сброса пароля"
error={error}
placeholder="Введите код"
/>
<button type="submit">
{loader ? <Loader /> : "Сбросить пароль"}
</button>
</form>
<button
onClick={() => setChangeForm(false)}
className="confirm-code-send-email"
>
Получить код
</button>
</div>
);
};
export default ConfirmCode;