Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3201 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { Link } from 'react-router-dom'
3
import { useDispatch } from 'react-redux'
4
import { Avatar, styled, Typography } from '@mui/material'
5
import { ArrowDropDown } from '@mui/icons-material'
6
 
7
import { useOutsideClick } from '@hooks'
8
 
9
import { axios } from '@app/utils'
3267 stevensc 10
import { asyncLogout } from '@app/redux/auth/auth.actions'
3201 stevensc 11
import { addNotification } from '@app/redux/notification/notification.actions'
12
 
13
const NavItem = styled(Link)(({ theme }) => ({
14
  position: 'relative',
15
  display: 'flex',
16
  alignItems: 'center',
17
  padding: theme.spacing(1, 0),
18
  height: '100%'
19
}))
20
 
21
const UserOptions = ({
22
  image = '',
23
  name = '',
24
  adminUrl = '',
25
  impersonateUrl = '',
26
  defaultNetwork = 'y',
27
  knowledgeAuth,
28
  routeAdmin = '',
29
  routeImpersonate = ''
30
}) => {
31
  const [userImage, setUserImage] = useState(
32
    '/storage/type/user/code/f3df3718-37d9-4e4d-bd84-71f7924a858d/'
33
  )
34
  const [displayOptions, setDisplayOptions] = useState(false)
35
  const dispatch = useDispatch()
36
 
37
  const [userDropdownContainer] = useOutsideClick(() =>
38
    setDisplayOptions(false)
39
  )
40
 
41
  const checkUserImage = () => {
42
    const session_image = sessionStorage.getItem('user_session_image')
3267 stevensc 43
    if (!session_image) return
3201 stevensc 44
    setUserImage(session_image)
45
    sessionStorage.removeItem('user_session_image')
46
  }
47
 
48
  const handleDisplay = async (e) => {
49
    e.preventDefault()
50
    setDisplayOptions(!displayOptions)
51
  }
52
 
53
  const getAdminUrl = async (e) => {
54
    e.preventDefault()
55
    try {
56
      const { data } = await axios.get(routeAdmin)
57
      if (data.success) return window.open(data.data)
58
    } catch (error) {
59
      console.log('>>: error > ', error)
60
    }
61
  }
62
 
3267 stevensc 63
  const handleLogout = async (e) => {
3201 stevensc 64
    e.preventDefault()
3267 stevensc 65
    try {
66
      const response = await dispatch(asyncLogout())
67
      dispatch(addNotification({ style: 'success', msg: response.message }))
68
    } catch (error) {
69
      dispatch(addNotification({ style: 'danger', msg: error.message }))
70
    }
3201 stevensc 71
  }
72
 
73
  useEffect(() => {
3267 stevensc 74
    const timer = setInterval(checkUserImage, 2000)
3201 stevensc 75
 
76
    return () => {
77
      clearInterval(timer)
78
    }
79
  }, [])
80
 
81
  useEffect(() => {
82
    setUserImage(image)
83
  }, [image])
84
 
85
  return (
86
    <li ref={userDropdownContainer}>
87
      <NavItem to='/' onClick={handleDisplay}>
88
        <Avatar src={userImage} alt={`${name} profile image`} />
89
 
90
        <ArrowDropDown sx={{ fontSize: '1rem' }} />
91
      </NavItem>
92
 
93
      <div
94
        className={`user__options-dropdown ${
95
          displayOptions ? 'fadeIn' : 'fadeOut'
96
        }`}
97
      >
98
        <div className='user__options-description'>
99
          <div className='user__options-info'>
100
            <Avatar src={userImage} alt={`${name} profile image`} />
101
            <Typography variant='h3'>{name}</Typography>
102
          </div>
103
        </div>
104
        {(adminUrl || impersonateUrl || knowledgeAuth) && (
105
          <div className='user__options-item'>
106
            <Typography variant='h3'>Admin</Typography>
107
            <ul>
108
              {adminUrl && (
109
                <li>
110
                  <Link to='/admin' onClick={getAdminUrl}>
111
                    Administración
112
                  </Link>
113
                </li>
114
              )}
115
              {impersonateUrl && (
116
                <li>
117
                  <Link to={routeImpersonate}>Personificar otro usuario</Link>
118
                </li>
119
              )}
120
            </ul>
121
          </div>
122
        )}
123
        <div className='user__options-item'>
124
          <Typography variant='h3'>Cuenta</Typography>
125
          <ul>
126
            <li>
127
              <Link to='/account-settings'>Configuración de la cuenta</Link>
128
            </li>
129
            <li>
130
              <Link to='/abuse-report'>Reportes</Link>
131
            </li>
132
            {defaultNetwork === 'y' && (
133
              <>
134
                <li>
135
                  <Link to='/privacy-policy'>Política de privacidad</Link>
136
                </li>
137
                <li>
138
                  <Link to='/cookies'>Política de cookies</Link>
139
                </li>
140
              </>
141
            )}
142
          </ul>
143
        </div>
144
        <div className='user__options-item'>
145
          <ul>
146
            <li className='logOutContainer'>
147
              <Link
148
                className='logOutContainer__a'
149
                to='/signout'
150
                onClick={handleLogout}
151
              >
152
                Cerrar sesión
153
              </Link>
154
            </li>
155
          </ul>
156
        </div>
157
      </div>
158
    </li>
159
  )
160
}
161
 
162
export default UserOptions