diff --git a/src/contexts/auth.tsx b/src/contexts/auth.tsx index 60202f4..0c750fa 100644 --- a/src/contexts/auth.tsx +++ b/src/contexts/auth.tsx @@ -50,12 +50,10 @@ const AuthProvider = ({ children }: AuthProviderProps) => { setData({ token, user }); return true; } catch (err) { - const errorStatus = err.response?.status; - - if (errorStatus === 401) { - setInviteError(err.response?.data.message); - } + const errorData = err.response?.data; + const celebrateError = errorData?.validation?.body?.message; + setInviteError(celebrateError || errorData?.message); return false; } }, []); @@ -72,9 +70,9 @@ const AuthProvider = ({ children }: AuthProviderProps) => { setSignUpSuccess(true); } catch (err) { const errorData = err.response?.data; - const validationError = errorData?.validation?.body?.message; + const celebrateError = errorData?.validation?.body?.message; - setSignUpError(validationError || err.response.validation?.body?.message); + setSignUpError(celebrateError || errorData?.message); setSignUpLoader(false); setSignUpSuccess(false); } @@ -89,9 +87,9 @@ const AuthProvider = ({ children }: AuthProviderProps) => { const inviteUser = useCallback(async ({ name, email, type }) => { setInviteLoader(true); + setInviteError(''); try { - setInviteError(''); const response = await api.post('/invite-users', { name, email, @@ -105,11 +103,10 @@ const AuthProvider = ({ children }: AuthProviderProps) => { JSON.stringify({ name: inviteData.name, email: inviteData.email }), ); } catch (err) { - const errorStatus = err.response?.status; + const errorData = err.response?.data; + const celebrateError = errorData?.validation?.body?.message; - if (errorStatus === 401) { - setInviteError(err.response?.data.message); - } + setInviteError(celebrateError || errorData?.message); } setInviteLoader(false); @@ -117,15 +114,17 @@ const AuthProvider = ({ children }: AuthProviderProps) => { const recoveryPassword = useCallback(async ({ email }) => { setRecoveryLoader(true); + setRecoveryError(''); try { - setRecoveryError(''); - await api.post('/password/forgot', { email, }); } catch (err) { - setRecoveryError(err.response?.data.message); + const errorData = err.response?.data; + const celebrateError = errorData?.validation?.body?.message; + + setRecoveryError(celebrateError || errorData?.message); } setRecoveryLoader(false); @@ -134,22 +133,24 @@ const AuthProvider = ({ children }: AuthProviderProps) => { const resetPassword = useCallback( async ({ email, password, password_confirmation }) => { setResetLoader(true); + setResetError(''); try { - setResetError(''); - await api.post('/password/reset', { email, password, password_confirmation, }); - setResetLoader(false); setResetSuccess(true); } catch (err) { - setResetLoader(false); - setResetError(err.response?.data.validation.body.message); + const errorData = err.response?.data; + const celebrateError = errorData?.validation?.body?.message; + + setResetError(celebrateError || errorData?.message); } + + setResetLoader(false); }, [], ); diff --git a/src/contexts/user.tsx b/src/contexts/user.tsx index 8344481..b1f37ab 100644 --- a/src/contexts/user.tsx +++ b/src/contexts/user.tsx @@ -30,8 +30,11 @@ const UsersProvider = ({ children }: UserProviderProps) => { setUpdateUserInfoLoader(true); try { await api.put('/users/logged', data); - } catch (error) { - setUpdateUserInfoError(error?.response?.data?.validation.body.message); + } catch (err) { + const errorData = err.response?.data; + const celebrateError = errorData?.validation?.body?.message; + + setUpdateUserInfoError(celebrateError || errorData?.message); } setUpdateUserInfoLoader(false); }, []); @@ -41,7 +44,7 @@ const UsersProvider = ({ children }: UserProviderProps) => { await api.patch(`/users/${id}`, { type: userType }); setUpdateUserTypeSuccess(true); } catch (error) { - setUpdateUserTypeSuccess(true); + setUpdateUserTypeSuccess(false); } }, []); @@ -49,8 +52,11 @@ const UsersProvider = ({ children }: UserProviderProps) => { setDeleteUserLoader(true); try { await api.delete(`/users/${id}`); - } catch (error) { - setDeleteUserError(error?.response?.data?.message); + } catch (err) { + const errorData = err.response?.data; + const celebrateError = errorData?.validation?.body?.message; + + setDeleteUserError(celebrateError || errorData?.message); } setDeleteUserLoader(false); }, []); diff --git a/src/services/api.ts b/src/services/api.ts index 8d5bb2b..70a0c8d 100644 --- a/src/services/api.ts +++ b/src/services/api.ts @@ -1,7 +1,20 @@ import axios from 'axios'; import { getUserToken } from './auth'; -const token = getUserToken(); +// eslint-disable-next-line consistent-return +const tryGetUserToken = (count = 1) => { + if (count >= 100) return ''; + + const token = getUserToken(); + + if (token) return token; + + setTimeout(() => { + tryGetUserToken(count + 1); + }, 500 * count); +}; + +const token = tryGetUserToken(); const api = axios.create({ baseURL: 'http://localhost:3333',