'use client' import {useContext, useState} from "react"; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import {faEnvelope, faKey, faLock, faArrowLeft} from '@fortawesome/free-solid-svg-icons'; import System from "@/lib/models/System"; import {QueryDataResponse} from "@/shared/interface"; import {AlertContext} from "@/context/AlertContext"; import {useTranslations} from "next-intl"; import {LangContext, LangContextProps} from "@/context/LangContext"; export default function ForgetPasswordPage() { const [step, setStep] = useState(1); const [email, setEmail] = useState(''); const [verificationCode, setVerificationCode] = useState(''); const [isConfirmed, setIsConfirmed] = useState(false); const [newPassword, setNewPassword] = useState(''); const {errorMessage, successMessage} = useContext(AlertContext); const t = useTranslations(); const {lang} = useContext(LangContext) function handleNextStep(): void { setStep(step + 1); } function handlePrevStep(): void { setStep(step - 1); } async function handleConfirm() { try { const response: QueryDataResponse = await System.postToServer>('user/verify-code', { verifyCode: verificationCode, email, }, lang); if (response.valid) { successMessage(response.message ?? ''); setIsConfirmed(true); } else { errorMessage(response.message ?? ''); } } catch (e: unknown) { if (e instanceof Error) { errorMessage(t('resetPassword.error.codeServer')); } else { errorMessage(t('resetPassword.error.codeUnknown')); } } } async function handleEmailCheck(): Promise { if (email == null || email == "") { errorMessage(t('resetPassword.error.emailInvalid')); return; } const emailRegEx = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegEx.test(email)) { errorMessage(t('resetPassword.error.emailFormat')); return; } try { const response: QueryDataResponse = await System.postToServer>('user/email-check', { email: email }, lang); if (response.valid) { successMessage(response.message ?? ''); handleNextStep(); } else { errorMessage(response.message ?? ''); } } catch (e: unknown) { if (e instanceof Error) { errorMessage(t('resetPassword.error.emailServer')); } else { errorMessage(t('resetPassword.error.emailUnknown')); } } } async function handleNewPassword(): Promise { try { const response: QueryDataResponse = await System.postToServer('password/reset', { email: email, newPassword: newPassword, code: verificationCode }, lang); if (response.valid) { successMessage(response.message ?? ''); handleNextStep(); } else { errorMessage(response.message ?? ''); } } catch (e: unknown) { if (e instanceof Error) { errorMessage(t('resetPassword.error.passwordServer')); } else { errorMessage(t('resetPassword.error.passwordUnknown')); } } } return (
ERitors

{t('resetPassword.title')}

{t('resetPassword.subtitle')}

= 1 ? 'bg-gradient-to-r from-primary to-info' : 'bg-secondary'}`}>
= 2 ? 'bg-gradient-to-r from-primary to-info' : 'bg-secondary'}`}>
= 3 ? 'bg-gradient-to-r from-primary to-info' : 'bg-secondary'}`}>
{t('resetPassword.progress.email')} {t('resetPassword.progress.verification')} {t('resetPassword.progress.final')}
{step === 1 && (
setEmail(e.target.value)} required />
{t('resetPassword.backToLogin')}
)} {step === 2 && (
setVerificationCode(e.target.value)} disabled={isConfirmed} required />
{isConfirmed && (
setNewPassword(e.target.value)} required />
)}
)} {step === 3 && (

{t('resetPassword.success')}

)}
) }