App.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React, { useEffect } from 'react';
  2. import './App.css';
  3. import { Router, Switch, Route } from 'react-router-dom';
  4. import { Provider, connect } from "react-redux";
  5. import { socket } from './store';
  6. import { LoginPage } from './pages/LoginPage';
  7. import { RegisterPage } from './pages/RegisterPage';
  8. import { ChatPage } from './pages/ChatPage';
  9. import { OpenChatPage } from './pages/OpenChatPage';
  10. import { ChatInfoPage } from './pages/ChatInfoPage'
  11. import { CreateChatPage } from './pages/CreateChatPage';
  12. import { Header } from './components/Header';
  13. import { PublicHeader } from './components/PublicHeader'
  14. import { PrivateHeader } from './components/PrivateHeader';
  15. import { PageAboutMe } from './pages/AbouteMePage'
  16. import { HomePage } from './pages/HomePage';
  17. import { actionFullLogin, actionAuthLogin } from './store/actions/action-login-promise'
  18. import { actionAuthLogout } from './store/actions/action-logout'
  19. import { actionRegister } from './store/actions/action-register-promise'
  20. import { actionCreateChat } from './store/actions/action-create-chat';
  21. import { actionCreateMessage } from './store/actions/action-create-msg';
  22. import { actionAboutMe } from './store/actions/action-aboutMe';
  23. import { actionSearchUser } from './store/actions/action-search-user';
  24. import store from './store'
  25. import { history } from './history'
  26. const HeaderSwitch = () => {
  27. return (
  28. <Switch>
  29. <Route path="/login" component={PublicHeader} exact />
  30. <Route path="/registration" component={PublicHeader} exact />
  31. <Route path="/chat" component={PrivateHeader} exact />
  32. <Route path="/chat/:id" component={PrivateHeader} exact />
  33. <Route path="/chat/:id/info" component={PrivateHeader} exact />
  34. <Route path="/create-chat" component={PrivateHeader} exact />
  35. <Route path="/about-me" component={PrivateHeader} exact />
  36. <Route path="/" component={PublicHeader} exact />
  37. </Switch>
  38. )
  39. }
  40. const MainSwitch = ({ token }) => {
  41. if (token) {
  42. console.log("сокет")
  43. socket.emit("jwt", token)
  44. }
  45. return (
  46. <>
  47. <Switch>
  48. <div className="App">
  49. <Route path="/login" component={CLoginForm} exact />
  50. <Route path="/registration" component={CRegisterForm} exact />
  51. <Route path="/chat" component={CPageChat} exact />
  52. <Route path="/chat/:id" component={COpenPageChat} exact />
  53. <Route path="/chat/:id/info" component={CPageChatInfo} exact />
  54. <Route path="/create-chat" component={CCreateChat} exact />
  55. <Route path="/about-me" component={CPageAboutMe} exact />
  56. <Route path="/" component={HomePage} exact />
  57. </div>
  58. </Switch>
  59. </>
  60. )
  61. }
  62. const CLoginForm = connect(null, { onLogin: actionFullLogin, outLogin: actionAuthLogout })(LoginPage);
  63. const CRegisterForm = connect(null, { onRegister: actionRegister })(RegisterPage)
  64. const CPageAboutMe = connect(state => ({ userName: state.promise.userData?.payload.login, avatar: state.promise.userData?.payload.avatar, chats: state.promise.userData?.payload.chats }), { getData: actionAboutMe })(PageAboutMe)
  65. const CPageChat = connect(state => ({ chats: state.chat.userData?.payload.chats }), { getData: actionAboutMe })(ChatPage)
  66. const COpenPageChat = connect(state => ({ chats: state.chat.userData?.payload.chats, onCreateMsg: actionCreateMessage }), { getData: actionAboutMe })(OpenChatPage)
  67. const CPageChatInfo = connect(state => ({ chats: state.chat.userData?.payload.chats, us: state.promise.searchUs?.payload?._id, onSearchUser: actionSearchUser }), { getData: actionAboutMe })(ChatInfoPage)
  68. const CCreateChat = connect(null, { onCreate: actionCreateChat })(CreateChatPage)
  69. const CMainSwitch = connect((state) => ({ token: state.auth.token || null }))(
  70. MainSwitch
  71. );
  72. function App() {
  73. useEffect(() => {
  74. if (localStorage.authToken) {
  75. store.dispatch(actionAuthLogin(localStorage.authToken));
  76. }
  77. }, [])
  78. return (
  79. <Provider store={store}>
  80. <Router history={history}>
  81. <HeaderSwitch />
  82. <CMainSwitch />
  83. </Router>
  84. </Provider>
  85. );
  86. }
  87. export default App;