diff --git a/src/Components/Navbar/NavBarWrapper.js b/src/Components/Navbar/NavBarWrapper.js index dcba10351..63701b934 100755 --- a/src/Components/Navbar/NavBarWrapper.js +++ b/src/Components/Navbar/NavBarWrapper.js @@ -1,14 +1,18 @@ import React from 'react'; import UserNavbar from './UserNavbar'; import AdminNavbar from './AdminNavbar'; +import { useUser } from '../context/UserContext'; function NavBarWrapper({ enableAdminNavbar = false, component: Component, ...appProps }) { + const { user, setUser } = useUser(); + function handleLogout() { appProps.setAuthenticated(false); + setUser(null); window.localStorage.removeItem('jwtToken'); window.location.reload(); } diff --git a/src/Components/context/UserContext.js b/src/Components/context/UserContext.js new file mode 100644 index 000000000..76ab85f10 --- /dev/null +++ b/src/Components/context/UserContext.js @@ -0,0 +1,7 @@ +import React, { createContext, useContext } from 'react'; + +export const UserContext = createContext(); + +export function useUser() { + return useContext(UserContext); +} diff --git a/src/Routing.js b/src/Routing.js index 88955e8cb..0d5b1eabf 100644 --- a/src/Routing.js +++ b/src/Routing.js @@ -32,16 +32,19 @@ import Messaging from './Pages/Messaging/Messaging.js'; import CardReader from './Pages/CardReader/CardReader.js'; +import { useUser } from './Components/context/UserContext'; + export default function Routing({ appProps }) { + const { user, setUser } = useUser(); const userIsAuthenticated = appProps.authenticated; const userIsMember = userIsAuthenticated && - appProps.user && - appProps.user.accessLevel === membershipState.MEMBER; + user && + user.accessLevel === membershipState.MEMBER; const userIsOfficerOrAdmin = userIsAuthenticated && - appProps.user && - appProps.user.accessLevel >= membershipState.OFFICER; + user && + user.accessLevel >= membershipState.OFFICER; const signedInRoutes = [ // new for Overview { @@ -178,7 +181,6 @@ export default function Routing({ appProps }) { path={path} appProps={{ allowed: allowedIf, - user: appProps.user, redirect, authenticated:userIsAuthenticated, ...appProps diff --git a/src/index.js b/src/index.js index 1d4b70248..3c6741005 100755 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,11 @@ import React, { useEffect, useState } from 'react'; import ReactDOM from 'react-dom'; -import { withRouter, BrowserRouter } from 'react-router-dom'; +import { BrowserRouter } from 'react-router-dom'; import './index.css'; import Routing from './Routing'; import { checkIfUserIsSignedIn } from './APIFunctions/Auth'; - +import { UserContext } from './Components/context/UserContext'; function App(props) { const [authenticated, setAuthenticated] = useState(false); @@ -27,13 +27,13 @@ function App(props) { return ( !isAuthenticating && ( - - - + + + + + ) ); } -export default withRouter(App); - ReactDOM.render(, document.getElementById('root')); diff --git a/test/frontend/Routing.test.js b/test/frontend/Routing.test.js index 90e4887aa..7636589d0 100644 --- a/test/frontend/Routing.test.js +++ b/test/frontend/Routing.test.js @@ -3,6 +3,7 @@ import React from 'react'; import Enzyme, { mount } from 'enzyme'; import { expect } from 'chai'; import Adapter from '@cfaester/enzyme-adapter-react-18'; +import { UserContext } from '../../src/Components/context/UserContext'; import Routing from '../../src/Routing'; import Home from '../../src/Pages/Home/Home'; @@ -38,10 +39,17 @@ if (typeof SVGElement === 'undefined') { global.SVGElement = class SVGElement extends HTMLElement {}; } function getComponentFromRoute(route, props = adminAppProps) { + const mockUserContext = { + user: props.user, + setUser: () => {} + }; + return mount( - - - + + + + + ); }