diff options
author | crupest <crupest@outlook.com> | 2021-06-15 14:14:28 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-06-15 14:14:28 +0800 |
commit | 47587812b809fee2a95c76266d9d0e42fc4ac1ca (patch) | |
tree | bfaa7320c838e21edf88b5a037263f89a8012222 /FrontEnd/src/App.tsx | |
parent | da26373c7fc13cded47428b27638b349b0432437 (diff) | |
download | timeline-47587812b809fee2a95c76266d9d0e42fc4ac1ca.tar.gz timeline-47587812b809fee2a95c76266d9d0e42fc4ac1ca.tar.bz2 timeline-47587812b809fee2a95c76266d9d0e42fc4ac1ca.zip |
...
Diffstat (limited to 'FrontEnd/src/App.tsx')
-rw-r--r-- | FrontEnd/src/App.tsx | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/FrontEnd/src/App.tsx b/FrontEnd/src/App.tsx new file mode 100644 index 00000000..a4363ff5 --- /dev/null +++ b/FrontEnd/src/App.tsx @@ -0,0 +1,83 @@ +import React, { ReactElement } from "react"; +import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; + +import AppBar from "./views/common/AppBar"; +import LoadingPage from "./views/common/LoadingPage"; +import Center from "./views/center"; +import Home from "./views/home"; +import Login from "./views/login"; +import Settings from "./views/settings"; +import About from "./views/about"; +import User from "./views/user"; +import TimelinePage from "./views/timeline"; +import Search from "./views/search"; +import AlertHost from "./views/common/alert/AlertHost"; + +import { useRawUser } from "./services/user"; + +const NoMatch: React.FC = () => { + return <div>Ah-oh, 404!</div>; +}; + +const LazyAdmin = React.lazy( + () => import(/* webpackChunkName: "admin" */ "./views/admin/Admin") +); + +function App(): ReactElement | null { + const user = useRawUser(); + + if (user === undefined) { + return <LoadingPage />; + } else { + return ( + <React.Suspense fallback={<LoadingPage />}> + <Router> + <AppBar /> + <div style={{ height: 56 }} /> + <Switch> + <Route exact path="/"> + {user == null ? <Home /> : <Center />} + </Route> + <Route exact path="/home"> + <Home /> + </Route> + {user != null ? ( + <Route exact path="/center"> + <Center /> + </Route> + ) : null} + <Route exact path="/login"> + <Login /> + </Route> + <Route path="/settings"> + <Settings /> + </Route> + <Route path="/about"> + <About /> + </Route> + <Route path="/timelines/:name"> + <TimelinePage /> + </Route> + <Route path="/users/:username"> + <User /> + </Route> + <Route path="/search"> + <Search /> + </Route> + {user && user.hasAdministrationPermission && ( + <Route path="/admin"> + <LazyAdmin user={user} /> + </Route> + )} + <Route> + <NoMatch /> + </Route> + </Switch> + <AlertHost /> + </Router> + </React.Suspense> + ); + } +} + +export default App; |