add: reset password functionality

This commit is contained in:
Mahyar Khanbolooki
2025-07-01 23:50:17 +03:30
parent 48c458f012
commit 5056e2233a
3 changed files with 55 additions and 2 deletions
+23 -2
View File
@@ -14,6 +14,7 @@ import { useSignup } from '@/hooks/auth/useSignup';
import { useCheckUserExistsLazy } from '@/hooks/auth/useCheckUserExists';
import { useOtpRequest } from '@/hooks/auth/useOtpRequest';
import { useOtpValidation } from '@/hooks/auth/useOtpValidation';
import { useResetPassword } from '@/hooks/auth/useResetPassword';
type Props = object
@@ -34,8 +35,18 @@ function AuthIndex({ }: Props) {
const { run: runUserExistCheck } = useCheckUserExistsLazy()
const { run: runOtpRequest } = useOtpRequest();
const { run: runOtpValidation } = useOtpValidation();
const { run: runResetPassword } = useResetPassword();
const resetStates = () => {
setNumber('');
setPassword('');
setPasswordRepeat('');
setOtp('');
setShowPassword(false);
setShowPasswordRepeat(false);
setRememberMe(false);
stop();
}
useEffect(() => {
if (isAuthenticated) {
@@ -130,7 +141,17 @@ function AuthIndex({ }: Props) {
}
else if (step == AUTH_STEP.ENTER_RESET_PASSWORD) {
console.log("Password changed")
setStep(AUTH_STEP.ENTER_NUMBER)
try {
await runResetPassword({
phone: number,
newPassword: password,
otp
})
resetStates();
setStep(AUTH_STEP.ENTER_NUMBER)
} catch (ex) {
console.error('Password reset failed: ', ex)
}
}
else if (step == AUTH_STEP.ENTER_NEW_PASSWORD) {
try {
+20
View File
@@ -0,0 +1,20 @@
import { useQueryClient } from '@tanstack/react-query'
import { useAuthStore } from '@/zustand/authStore'
import { resetPassword, ResetPasswordRequestModel } from '@/lib/api/auth/reset-password';
export const useResetPassword = () =>
{
const queryClient = useQueryClient()
const run = (model: ResetPasswordRequestModel) =>
queryClient.fetchQuery({
queryKey: ['resetPassword', model],
queryFn: () => resetPassword(model),
}).then(() => {
useAuthStore.getState().logout();
}).catch((ex) => {
throw ex;
})
return { run }
}
+12
View File
@@ -0,0 +1,12 @@
import { api } from "../axiosInstance";
export type ResetPasswordRequestModel = {
phone: string,
otp: string,
newPassword: string,
}
export const resetPassword = async (model: ResetPasswordRequestModel) => {
const res = await api.post('/reset-password', model)
return res.data
}