Commit 6ca99d4b authored by Alex Segers's avatar Alex Segers

[AFP-97] Create AuthContext & useGoogleAuth to handle authenticaion state (@asegers)

parent 3bf03c1f
import React from 'react'
import { useGoogleLogin, useGoogleLogout } from 'react-google-login'
import { useHistory } from 'react-router-dom'
import { Manager } from 'Manager'
const GoogleAuthContext = React.createContext<any>({});
export const useGoogleAuth = () => React.useContext(GoogleAuthContext);
export default useGoogleAuth;
export const GoogleAuthProvider: React.FC = ({ children }) => {
const {push: historyPush} = useHistory();
const [isSignedIn, setIsSignedIn] = React.useState(false)
const [staySignedIn, setStaySignedIn] = React.useState(true)
const [manager, setManager] = React.useState<Manager | null>()
const [authError, setAuthError] = React.useState<String | null>()
const { signIn, loaded, } = useGoogleLogin({
clientId: (process.env.REACT_APP_GOOGLE_CLIENT_ID as string),
onSuccess: (res: any) => {
const {
email,
familyName: lastName,
givenName:firstName,
googleId,
imageUrl
} = res.profileObj;
setManager(({
email,
firstName,
lastName,
googleId,
imageUrl
}))
// ManagerService.existByEmail(email) // GET api/managers/[email]
// .then((exists: boolean) => {
// if (exists) {
// ManagerService.isLoggedin(email)
// } else {
// ManagerService.create([managerData])
// }
// }).finally(() => {
setIsSignedIn(true);
historyPush("/orders");
// })
},
onFailure: (err) => {
console.error("GOOGLE AUTH SIGN-IN ERROR: ", err)
setAuthError(`Ooops. Something went wrong: ${err?.message}`);
},
isSignedIn: staySignedIn,
cookiePolicy: 'single_host_origin'
})
const { signOut } = useGoogleLogout({
clientId: (process.env.REACT_APP_GOOGLE_CLIENT_ID as string),
onLogoutSuccess: () => {
setIsSignedIn(false);
historyPush("/")
},
onFailure: () => {
console.error("A GOOGLE AUTH SIGN-OUT ERROR OCCURED")
setAuthError("Ooops. Something went wrong");
},
})
const authContextValues = {
authError,
isSignedIn,
loaded,
setStaySignedIn,
signIn,
signOut,
staySignedIn,
manager
};
return <GoogleAuthContext.Provider value={authContextValues}>{children}</GoogleAuthContext.Provider>
}
import { import { BrowserRouter, Switch } from "react-router-dom";
BrowserRouter,
Switch,
Route,
} from "react-router-dom";
import {Nav} from 'components'
import { Nav } from 'components'
import { AccountPage, AuthPage, OrderIndexPage, OrderShowPage } from 'pages'; import { AccountPage, AuthPage, OrderIndexPage, OrderShowPage } from 'pages';
import { GoogleAuthProvider } from 'hooks'
import { PublicRoute, PrivateRoute } from 'router'
const MainRouter: React.FC = () => { const MainRouter: React.FC = () => {
return ( return (
<BrowserRouter> <BrowserRouter>
<Nav /> <GoogleAuthProvider>
<Switch> <Nav />
<Route path="/account" component={AccountPage} /> <main>
<Route exact path="/" component={AuthPage} /> <Switch>
<Route path="/orders/:id" component={OrderShowPage} /> <PrivateRoute path="/account" component={AccountPage} />
<Route path="/orders" component={OrderIndexPage} /> <PublicRoute exact path="/" component={AuthPage} />
{/* <Route component={NotFoundPage} /> */} <PrivateRoute path="/orders/:id" component={OrderShowPage} />
</Switch> <PrivateRoute path="/orders" component={OrderIndexPage} />
{/* <Route component={NotFoundPage} /> */}
</Switch>
</main>
</GoogleAuthProvider>
</BrowserRouter> </BrowserRouter>
) )
} }
......
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