From 6bcb9a67a250e882e29c528f09e7344445f5c411 Mon Sep 17 00:00:00 2001 From: Hazem Krimi Date: Sun, 2 May 2021 03:57:18 +0100 Subject: [PATCH] Update routing and token retrieval --- src/App.tsx | 64 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index dbfd211..b3a4e85 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,8 +1,15 @@ +import jwtDecode from 'jwt-decode'; import { useEffect } from 'react'; import { Switch } from 'react-router-dom'; -import { useReactiveVar } from '@apollo/client'; -import { ProtectedRoute, AuthRoute, Navbar, Sidebar } from './components'; -import { roleVar, tokenVar } from './graphql/state'; +import { useLazyQuery, useReactiveVar } from '@apollo/client'; +import { + ProtectedRoute, + AuthRoute, + Navbar, + Sidebar, + Spinner, +} from './components'; +import { roleVar, tokenVar, userVar } from './graphql/state'; import { AdditionalInfo, ForgotPassword, @@ -12,23 +19,58 @@ import { Project, Settings, } from './pages'; +import { GetUserByIdQuery, GetUserByIdQueryVariables } from './graphql/types'; +import { GET_USER_BY_ID } from './graphql/auth.api'; const App = () => { const token = useReactiveVar(tokenVar); const role = useReactiveVar(roleVar); + const currentUser = useReactiveVar(userVar); + + const [getUserById, { loading }] = useLazyQuery< + GetUserByIdQuery, + GetUserByIdQueryVariables + >(GET_USER_BY_ID, { + onCompleted({ getUserById: user }) { + userVar(user); + switch (user.role) { + case 'Client': + roleVar('client'); + break; + case 'ProductOwner': + roleVar('productOwner'); + break; + case 'Developer': + roleVar('developer'); + break; + case 'Admin': + roleVar('admin'); + break; + default: + break; + } + }, + }); useEffect(() => { const localStorageToken = localStorage.getItem('token'); - if (localStorageToken) tokenVar(localStorageToken); + if (localStorageToken) { + const { id } = jwtDecode<{ id: string; role: string }>(localStorageToken); + + getUserById({ variables: { id } }); + tokenVar(localStorageToken); + } + + // eslint-disable-next-line }, []); - return ( + return !loading ? ( <> - {token && ( + {token && currentUser?.firstName && ( <> - - {role !== 'admin' && } + + )} @@ -47,9 +89,9 @@ const App = () => { - + - + @@ -58,6 +100,8 @@ const App = () => { + ) : ( + ); };