diff options
author | crupest <crupest@outlook.com> | 2020-10-31 00:42:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-31 00:42:06 +0800 |
commit | 1b80b699e477a0c14a069401cf39126d19668bf0 (patch) | |
tree | 0d1c10cd42398bea87e0169e8a4ec385b71f49bc /FrontEnd/src/app/App.tsx | |
parent | 0062a22423806c9501752132133e14de02355760 (diff) | |
parent | 5875e7a19ff8eb244e2849647ba35aa898de6b52 (diff) | |
download | timeline-1b80b699e477a0c14a069401cf39126d19668bf0.tar.gz timeline-1b80b699e477a0c14a069401cf39126d19668bf0.tar.bz2 timeline-1b80b699e477a0c14a069401cf39126d19668bf0.zip |
Merge pull request #161 from crupest/upgrade
Upgrade packages and split front end and back end.
Diffstat (limited to 'FrontEnd/src/app/App.tsx')
-rw-r--r-- | FrontEnd/src/app/App.tsx | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/FrontEnd/src/app/App.tsx b/FrontEnd/src/app/App.tsx new file mode 100644 index 00000000..4e53d4da --- /dev/null +++ b/FrontEnd/src/app/App.tsx @@ -0,0 +1,83 @@ +import React 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 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 AlertHost from "./views/common/alert/AlertHost"; + +import { dataStorage } from "./services/common"; +import { userService, useRawUser } from "./services/user"; + +const NoMatch: React.FC = () => { + return ( + <> + <AppBar /> + <div style={{ height: 56 }} /> + <div>Ah-oh, 404!</div> + </> + ); +}; + +const LazyAdmin = React.lazy( + () => import(/* webpackChunkName: "admin" */ "./views/admin/Admin") +); + +const App: React.FC = () => { + const [loading, setLoading] = React.useState<boolean>(true); + + const user = useRawUser(); + + React.useEffect(() => { + void userService.checkLoginState(); + void dataStorage.ready().then(() => setLoading(false)); + }, []); + + if (user === undefined || loading) { + return <LoadingPage />; + } else { + return ( + <React.Suspense fallback={<LoadingPage />}> + <Router> + <AppBar /> + <Switch> + <Route exact path="/"> + <Home /> + </Route> + <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> + {user && user.administrator && ( + <Route path="/admin"> + <LazyAdmin user={user} /> + </Route> + )} + <Route> + <NoMatch /> + </Route> + </Switch> + <AlertHost /> + </Router> + </React.Suspense> + ); + } +}; + +export default App; |