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); }); };