Routing.jsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { Route, Redirect, Switch } from 'react-router-dom'
  2. import { CExplorePosts } from '../pages/explorePosts'
  3. import { CPostForFeed, Feed } from '../pages/feedPosts'
  4. import { CPostEditor,CPostCreator } from '../pages/createAndEditPost'
  5. import { CPageAboutUser } from '../pages/profilePage'
  6. import { CPost } from '../pages/onePost'
  7. import { connect } from 'react-redux'
  8. import { LoginPageForm } from '../pages/login'
  9. import { RegisterPageForm } from '../pages/login'
  10. import {CSearchMobileVersion} from '../pages/search'
  11. const Routing = ({ token }) => {
  12. return <>
  13. {token ?
  14. <Switch>
  15. <Route path="/profile/:_id" component={CPageAboutUser} />
  16. <Route path="/explore" component={CExplorePosts} />
  17. <Route path="/edit/post/new" component={CPostCreator} />
  18. <Route path="/edit/post/:_id" component={CPostEditor} />
  19. <Route path="/post/:_id" component={CPost} />
  20. <Route path="/feed" component={CPostForFeed} />
  21. <Route path="/search" component={CSearchMobileVersion} />
  22. <Redirect from="/*" to="/feed" />
  23. </Switch>
  24. :
  25. <Switch>
  26. <Route path="/login" exact component={LoginPageForm} />
  27. <Route path="/register" component={RegisterPageForm} />
  28. <Redirect from="/*" to="/login" />
  29. <CProtectedRoute
  30. roles={['anon']}
  31. fallback="/*"
  32. path="/login"
  33. component={LoginPageForm}
  34. />
  35. </Switch>
  36. }
  37. </>
  38. }
  39. export const CRouting = connect((state) => ({
  40. token: state.auth?.token,
  41. }))(Routing)
  42. const ProtectedRoute = ({
  43. roles = [],
  44. fallback = '/login',
  45. component,
  46. auth,
  47. ...routeProps
  48. }) => {
  49. const WrapperComponent = (renderProps) => {
  50. const C = component
  51. if (!auth) auth = ['anon']
  52. let intersection = auth.filter((x) => roles.includes(x))
  53. if (intersection.length == 0) return <Redirect to={fallback} />
  54. return <C {...renderProps} />
  55. }
  56. return <Route {...routeProps} component={WrapperComponent} />
  57. }
  58. const CProtectedRoute = connect((state) => ({
  59. auth: state.auth?.payload?.sub.acl,
  60. }))(ProtectedRoute)