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 = () => {
>
+ ) : (
+
);
};