diff --git a/frontend/src/App.js b/frontend/src/App.js
index e77fd2e..7a5767a 100644
--- a/frontend/src/App.js
+++ b/frontend/src/App.js
@@ -2,12 +2,15 @@ import "./App.css";
import { Route } from "wouter";
import HomePage from "./pages/HomePage";
import LoginPage from "./pages/LoginPage";
+import { UserContextProvider } from "./contexts/UserContext";
function App() {
return (
-
-
+
+
+
+
);
}
diff --git a/frontend/src/components/MyNavbar.jsx b/frontend/src/components/MyNavbar.jsx
index f2f3d9f..1cd46ff 100644
--- a/frontend/src/components/MyNavbar.jsx
+++ b/frontend/src/components/MyNavbar.jsx
@@ -1,6 +1,9 @@
+import { useContext } from "react";
import { Nav, Container, Navbar } from "react-bootstrap";
+import UserContext from "../contexts/UserContext";
const MyNavbar = () => {
+ const { currentUser } = useContext(UserContext);
return (
@@ -9,7 +12,9 @@ const MyNavbar = () => {
diff --git a/frontend/src/contexts/UserContext.jsx b/frontend/src/contexts/UserContext.jsx
new file mode 100644
index 0000000..c0b3a97
--- /dev/null
+++ b/frontend/src/contexts/UserContext.jsx
@@ -0,0 +1,30 @@
+import { createContext, useMemo, useState } from "react";
+
+const UserContext = createContext({});
+
+const UserContextProvider = ({ children }) => {
+
+ const [currentUser, setCurrentUser] = useState(undefined);
+
+ // useMemo does not wait for after render, like useEffect.
+ useMemo(()=>{
+ setCurrentUser(JSON.parse(localStorage.getItem("currentUser")));
+ },[]);
+
+ const contextValues = {
+ currentUser,
+ setCurrentUser: (data) => {
+ localStorage.setItem("currentUser", JSON.stringify(data))
+ setCurrentUser(data);
+ },
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export default UserContext;
+export { UserContextProvider };
diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx
index f016608..ebc5b5d 100644
--- a/frontend/src/pages/HomePage.jsx
+++ b/frontend/src/pages/HomePage.jsx
@@ -1,16 +1,17 @@
-import { useEffect } from "react";
+import { useContext, useEffect } from "react";
import { Container } from "react-bootstrap";
import MyNavbar from "../components/MyNavbar";
+import UserContext from "../contexts/UserContext";
const HomePage = () => {
- {/*{current_user} = use context*/}
- const current_user = null;
+ const { currentUser } = useContext(UserContext);
+
+ useEffect(() => {
+ if (!currentUser?.id) {
+ window.location.replace("/login");
+ }
+ }, [currentUser]);
- useEffect(()=>{
- if (!current_user) {
- window.location.replace("/login");
- }
- }, []);
return (
diff --git a/frontend/src/pages/LoginPage.jsx b/frontend/src/pages/LoginPage.jsx
index 220eb56..21ef318 100644
--- a/frontend/src/pages/LoginPage.jsx
+++ b/frontend/src/pages/LoginPage.jsx
@@ -1,6 +1,7 @@
-import React, { useState } from "react";
+import React, { useContext, useEffect, useState } from "react";
import { Button, Col, Container, Form, Row, Alert } from "react-bootstrap";
import MyNavbar from "../components/MyNavbar";
+import UserContext from "../contexts/UserContext";
import { makeRequest } from "../utils.ts";
const LoginPage = () => {
@@ -8,6 +9,19 @@ const LoginPage = () => {
const [password, setPassword] = useState("");
const [error, setError] = useState(null);
+ const { currentUser, setCurrentUser } = useContext(UserContext);
+
+ useEffect(() => {
+ console.log(currentUser);
+ if (currentUser?.id) {
+ gotoHome();
+ }
+ }, [currentUser]);
+
+ const gotoHome = () => {
+ window.location.href = "/";
+ };
+
const sendLoginRequest = async (e) => {
e?.preventDefault();
await makeRequest({
@@ -21,8 +35,7 @@ const LoginPage = () => {
setError(data);
return;
}
- console.log(data);
- window.location.href = "/";
+ setCurrentUser(data);
});
};