aboutsummaryrefslogtreecommitdiff
path: root/src/pages/PrivateRoute.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/PrivateRoute.tsx')
-rw-r--r--src/pages/PrivateRoute.tsx36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/pages/PrivateRoute.tsx b/src/pages/PrivateRoute.tsx
new file mode 100644
index 0000000..cdee67b
--- /dev/null
+++ b/src/pages/PrivateRoute.tsx
@@ -0,0 +1,36 @@
+import React from 'react';
+import { Redirect, Route } from 'react-router-dom';
+import { useAuth } from '../hooks/useAuth';
+
+const urls = {
+ home: '/',
+ login: '/login',
+ registration: '/registration',
+ profile: '/profile',
+ feed: '/feed',
+ notifications: '/notifications'
+};
+
+const PrivateRoute: React.FC<any> = ({ component: ProtectedComponent, ...rest }) => {
+ const { isAuthenticated } = useAuth();
+
+ const getComponent: React.FC<any> = (props) => {
+ if (props.match.path === urls.login || props.match.path === urls.registration) {
+ return isAuthenticated() ? (
+ <Redirect to={urls.profile} />
+ ) : (
+ <ProtectedComponent {...props} />
+ );
+ }
+
+ return isAuthenticated() ? (
+ <ProtectedComponent {...props} />
+ ) : (
+ <Redirect to={{ pathname: urls.login, state: { from: props.location } }} />
+ );
+ }
+
+ return <Route {...rest} render={getComponent} />;
+};
+
+export default PrivateRoute;