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
|
import "./App.css";
import {
RouterProvider,
createBrowserRouter,
Navigate,
} from "react-router-dom";
import Login from "./pages/Login";
import Surveys from "./pages/Surveys";
import NewSurvey from "./pages/NewSurvey";
import SurveyResults from "./pages/SurveyResults";
import SurveyAssignees from "./pages/SurveyAssignees";
import Users from "./pages/Users";
import NavBar from "./components/NavBar";
import useLoginState from "./hooks/useLoginState";
import CssBaseline from "@mui/material/CssBaseline";
import CustomThemeProvider from "./CustomThemeProvider";
function routes({ login, logout, isLoggedIn }) {
function withNavBar(component) {
const navbarLinks = [
{ label: "Surveys", link: "/surveys" },
{ label: "New Survey", link: "/surveys/new" },
{ label: "Users", link: "/users" },
];
return (
<>
<NavBar isLoggedIn={isLoggedIn} pages={navbarLinks} logout={logout} />
{component}
</>
);
}
if (!isLoggedIn) {
return [
{
path: "*",
element: <Login login={login} />,
},
];
} else {
return [
{
path: "/",
element: <Navigate to={{ pathname: "/surveys" }} />,
},
{
path: "/surveys",
element: withNavBar(<Surveys />),
},
{
path: "/surveys/new",
element: withNavBar(<NewSurvey />),
},
{
path: "/surveys/:surveyId/results",
element: withNavBar(<SurveyResults />),
},
{
path: "/surveys/:surveyId/assignees",
element: withNavBar(<SurveyAssignees />),
},
{
path: "/users",
element: withNavBar(<Users />),
},
];
}
}
export default function App() {
const { login, logout, isLoggedIn } = useLoginState();
const currentRoutes = routes({ isLoggedIn, logout, login });
return (
<>
<CssBaseline />
<CustomThemeProvider>
<RouterProvider router={createBrowserRouter(currentRoutes)} />
</CustomThemeProvider>
</>
);
}
|