123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { lazy, Suspense , useEffect } from 'react';
- import { BrowserRouter, Switch } from 'react-router-dom';
- import { ToastContainer } from 'react-toastify';
- import { useSelector, useDispatch } from 'react-redux';
- import { MuiPickersUtilsProvider } from '@material-ui/pickers';
- import DateFnsUtils from '@date-io/date-fns';
- import s from './App.module.css';
- import { getToken } from './redux/authorization/selector'
- import { getChat } from './redux/chat/selector'
- import { asyncLogout, asyncCurrentUser } from './redux/authorization/operations'
- import { setToken, onlineUser,typingChat } from './api-data'
- import PrivateRoute from './components/reusableComponents/Routes/PrivateRoute';
- import PublicRoute from './components/reusableComponents/Routes/PublicRoute';
- import Load from './components/reusableComponents/Load';
- const HomePage = lazy(
- () =>
- import(
- './components/HomePage' /* webpackChunkName: "HomePage" */
- ),
- );
- const AuthPage = lazy(
- () =>
- import(
- './components/AuthPage' /* webpackChunkName: "AuthPage" */
- ),
- );
- function App() {
- const token = useSelector(getToken)
- const { companionId } = useSelector(getChat)
- const dispatch = useDispatch()
- const handleTypingClose = async () => companionId&& await typingChat(companionId, false)
-
- useEffect(() => {
- if (token && localStorage.isChecked === 'true') {
- setToken.set(token)
- dispatch(asyncCurrentUser())
- }
- }, [dispatch, token])
- useEffect(() => {
- const handleKeepIn = async () => {
- const isChecked = localStorage.isChecked
- if (isChecked&&isChecked === 'false') {
- dispatch(asyncLogout())
- } else if (isChecked&&isChecked === 'true') {
- await onlineUser()
- }
- }
- window.addEventListener("beforeunload",handleKeepIn)
- return () => window.removeEventListener("beforeunload", handleKeepIn)
- }, [dispatch])
- useEffect(() => {
- const handleTypingChat = async () => await typingChat(companionId,false)
- window.addEventListener("beforeunload",handleTypingChat)
- return () => window.removeEventListener("beforeunload", handleTypingChat)
- }, [companionId])
- return (
- <div onMouseLeave={handleTypingClose} className={s.appWrapper}>
- <MuiPickersUtilsProvider utils={DateFnsUtils}>
- <Suspense fallback={<Load/>}>
- <BrowserRouter>
- <Switch>
- <PrivateRoute exact path="/">
- <HomePage/>
- </PrivateRoute>
- <PublicRoute path={'/w/'} restricted>
- <AuthPage />
- </PublicRoute>
- </Switch>
- </BrowserRouter>
- </Suspense>
- <ToastContainer
- position="top-right"
- autoClose={5000}
- hideProgressBar={false}
- newestOnTop={false}
- closeOnClick
- rtl={false}
- pauseOnFocusLoss
- draggable
- pauseOnHover
- />
- </MuiPickersUtilsProvider>
- </div>
- )}
- export default App;
|