aboutsummaryrefslogtreecommitdiffstats
path: root/src/App.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/App.js')
-rw-r--r--src/App.js93
1 files changed, 74 insertions, 19 deletions
diff --git a/src/App.js b/src/App.js
index 3784575..9d9ee58 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,25 +1,80 @@
-import logo from './logo.svg';
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 App() {
+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 (
- <div className="App">
- <header className="App-header">
- <img src={logo} className="App-logo" alt="logo" />
- <p>
- Edit <code>src/App.js</code> and save to reload.
- </p>
- <a
- className="App-link"
- href="https://reactjs.org"
- target="_blank"
- rel="noopener noreferrer"
- >
- Learn React
- </a>
- </header>
- </div>
+ <>
+ <CssBaseline />
+ <CustomThemeProvider>
+ <RouterProvider router={
+ createBrowserRouter(currentRoutes)
+ }/>
+ </CustomThemeProvider>
+ </>
);
}
-export default App;