diff options
author | crupest <crupest@outlook.com> | 2020-05-30 23:41:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-30 23:41:31 +0800 |
commit | c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b (patch) | |
tree | f76ecd77c99c4136d1ab4771b91a92f1e5ad4a35 /Timeline/ClientApp/src/App.tsx | |
parent | 7e393559d2883a37b1be0c82cccc06bc97c3d102 (diff) | |
parent | 83de798e74323e96e81b8196b04e23ed2bd4efbf (diff) | |
download | timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.gz timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.bz2 timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.zip |
Merge pull request #72 from crupest/merge-frontend
Merge frontend repo into this repo.
Diffstat (limited to 'Timeline/ClientApp/src/App.tsx')
-rw-r--r-- | Timeline/ClientApp/src/App.tsx | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/App.tsx b/Timeline/ClientApp/src/App.tsx new file mode 100644 index 00000000..d3cfbd8a --- /dev/null +++ b/Timeline/ClientApp/src/App.tsx @@ -0,0 +1,84 @@ +import React from 'react'; +import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; +import { hot } from 'react-hot-loader/root'; + +import AppBar from './common/AppBar'; +import LoadingPage from './common/LoadingPage'; +import Home from './home/Home'; +import Login from './user/Login'; +import Settings from './settings/Settings'; +import About from './about/About'; +import User from './user/User'; +import TimelinePage from './timeline/TimelinePage'; +import AlertHost from './common/AlertHost'; + +import { checkUserLoginState, useOptionalUser } from './data/user'; + +const NoMatch: React.FC = () => { + return ( + <> + <AppBar /> + <div style={{ height: 56 }} /> + <div>Ah-oh, 404!</div> + </> + ); +}; + +const LazyAdmin = React.lazy(() => + import(/* webpackChunkName: "admin" */ './admin/Admin') +); + +const App: React.FC = () => { + const user = useOptionalUser(); + + React.useEffect(() => { + checkUserLoginState(); + }, []); + + let body; + if (user === undefined) { + body = <LoadingPage />; + } else { + body = ( + <React.Suspense fallback={<LoadingPage />}> + <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> + </React.Suspense> + ); + } + + return ( + <> + <Router>{body}</Router> + <AlertHost /> + </> + ); +}; + +export default hot(App); |