42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { observer } from "mobx-react-lite";
|
|
import { Redirect } from "react-router-dom";
|
|
|
|
import { Preloader } from "@revoltchat/ui";
|
|
|
|
import { clientController } from "../../controllers/client/ClientController";
|
|
|
|
interface Props {
|
|
auth?: boolean;
|
|
blockRender?: boolean;
|
|
|
|
children: Children;
|
|
}
|
|
|
|
/**
|
|
* Check that we are logged in or out and redirect accordingly.
|
|
* Also prevent render until the client is ready to display.
|
|
*/
|
|
export const CheckAuth = observer((props: Props) => {
|
|
const loggedIn = clientController.isLoggedIn();
|
|
|
|
// Redirect if logged out on authenticated page or vice-versa.
|
|
if (props.auth && !loggedIn) {
|
|
if (props.blockRender) return null;
|
|
return <Redirect to="/login" />;
|
|
} else if (!props.auth && loggedIn) {
|
|
if (props.blockRender) return null;
|
|
return <Redirect to="/" />;
|
|
}
|
|
|
|
// Block render if client is getting ready to work.
|
|
if (
|
|
props.auth &&
|
|
clientController.isLoggedIn() &&
|
|
!clientController.isReady()
|
|
) {
|
|
return <Preloader type="spinner" />;
|
|
}
|
|
|
|
return <>{props.children}</>;
|
|
});
|