aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/app/App.tsx
blob: a4363ff5704210d5c566d05978916f0a47164b7f (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
80
81
82
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;