Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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