diff options
Diffstat (limited to 'src/App.js')
-rw-r--r-- | src/App.js | 93 |
1 files changed, 74 insertions, 19 deletions
@@ -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; |