App.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import './App.scss'
  2. import { Provider, connect } from 'react-redux'
  3. import { Router, Route, Link, Redirect, Switch } from 'react-router-dom'
  4. import createHistory from 'history/createBrowserHistory'
  5. import React, { useMemo, useState, useEffect } from 'react'
  6. import { actionAboutUser, actionFullProfilePageUser, store } from './reducers'
  7. import { Basic } from './components/DropZone'
  8. import { CPageAboutUser, PageAboutUser } from './components/User'
  9. import { PageCreatePost, AddPost } from './components/NewPost'
  10. import { CPost, MyCarousel } from './components/Post'
  11. import 'antd/dist/antd.css'
  12. import {actionSetAvatar} from './actions'
  13. import { actionFullProfilePage } from './reducers'
  14. import { Upload, Button, DatePicker, Space, Avatar, Image, Divider, Radio } from 'antd'
  15. import moment from 'moment'
  16. import { UploadOutlined, SearchOutlined } from '@ant-design/icons'
  17. import ImgCrop from 'antd-img-crop'
  18. import { UserOutlined } from '@ant-design/icons'
  19. import user from './materials/user1.png'
  20. import photoNotFound from './materials/photoNotFound.png'
  21. import {CExplorePosts} from './components/Expore'
  22. // import "react-responsive-carousel/lib/styles/carousel.min.css"; // requires a loader
  23. // import { Carousel } from 'react-responsive-carousel';
  24. import { CPostForFeed, Feed } from './components/PostFeed'
  25. import {CPostEditor } from './components/NewPost'
  26. import { CLoginForm,CRegisterForm,InputForm } from './components/LoginRegisterLogout'
  27. import { Header } from './components/Header'
  28. import {actionRemoveDataUser,actionClearDataUserType,actionClearUserData} from './reducers'
  29. console.log(store.getState())
  30. store.subscribe(() => console.log(store.getState()))
  31. console.log('ABOUT ME', store.getState().auth?.payload?.sub?.id)
  32. const OldMain = () =>
  33. <Switch>
  34. <Header />
  35. <Route path="/" exact component={PageMain} />
  36. <Route path="/profile/:_id" component={CPageAboutUser} />
  37. <Route path="/explore" component={CExplorePosts} />
  38. <Route path="/edit/post/:_id" component={CPostEditor} />
  39. <Route path="/post/:_id" component={CPost} />
  40. <Route path="/feed" component={CPostForFeed} />
  41. <CProtectedRoute
  42. roles={['user']}
  43. fallback="/feed"
  44. path="/*"
  45. component={CPostForFeed}
  46. />
  47. </Switch>
  48. const PageMain = () => <div className="PageMain">ГЛАВНАЯ</div>
  49. const Main = ({ _id }) => {
  50. console.log('_id token in app: ', _id)
  51. // console.log('TOKEN ', _id)
  52. console.log('localStorage.getItem: ', localStorage.getItem("authToken"))
  53. return (
  54. (!localStorage.getItem("authToken")&&!_id)
  55. ?
  56. // {
  57. // actionClearDataUserType()
  58. <Switch>
  59. <Route path='/login'
  60. component={CLoginForm} exact />
  61. {/* <Route path='/input'
  62. component={InputForm} /> */}
  63. <Route path='/register'
  64. component={CRegisterForm} />
  65. <CProtectedRoute
  66. roles={['anon']}
  67. fallback="/input"
  68. path="/*"
  69. component={InputForm}
  70. />
  71. {/* <Redirect from='/*' to='/input' /> */}
  72. </Switch >
  73. // }
  74. :
  75. <Switch>
  76. <Header />
  77. <Route path="/" exact component={PageMain} />
  78. <Route path="/profile/:_id" component={CPageAboutUser} />
  79. <Route path="/explore" component={CExplorePosts} />
  80. <Route path="/edit/post/:_id" component={CPostEditor} />
  81. <Route path="/post/:_id" component={CPost} />
  82. <Route path="/feed" component={CPostForFeed} />
  83. <CProtectedRoute
  84. roles={['user']}
  85. fallback="/feed"
  86. path="/*"
  87. component={CPostForFeed}
  88. />
  89. </Switch>
  90. )
  91. }
  92. const CMain = connect((state) => ({
  93. _id: state.auth?.payload?.sub?.id
  94. }))(Main)
  95. const ProtectedRoute = ({
  96. roles = [],
  97. fallback = '/login',
  98. component,
  99. auth,
  100. ...routeProps
  101. }) => {
  102. const WrapperComponent = (renderProps) => {
  103. // console.log('тут шото ', intersection)
  104. const C = component
  105. if (!auth) auth = ['anon']
  106. let intersection = auth.filter((x) => roles.includes(x))
  107. if (intersection.length == 0) return <Redirect to={fallback} />
  108. return <C {...renderProps} />
  109. }
  110. return <Route {...routeProps} component={WrapperComponent} />
  111. }
  112. const PageRegister = () => {
  113. return <div>REGISTER</div>
  114. }
  115. const CProtectedRoute = connect((state) => ({
  116. auth: state.auth?.payload?.sub?.acl,
  117. }))(ProtectedRoute)
  118. export const history = createHistory()
  119. function App() {
  120. if (store.getState().auth?.token) {
  121. history.push('/feed')
  122. console.log('токен', store.getState().auth?.payload?.sub?.id)
  123. store.dispatch(actionFullProfilePage(store.getState().auth?.payload?.sub?.id))
  124. store.dispatch(actionFullProfilePageUser(store.getState().auth?.payload?.sub?.id))
  125. localStorage.authToken = store.getState().auth?.token;
  126. }else {
  127. history.push('/input')
  128. store.dispatch(actionRemoveDataUser())
  129. store.dispatch(actionClearUserData())
  130. store.dispatch(actionClearDataUserType())
  131. }
  132. store.getState().auth.payload?.sub?.id ? <Redirect to="/"/> : <Redirect to="/input"/>
  133. return (
  134. <Router history={history}>
  135. <Provider store={store}>
  136. <div className="App">
  137. <Divider />
  138. <OldMain />
  139. {/*
  140. <CProtectedRoute
  141. roles={['anon']}
  142. fallback="/input"
  143. path="/*"
  144. component={InputForm}
  145. />
  146. <CProtectedRoute
  147. roles={['user']}
  148. fallback="/feed"
  149. path="/*"
  150. component={CPostForFeed}
  151. /> */}
  152. </div>
  153. </Provider>
  154. </Router>
  155. )
  156. }
  157. export default App