83 lines
1.9 KiB
JavaScript
83 lines
1.9 KiB
JavaScript
import React, { useEffect } from "react";
|
|
import { HashRouter, Route, Switch, Redirect } from "react-router-dom";
|
|
import ToastContainer from "./Toast/ToastContainer";
|
|
|
|
// components
|
|
import Layout from "./Layout/Layout";
|
|
|
|
// pages
|
|
import Error from "../pages/error";
|
|
import Login from "../pages/login";
|
|
|
|
// context
|
|
import { useUserState } from "../context/UserContext";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
export default function App() {
|
|
var { authenticated, messageCode } = useUserState();
|
|
const { t } = useTranslation();
|
|
|
|
useEffect(() => {
|
|
if (!messageCode) return;
|
|
alert(t(messageCode));
|
|
}, [messageCode, t]);
|
|
|
|
return (
|
|
<HashRouter basename={process.env.PUBLIC_URL || ""}>
|
|
<Switch>
|
|
<Route exact path="/" render={() => <Redirect to="/app/dashboard" />} />
|
|
<Route
|
|
exact
|
|
path="/app"
|
|
render={() => <Redirect to="/app/dashboard" />}
|
|
/>
|
|
<PrivateRoute path="/app" component={Layout} />
|
|
<PublicRoute path="/login" component={Login} />
|
|
<Route component={Error} />
|
|
</Switch>
|
|
<ToastContainer />
|
|
</HashRouter>
|
|
);
|
|
|
|
function PrivateRoute({ component, ...rest }) {
|
|
return (
|
|
<Route
|
|
{...rest}
|
|
render={(props) =>
|
|
authenticated ? (
|
|
React.createElement(component, props)
|
|
) : (
|
|
<Redirect
|
|
to={{
|
|
pathname: "/login",
|
|
state: {
|
|
from: props.location
|
|
}
|
|
}}
|
|
/>
|
|
)
|
|
}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function PublicRoute({ component, ...rest }) {
|
|
return (
|
|
<Route
|
|
{...rest}
|
|
render={(props) =>
|
|
authenticated ? (
|
|
<Redirect
|
|
to={{
|
|
pathname: "/"
|
|
}}
|
|
/>
|
|
) : (
|
|
React.createElement(component, props)
|
|
)
|
|
}
|
|
/>
|
|
);
|
|
}
|
|
}
|