diff --git a/client/src/App.js b/client/src/App.js index de25e37..72b22f8 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -1,10 +1,12 @@ import "./App.css"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useContext } from "react"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import axios from "axios"; import { LoadingProvider } from "./components/LoadingContext"; +import { UserProvider, UserContext } from "./components/UserContext"; + import Home from "./components/pages/Home"; import Login from "./components/pages/Login"; import About from "./components/pages/About"; @@ -22,7 +24,7 @@ import Navigation from "./components/Navigation"; import UserNavbar from "./components/UserNavbar"; import Footer from "./components/Footer"; import UserProfile from "./components/pages/UserProfile"; -import { UserProvider } from "./components/UserContext"; + import NotFound from "./components/pages/NotFound"; import PaymentSuccess from "./components/pages/PaymentSuccess"; import { useSelector } from "react-redux"; @@ -32,40 +34,39 @@ import { login } from "./components/actions/authActions"; function App() { const [isUserLoggedIn, setIsUserLoggedIn] = useState(false); + const { setUserData, userData } = useContext(UserContext); // Use setUserData from UserContext const dispatch = useDispatch(); - // useSelector and other code remains the same const isLoggedIn = useSelector((state) => state.auth.isLoggedIn); + useEffect(() => { - const token = localStorage.getItem("token"); - console.log("token: " + token); - if (token) { - fetchUserData(token) - .then((userData) => { - if (userData) { + const fetchUserData = async () => { + const token = localStorage.getItem("token"); + if (token) { + try { + const profileResponse = await axios.get( + `${process.env.REACT_APP_API_PATH}/users/profile`, + { + headers: { + Authorization: `Bearer ${token}`, // Use the token from localStorage + }, + } + ); + + if (profileResponse.data) { + setUserData(profileResponse.data); // Update with actual data dispatch(login()); - setIsUserLoggedIn(true); + setIsUserLoggedIn(true); // Set logged in state to true } - }) - .catch((error) => { + } catch (error) { console.error("Error fetching user data:", error); - }); - } - }, []); - - const fetchUserData = async (token) => { - try { - const response = await axios.get( - `${process.env.REACT_APP_API_PATH}/users/profile`, - { - headers: { Authorization: `Bearer ${token}` }, + // Handle error appropriately } - ); - return response.data; // Assuming the response data is the user data you need - } catch (error) { - console.error("Error in API call:", error); - throw error; // Re-throw the error to handle it in the calling function - } - }; + } + }; + + fetchUserData(); + }, [dispatch, setUserData]); + return ( @@ -84,7 +85,7 @@ function App() { } /> } /> } /> - } /> + } /> } /> diff --git a/client/src/components/UserContext.js b/client/src/components/UserContext.js index b7b8c31..4ebe224 100644 --- a/client/src/components/UserContext.js +++ b/client/src/components/UserContext.js @@ -1,6 +1,9 @@ import React, { createContext, useState } from "react"; -export const UserContext = createContext(); +export const UserContext = React.createContext({ + userData: null, + setUserData: () => {}, +}); export const UserProvider = ({ children }) => { const [userData, setUserData] = useState({}); diff --git a/client/src/components/UserInformationComponent.js b/client/src/components/UserInformationComponent.js index ccbc452..d33812b 100644 --- a/client/src/components/UserInformationComponent.js +++ b/client/src/components/UserInformationComponent.js @@ -4,6 +4,7 @@ import "./css/UserInformationComponent.css"; function UserInformationComponent() { const { userData } = useContext(UserContext); + console.log(userData); return (
@@ -19,7 +20,7 @@ function UserInformationComponent() {

{userData.email || "Email not set"}

-
+