From 09a4a95be4a40918afca9b9234658685455a3525 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Sun, 30 Jul 2023 19:04:32 +0200 Subject: [PATCH] Created the UserContext.jsx --- src/common/contexts/User/UserContext.jsx | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/common/contexts/User/UserContext.jsx diff --git a/src/common/contexts/User/UserContext.jsx b/src/common/contexts/User/UserContext.jsx new file mode 100644 index 0000000..ee02a8a --- /dev/null +++ b/src/common/contexts/User/UserContext.jsx @@ -0,0 +1,46 @@ +import {createContext, useEffect, useState} from "react"; +import Login from "@/states/Login"; +import Loading from "@/states/Loading"; +import {sessionRequest} from "@/common/utils/RequestUtil.js"; + +export const UserContext = createContext({}); + +export const UserProvider = (props) => { + const [user, setUser] = useState({loggedIn: false}); + const [loading, setLoading] = useState(true); + const [sessionToken, setSessionToken] = useState(localStorage.getItem("sessionToken") || null); + + const updateUser = async (token) => { + if (!token && !sessionToken) { + setUser({loggedIn: false}); + return setLoading(false); + } + + try { + setUser({loggedIn: true, ...await sessionRequest("/user/me", "GET", token || sessionToken)}); + setLoading(false); + } catch (e) { + setLoading(false); + setUser({loggedIn: false}); + } + } + + useEffect(() => { + setTimeout(updateUser, 1000); + }, []); + + const updateSessionToken = (token) => { + localStorage.setItem("sessionToken", token); + setSessionToken(token); + updateUser(token); + } + + if (loading) return (); + + return ( + + {!loading && !user.loggedIn && } + {!loading && user.loggedIn && props.children} + + ); +} \ No newline at end of file