Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2803 | Rev 3036 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
2611 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { useDispatch, useSelector } from 'react-redux'
3
 
4
import { axios } from './utils'
2776 stevensc 5
import { useFetch } from '@hooks'
2611 stevensc 6
import { labelsAdapter } from './utils/labels'
7
import { setIntlLabels } from './redux/intl/intl.action'
8
import { logout, setPermissions } from './redux/auth/auth.actions'
9
 
10
import AppRoutes from './routes/routes'
11
import Spinner from './components/UI/Spinner'
12
import ErrorPage from './pages/error/error-page'
13
 
14
import './styles/globals.scss'
15
 
16
export default function App() {
17
  const [loading, setLoading] = useState(true)
18
  const [credentialsError, setCredentialsError] = useState(false)
19
  const { data: labels } = useFetch('/language')
2803 stevensc 20
  const { isAuth } = useSelector(({ auth }) => auth)
2611 stevensc 21
  const dispatch = useDispatch()
22
 
23
  const getCredentials = async () => {
24
    const response = await axios.get('/signin')
25
    const { data, success } = response.data
26
    if (!success) throw new Error(data)
27
    return data
28
  }
29
 
30
  const getUserCredentials = async () => {
31
    setLoading(true)
32
    getCredentials()
33
      .then((credentials) => {
34
        const localAes = window.localStorage.getItem('aes')
35
        const localJwt = window.localStorage.getItem('jwt')
36
        const permissions = structuredClone(credentials)
37
        permissions.isAuth = credentials.is_logged_in
38
 
3034 stevensc 39
        console.log('ON SUCCESS')
40
 
2611 stevensc 41
        if (localAes) {
42
          permissions.aes = localAes
3034 stevensc 43
          console.log('LOCAL AES: ', localAes)
2611 stevensc 44
        } else {
45
          permissions.aes = credentials.aes
46
          window.localStorage.setItem('aes', credentials.aes)
3034 stevensc 47
          console.log('LOCAL AES SETTED')
2611 stevensc 48
        }
49
 
50
        if (localJwt) {
51
          permissions.jwt = localJwt
3034 stevensc 52
          console.log('LOCAL JWT: ', localJwt)
2611 stevensc 53
        } else {
54
          permissions.jwt = credentials.jwt
55
          window.localStorage.setItem('jwt', credentials.jwt)
3034 stevensc 56
          console.log('LOCAL JWT SETTED')
2611 stevensc 57
        }
58
 
59
        dispatch(setPermissions(permissions))
60
      })
61
      .catch((error) => {
3034 stevensc 62
        console.log('ON ERROR')
2611 stevensc 63
        if (error.message.includes('sesión')) {
64
          dispatch(logout())
65
          getUserCredentials()
66
        } else {
67
          setCredentialsError(true)
68
        }
69
      })
70
      .finally(() => setLoading(false))
71
  }
72
 
73
  useEffect(() => {
74
    getUserCredentials()
75
  }, [isAuth])
76
 
77
  useEffect(() => {
78
    dispatch(setIntlLabels(labelsAdapter(labels)))
79
  }, [labels])
80
 
81
  if (loading) {
82
    return <Spinner />
83
  }
84
 
85
  if (credentialsError) {
86
    return <ErrorPage />
87
  }
88
 
2803 stevensc 89
  return <AppRoutes />
2611 stevensc 90
}