aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/App.tsx
blob: 6497b0713de3ecc25e0de73172d647b54e61b64a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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 { useUser } 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 = useUser();

  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;