aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/App.tsx
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-06-15 18:25:17 +0800
committerGitHub <noreply@github.com>2021-06-15 18:25:17 +0800
commit4645761c2090aeaf8c26789155b342c048f44535 (patch)
tree1aab5ce94549f3f8b3fd1a31c84fb2dd8b6b2511 /FrontEnd/src/App.tsx
parent485ef185153890b7c6ac4ed9798a3f2db80c8845 (diff)
parentb6afd5e8161126522bdfff876f5483fa97e94797 (diff)
downloadtimeline-4645761c2090aeaf8c26789155b342c048f44535.tar.gz
timeline-4645761c2090aeaf8c26789155b342c048f44535.tar.bz2
timeline-4645761c2090aeaf8c26789155b342c048f44535.zip
Merge pull request #620 from crupest/vite
Migrate to vite!
Diffstat (limited to 'FrontEnd/src/App.tsx')
-rw-r--r--FrontEnd/src/App.tsx83
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;