-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8dbeae6
commit e2bcdf7
Showing
25 changed files
with
1,076 additions
and
257 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
import { createContext, ReactNode, useEffect, useState } from "react"; | ||
|
||
import { | ||
storageAuthTokenSave, | ||
storageAuthTokenGet, | ||
storageAuthTokenRemove, | ||
} from "@storage/storageAuthToken"; | ||
import { | ||
storageUserGet, | ||
storageUserRemove, | ||
storageUserSave, | ||
} from "@storage/storageUser"; | ||
|
||
import { api } from "@services/http.service"; | ||
import { UserDTO } from "@dtos/UserDTO"; | ||
|
||
export type AuthContextDataProps = { | ||
user: UserDTO; | ||
singIn: (email: string, password: string) => Promise<void>; | ||
updateUserProfile: (userUpdated: UserDTO) => Promise<void>; | ||
signOut: () => Promise<void>; | ||
isLoadingUserStorageData: boolean; | ||
}; | ||
|
||
type AuthContextProviderProps = { | ||
children: ReactNode; | ||
}; | ||
|
||
export const AuthContext = createContext<AuthContextDataProps>( | ||
{} as AuthContextDataProps | ||
); | ||
|
||
export function AuthContextProvider({ children }: AuthContextProviderProps) { | ||
const [user, setUser] = useState<UserDTO>({} as UserDTO); | ||
const [isLoadingUserStorageData, setIsLoadingUserStorageData] = | ||
useState(true); | ||
|
||
async function userAndTokenUpdate(userData: UserDTO, token: string) { | ||
api.defaults.headers.common["Authorization"] = `Bearer ${token}`; | ||
|
||
setUser(userData); | ||
} | ||
|
||
async function storageUserAndTokenSave( | ||
userData: UserDTO, | ||
token: string, | ||
refresh_token: string | ||
) { | ||
try { | ||
setIsLoadingUserStorageData(true); | ||
await storageUserSave(userData); | ||
await storageAuthTokenSave({ token, refresh_token }); | ||
} catch (error) { | ||
throw error; | ||
} finally { | ||
setIsLoadingUserStorageData(false); | ||
} | ||
} | ||
|
||
async function singIn(email: string, password: string) { | ||
try { | ||
const { data } = await api.post("/sessions", { email, password }); | ||
|
||
if (data.user && data.token && data.refresh_token) { | ||
await storageUserAndTokenSave( | ||
data.user, | ||
data.token, | ||
data.refresh_token | ||
); | ||
userAndTokenUpdate(data.user, data.token); | ||
} | ||
} catch (error) { | ||
throw error; | ||
} finally { | ||
setIsLoadingUserStorageData(false); | ||
} | ||
} | ||
|
||
async function signOut() { | ||
try { | ||
setIsLoadingUserStorageData(true); | ||
setUser({} as UserDTO); | ||
await storageUserRemove(); | ||
await storageAuthTokenRemove(); | ||
} catch (error) { | ||
throw error; | ||
} finally { | ||
setIsLoadingUserStorageData(false); | ||
} | ||
} | ||
|
||
async function updateUserProfile(userUpdated: UserDTO) { | ||
try { | ||
setUser(userUpdated); | ||
await storageUserSave(userUpdated); | ||
} catch (error) { | ||
throw error; | ||
} | ||
} | ||
|
||
async function loadUserData() { | ||
try { | ||
setIsLoadingUserStorageData(true); | ||
|
||
const userLogged = await storageUserGet(); | ||
const { token } = await storageAuthTokenGet(); | ||
|
||
if (token && userLogged) { | ||
userAndTokenUpdate(userLogged, token); | ||
} | ||
} catch (error) { | ||
throw error; | ||
} finally { | ||
setIsLoadingUserStorageData(false); | ||
} | ||
} | ||
|
||
useEffect(() => { | ||
loadUserData(); | ||
}, []); | ||
|
||
useEffect(() => { | ||
const subscribe = api.registerInterceptTokenManager(signOut); | ||
|
||
return () => { | ||
subscribe(); | ||
}; | ||
}, [signOut]); | ||
|
||
return ( | ||
<AuthContext.Provider | ||
value={{ | ||
user, | ||
singIn, | ||
signOut, | ||
isLoadingUserStorageData, | ||
updateUserProfile, | ||
}} | ||
> | ||
{children} | ||
</AuthContext.Provider> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
export interface ExerciseDTO { | ||
id: string, | ||
demo: string, | ||
group: string, | ||
name: string, | ||
repetitions: string, | ||
series: number, | ||
thumb: string, | ||
updated_at: string, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import { HistoryDTO } from '@dtos/historyDTO'; | ||
export interface HistoryByDayDTO{ | ||
title: string, | ||
data: HistoryDTO[] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
export interface HistoryDTO { | ||
id: string, | ||
name: string, | ||
group: string, | ||
hour: string, | ||
created_at: string | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
export interface UserDTO { | ||
id: string; | ||
name: string; | ||
email: string; | ||
avatar: string; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { useContext } from "react"; | ||
import { AuthContext } from "@contexts/AuthContext"; | ||
|
||
export function useAuth() { | ||
const context = useContext(AuthContext) | ||
return context | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.