routes.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { connect } from 'react-redux';
  2. import { Router, Route, Redirect, Switch } from 'react-router-dom';
  3. import history from '../components/history';
  4. import { ConnectMain } from '../pages/main';
  5. import { ConnectLoginForm } from '../components/loginForm';
  6. import { ConnectRegistrationForm } from '../components/registrationForm';
  7. import { ConnectProfileEdit } from '../components/profile';
  8. const PrivateRoute = ({ component, isAuth, log, fallback, ...originalProps }) => {
  9. const PageWrapper = (pageProps) => {
  10. const OriginalPage = component
  11. if (log && !isAuth) {
  12. return <OriginalPage {...pageProps} />
  13. } else if (!isAuth) {
  14. return <Redirect to={fallback} />
  15. } else if (log && isAuth) {
  16. return <Redirect to={fallback} />
  17. } else {
  18. return <OriginalPage {...pageProps} />
  19. }
  20. }
  21. return (
  22. <Route component={PageWrapper} {...originalProps} />
  23. )
  24. }
  25. const ConnectPrivateRoute = connect(state => ({ isAuth: state?.auth?.token }))(PrivateRoute)
  26. const ChatRoutes = () => {
  27. return (
  28. <Router history={history}>
  29. <Switch>
  30. <ConnectPrivateRoute path="/login" component={ConnectLoginForm} log={true} fallback="/chat" exact />
  31. <ConnectPrivateRoute path="/registration" component={ConnectRegistrationForm} log={true} fallback="/chat" exact />
  32. <ConnectPrivateRoute path="/profile" component={ConnectProfileEdit} fallback="/login" />
  33. <ConnectPrivateRoute path="/:_id" component={ConnectMain} fallback="/login" />
  34. <Redirect from="/" to="/chat" />
  35. </Switch>
  36. </Router>
  37. )
  38. }
  39. const ConnectRoutes = connect(state => ({ isAuth: state.auth.token }))(ChatRoutes)
  40. export default ConnectRoutes