Created the UserContext.jsx
This commit is contained in:
parent
b2745099bf
commit
09a4a95be4
46
src/common/contexts/User/UserContext.jsx
Normal file
46
src/common/contexts/User/UserContext.jsx
Normal file
@ -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 (<Loading />);
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={{user, updateUser, updateSessionToken}}>
|
||||
{!loading && !user.loggedIn && <Login />}
|
||||
{!loading && user.loggedIn && props.children}
|
||||
</UserContext.Provider>
|
||||
);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user