Created the TokenContext.jsx
This commit is contained in:
parent
64e58f0616
commit
bfdfbaa984
37
webui/src/common/contexts/Token/TokenContext.jsx
Normal file
37
webui/src/common/contexts/Token/TokenContext.jsx
Normal file
@ -0,0 +1,37 @@
|
||||
import {useState, createContext, useEffect} from "react";
|
||||
import {request} from "@/common/utils/RequestUtil.js";
|
||||
import {Alert, Snackbar} from "@mui/material";
|
||||
import {t} from "i18next";
|
||||
|
||||
export const TokenContext = createContext({});
|
||||
|
||||
export const TokenProvider = (props) => {
|
||||
const [tokenValid, setTokenValid] = useState(null);
|
||||
const [serverOnline, setServerOnline] = useState(null);
|
||||
|
||||
const checkToken = () => request("ping").then((r) => {
|
||||
if (!r.ok && !(r.status === 400 || r.status === 401)) throw new Error("Server unavailable");
|
||||
setTokenValid(r.status === 200);
|
||||
setServerOnline(true);
|
||||
return r.status === 200;
|
||||
}).catch(() => {
|
||||
setServerOnline(false);
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
checkToken();
|
||||
const interval = setInterval(() => checkToken(), 10000);
|
||||
return () => clearInterval(interval);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<TokenContext.Provider value={{tokenValid, checkToken, serverOnline}}>
|
||||
<Snackbar open={serverOnline === false && tokenValid !== null}>
|
||||
<Alert severity="error" sx={{width: "100%"}}>
|
||||
{t("info.server_unavailable")}
|
||||
</Alert>
|
||||
</Snackbar>
|
||||
{props.children}
|
||||
</TokenContext.Provider>
|
||||
)
|
||||
}
|
Reference in New Issue
Block a user