-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.jsx
110 lines (100 loc) · 3.24 KB
/
App.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import { Route, Routes, useLocation, useNavigate } from "react-router-dom";
import NavigationBar from "./components/NavigationBar";
import NavigationPane from "./components/NavigationPane";
import { LocalizationProvider } from "@mui/x-date-pickers";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { useEffect, useState } from "react";
import Page404 from "./404/Page404";
import SignIn from "./session/SignIn";
import StaticNavigationBar from "./components/StaticNavigationBar";
import { UserContext } from "./context/UserContext";
import { DialogContext } from "./context/DialogContext";
import { axiosInstance } from "./api/axiosConfig";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchInterval: 360000,
},
},
});
function App() {
const navigate = useNavigate();
const location = useLocation();
const [userContextObj, setUserContextObj] = useState({
email: "",
name: "User",
profurl: "https://cdn-icons-png.flaticon.com/512/3177/3177440.png",
role: "NA",
});
const [showDialog, setShowDialog] = useState(null);
useEffect(() => {
const goToSignin = () => navigate("/session/signin");
const runFirst = async () => {
const refreshToken = localStorage.getItem("uhf_jwt_ref");
if (refreshToken) {
try {
const res = await axiosInstance().get("/session/reftoken", {
headers: {
Authorization: `Bearer ${refreshToken}`,
},
});
setUserContextObj(res.data.user_obj);
localStorage.setItem("uhf_jwt", res.data.jwt);
if (location.pathname == "/") navigate("/dashboard/fundraising");
} catch (e) {
goToSignin();
}
} else {
goToSignin();
}
};
runFirst();
}, []);
return (
<QueryClientProvider client={queryClient}>
<LocalizationProvider dateAdapter={AdapterDayjs}>
<UserContext.Provider value={{ userContextObj, setUserContextObj }}>
<DialogContext.Provider value={{ showDialog, setShowDialog }}>
<Routes>
<Route
path="/dashboard/*"
element={
<NavigationBar>
<NavigationPane />
</NavigationBar>
}
/>
<Route
path="/session/*"
element={
<Routes>
<Route
path="/signin"
element={
<StaticNavigationBar>
<SignIn />
</StaticNavigationBar>
}
/>
{/* ... */}
</Routes>
}
/>
<Route
path="*"
element={
<NavigationBar>
<Page404 />
</NavigationBar>
}
/>
<Route path="/" element={<></>} />
</Routes>
</DialogContext.Provider>
</UserContext.Provider>
</LocalizationProvider>
</QueryClientProvider>
);
}
export default App;