Commit e4ab8dbf by asranov0003

fix: auth loading error and success

parent 916db5f2
...@@ -31,7 +31,9 @@ const Login: React.FC = () => { ...@@ -31,7 +31,9 @@ const Login: React.FC = () => {
} = useForm<ILoginFormData>(); } = useForm<ILoginFormData>();
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { loading, error } = useAppSelector((state: RootState) => state.auth); const { loadingLogin, errorLogin } = useAppSelector(
(state: RootState) => state.auth
);
const onSubmit = async (data: ILoginFormData) => { const onSubmit = async (data: ILoginFormData) => {
try { try {
...@@ -79,9 +81,9 @@ const Login: React.FC = () => { ...@@ -79,9 +81,9 @@ const Login: React.FC = () => {
</p> </p>
</div> </div>
{error && <p className="text-danger text-center">{error}</p>} {errorLogin && <p className="text-danger text-center">{errorLogin}</p>}
<CButton title={`${t("button.continue")}`} isLoading={loading} /> <CButton title={`${t("button.continue")}`} isLoading={loadingLogin} />
</form> </form>
</div> </div>
); );
......
...@@ -23,7 +23,7 @@ const Recover: React.FC = () => { ...@@ -23,7 +23,7 @@ const Recover: React.FC = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const navigate = useNavigate(); const navigate = useNavigate();
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { loading, error, success } = useAppSelector( const { loadingRecover, errorRecover, successRecover } = useAppSelector(
(state: RootState) => state.auth (state: RootState) => state.auth
); );
...@@ -74,10 +74,14 @@ const Recover: React.FC = () => { ...@@ -74,10 +74,14 @@ const Recover: React.FC = () => {
error={errors.repeatPassword?.message as string} error={errors.repeatPassword?.message as string}
/> />
{success && <p className="text-success text-center">{success}</p>} {successRecover && (
{error && <p className="text-danger text-center">{error}</p>} <p className="text-success text-center">{successRecover}</p>
)}
{errorRecover && (
<p className="text-danger text-center">{errorRecover}</p>
)}
<CButton title={`${t("button.continue")}`} isLoading={loading} /> <CButton title={`${t("button.continue")}`} isLoading={loadingRecover} />
</form> </form>
</div> </div>
); );
......
...@@ -31,7 +31,9 @@ const Register: React.FC = () => { ...@@ -31,7 +31,9 @@ const Register: React.FC = () => {
} = useForm<IRegisterFormData>(); } = useForm<IRegisterFormData>();
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { loading, error } = useSelector((state: RootState) => state.auth); const { loadingRegister, errorRegister } = useSelector(
(state: RootState) => state.auth
);
const onSubmit = async (data: IRegisterFormData) => { const onSubmit = async (data: IRegisterFormData) => {
try { try {
...@@ -114,9 +116,14 @@ const Register: React.FC = () => { ...@@ -114,9 +116,14 @@ const Register: React.FC = () => {
)} )}
</div> </div>
{error && <p className="text-danger text-center">{error}</p>} {errorRegister && (
<p className="text-danger text-center">{errorRegister}</p>
)}
<CButton title={`${t("button.continue")}`} isLoading={loading} /> <CButton
title={`${t("button.continue")}`}
isLoading={loadingRegister}
/>
</form> </form>
</div> </div>
); );
......
...@@ -12,9 +12,15 @@ interface IAuthUser { ...@@ -12,9 +12,15 @@ interface IAuthUser {
interface IAuthState { interface IAuthState {
user: IAuthUser | null; user: IAuthUser | null;
loading: boolean; loadingLogin: boolean;
error: string | null; loadingRegister: boolean;
success: boolean | string; loadingRecover: boolean;
errorLogin: string | null;
errorRegister: string | null;
errorRecover: string | null;
successLogin: boolean | string;
successRegister: boolean | string;
successRecover: boolean | string;
} }
interface IResponseError { interface IResponseError {
...@@ -24,9 +30,15 @@ interface IResponseError { ...@@ -24,9 +30,15 @@ interface IResponseError {
const initialState: IAuthState = { const initialState: IAuthState = {
user: null, user: null,
loading: false, loadingLogin: false,
error: null, loadingRegister: false,
success: false, loadingRecover: false,
errorLogin: null,
errorRegister: null,
errorRecover: null,
successLogin: false,
successRegister: false,
successRecover: false,
}; };
export const authLogin = createAsyncThunk< export const authLogin = createAsyncThunk<
...@@ -98,54 +110,53 @@ const authSlice = createSlice({ ...@@ -98,54 +110,53 @@ const authSlice = createSlice({
extraReducers: (builder) => { extraReducers: (builder) => {
builder builder
.addCase(authLogin.pending, (state) => { .addCase(authLogin.pending, (state) => {
state.loading = true; state.loadingLogin = true;
state.error = null;
}) })
.addCase( .addCase(
authLogin.fulfilled, authLogin.fulfilled,
(state, action: PayloadAction<IAuthUser>) => { (state, action: PayloadAction<IAuthUser>) => {
state.loading = false; state.loadingLogin = false;
state.user = action.payload; state.user = action.payload;
state.success = true; state.successLogin = true;
} }
) )
.addCase(authLogin.rejected, (state, action) => { .addCase(authLogin.rejected, (state, action) => {
state.loading = false; state.loadingLogin = false;
state.error = action.payload ?? "Login failed"; state.errorLogin = action.payload ?? "Login failed";
}) })
.addCase(authRegister.pending, (state) => { .addCase(authRegister.pending, (state) => {
state.loading = true; state.loadingRegister = true;
state.error = null; state.errorRegister = null;
}) })
.addCase( .addCase(
authRegister.fulfilled, authRegister.fulfilled,
(state, action: PayloadAction<IAuthUser>) => { (state, action: PayloadAction<IAuthUser>) => {
state.loading = false; state.loadingRegister = false;
state.user = action.payload; state.user = action.payload;
state.success = true; state.successRegister = true;
} }
) )
.addCase(authRegister.rejected, (state, action) => { .addCase(authRegister.rejected, (state, action) => {
state.loading = false; state.loadingRegister = false;
state.error = action.payload ?? "Registration failed"; state.errorRegister = action.payload ?? "Registration failed";
}) })
.addCase(authRecover.pending, (state) => { .addCase(authRecover.pending, (state) => {
state.loading = true; state.loadingRecover = true;
state.error = null; state.errorRecover = null;
}) })
.addCase( .addCase(
authRecover.fulfilled, authRecover.fulfilled,
(state, action: PayloadAction<IAuthUser>) => { (state, action: PayloadAction<IAuthUser>) => {
state.loading = false; state.loadingRecover = false;
state.user = action.payload; state.user = action.payload;
state.success = "Confirmation code sent to email"; state.successRecover = "Confirmation code sent to email";
} }
) )
.addCase(authRecover.rejected, (state, action) => { .addCase(authRecover.rejected, (state, action) => {
state.loading = false; state.loadingRecover = false;
state.error = action.payload ?? "Recovery failed"; state.errorRecover = action.payload ?? "Recovery failed";
}); });
}, },
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment