import jwtDecode from 'jwt-decode';
import { useEffect } from 'react';
import { Redirect, Switch } from 'react-router-dom';
import { useLazyQuery, useReactiveVar } from '@apollo/client';
import {
ProtectedRoute,
AuthRoute,
Navbar,
Sidebar,
Spinner,
} from './components';
import { roleVar, tokenVar, userVar } from './graphql/state';
import {
AdditionalInfo,
ForgotPassword,
Login,
RecoverAccount,
Signup,
Project,
Users,
Settings,
UserSettings,
CreateUser,
Template,
Feature,
Category,
Prototype,
AddCategory,
AddFeature,
AddTemplate,
CategorySettings,
FeatureSettings,
TemplateSettings,
AddProject,
} 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) {
const { id } = jwtDecode<{ id: string; role: string }>(localStorageToken);
getUserById({ variables: { id } });
tokenVar(localStorageToken);
}
// eslint-disable-next-line
}, []);
return !loading ? (
<>
{token && currentUser?.firstName && (
<>
>
)}
{role !== 'admin' ? (
) : (
)}
>
) : (
);
};
export default App;