kandimat/redaktions-app/src/App.tsx
2021-06-13 12:55:54 +02:00

69 lines
1.4 KiB
TypeScript

import React from "react";
import "./App.css";
import Main from "./components/Main";
import { Redirect, Route, RouteProps, Switch } from "react-router-dom";
import SignIn from "./components/SignIn";
import SignUp from "./components/SignUp";
import { getJsonWebToken, isLoggedIn } from "./jwt/jwt";
function PrivateRoute({ children, ...rest }: RouteProps) {
return (
<Route
{...rest}
render={({ location }) =>
isLoggedIn() ? (
children
) : (
<Redirect
to={{
pathname: "/login",
state: { from: location },
}}
/>
)
}
/>
);
}
function NotLoggedInOnlyRoute({ children, ...rest }: RouteProps) {
return (
<Route
{...rest}
render={() =>
!isLoggedIn() ? (
children
) : (
<Redirect
to={{
pathname: "/",
}}
/>
)
}
/>
);
}
function App(): React.ReactElement {
const jwt = getJsonWebToken();
return (
<Switch>
<NotLoggedInOnlyRoute path={"/login"}>
<SignIn />
</NotLoggedInOnlyRoute>
<NotLoggedInOnlyRoute path={"/signup"}>
<SignUp />
</NotLoggedInOnlyRoute>
<PrivateRoute>
{jwt && (
<Main userRole={jwt.role} loggedInUserRowId={jwt.person_row_id} />
)}
</PrivateRoute>
</Switch>
);
}
export default App;