From 9595f5adbe3958b5d3302de368cdc97fb135d28d Mon Sep 17 00:00:00 2001 From: alvintran Date: Mon, 23 Jun 2025 22:32:46 -0700 Subject: [PATCH 1/5] add userContext --- src/Components/context/UserContext.js | 7 +++++++ src/Routing.js | 15 +++++++++------ src/index.js | 14 +++++++------- 3 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 src/Components/context/UserContext.js diff --git a/src/Components/context/UserContext.js b/src/Components/context/UserContext.js new file mode 100644 index 000000000..8c9a2cb10 --- /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); +} \ No newline at end of file diff --git a/src/Routing.js b/src/Routing.js index 88955e8cb..24832c617 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,7 @@ export default function Routing({ appProps }) { path={path} appProps={{ allowed: allowedIf, - user: appProps.user, + user: user, redirect, authenticated:userIsAuthenticated, ...appProps @@ -195,7 +198,7 @@ export default function Routing({ appProps }) { exact path={path} render={props => ( - + )} /> ); 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')); From b8d0855eb20fdec70d389690df757a38ad57466e Mon Sep 17 00:00:00 2001 From: alvintran Date: Tue, 24 Jun 2025 10:29:22 -0700 Subject: [PATCH 2/5] eslint fix --- src/Components/context/UserContext.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/context/UserContext.js b/src/Components/context/UserContext.js index 8c9a2cb10..76ab85f10 100644 --- a/src/Components/context/UserContext.js +++ b/src/Components/context/UserContext.js @@ -4,4 +4,4 @@ export const UserContext = createContext(); export function useUser() { return useContext(UserContext); -} \ No newline at end of file +} From 1ddafc7f44b34fbcb9c4e4ffec9cc391aa393208 Mon Sep 17 00:00:00 2001 From: alvintran Date: Tue, 24 Jun 2025 10:46:47 -0700 Subject: [PATCH 3/5] modify test for userContext --- test/frontend/Routing.test.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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( - - - + + + + + ); } From 28ccb49a178d6166ec76bafad82d813afdb92911 Mon Sep 17 00:00:00 2001 From: alvintran Date: Tue, 24 Jun 2025 21:33:54 -0700 Subject: [PATCH 4/5] userContext in NavBarWrapper --- src/Components/Navbar/NavBarWrapper.js | 7 +++++++ src/Routing.js | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Components/Navbar/NavBarWrapper.js b/src/Components/Navbar/NavBarWrapper.js index dcba10351..26f19180a 100755 --- a/src/Components/Navbar/NavBarWrapper.js +++ b/src/Components/Navbar/NavBarWrapper.js @@ -1,14 +1,21 @@ 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(); + + // Test that UserContext is working + console.log('NavBarWrapper - UserContext data:', { user, setUser: typeof setUser }); + function handleLogout() { appProps.setAuthenticated(false); + setUser(null); window.localStorage.removeItem('jwtToken'); window.location.reload(); } diff --git a/src/Routing.js b/src/Routing.js index 24832c617..0d5b1eabf 100644 --- a/src/Routing.js +++ b/src/Routing.js @@ -181,7 +181,6 @@ export default function Routing({ appProps }) { path={path} appProps={{ allowed: allowedIf, - user: user, redirect, authenticated:userIsAuthenticated, ...appProps @@ -198,7 +197,7 @@ export default function Routing({ appProps }) { exact path={path} render={props => ( - + )} /> ); From 8abaaa264c2a69421668a6ee4de48373f66978c0 Mon Sep 17 00:00:00 2001 From: alvintran Date: Tue, 24 Jun 2025 21:37:24 -0700 Subject: [PATCH 5/5] remove consolelog --- src/Components/Navbar/NavBarWrapper.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Components/Navbar/NavBarWrapper.js b/src/Components/Navbar/NavBarWrapper.js index 26f19180a..63701b934 100755 --- a/src/Components/Navbar/NavBarWrapper.js +++ b/src/Components/Navbar/NavBarWrapper.js @@ -10,9 +10,6 @@ function NavBarWrapper({ }) { const { user, setUser } = useUser(); - // Test that UserContext is working - console.log('NavBarWrapper - UserContext data:', { user, setUser: typeof setUser }); - function handleLogout() { appProps.setAuthenticated(false); setUser(null);