Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
4250 stevensc 1
/* eslint-disable react/prop-types */
4678 stevensc 2
import React, { useEffect, useRef, useState } from 'react'
4250 stevensc 3
import Avatar from '../../../shared/Avatar/Avatar'
4251 stevensc 4
import axios from '../../../utils/axios'
6094 stevensc 5
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'
4250 stevensc 6
 
7
const UserOptions = ({
6094 stevensc 8
  image = '',
9
  name = '',
10
  adminUrl = '',
11
  impersonateUrl = '',
12
  defaultNetwork = 'y',
6159 stevensc 13
  routeKnowledge,
14
  knowledgeAuth,
4250 stevensc 15
}) => {
6094 stevensc 16
  const [displayOptions, setDisplayOptions] = useState(false)
17
  const userDropdownContainer = useRef(null)
4251 stevensc 18
 
6094 stevensc 19
  useEffect(() => {
20
    const handleClickOutside = (event) => {
21
      if (
22
        userDropdownContainer?.current &&
23
        !userDropdownContainer?.current?.contains(event.target)
24
      ) {
25
        setDisplayOptions(false)
26
      }
27
    }
28
    document.addEventListener('mousedown', handleClickOutside)
4678 stevensc 29
 
6094 stevensc 30
    return () => {
31
      document.removeEventListener('mousedown', handleClickOutside)
4251 stevensc 32
    }
6094 stevensc 33
  }, [userDropdownContainer])
4251 stevensc 34
 
6094 stevensc 35
  const handleDisplay = async (e) => {
36
    e.preventDefault()
37
    setDisplayOptions(!displayOptions)
38
  }
39
 
40
  const getAdminUrl = async (e) => {
41
    e.preventDefault()
42
    try {
43
      const { data } = await axios.get('/backend/signin-admin')
44
      if (data.success) return window.open(data.data)
45
    } catch (error) {
46
      console.log('>>: error > ', error)
4251 stevensc 47
    }
6094 stevensc 48
  }
4251 stevensc 49
 
6094 stevensc 50
  return (
51
    <li>
52
      <a href="#" className="header__option mobile" onClick={handleDisplay}>
53
        <Avatar imageUrl={image} name={name} size="md" />
54
        <span>
55
          Me <ArrowDropDownIcon className="user__option-icon" />
56
        </span>
57
      </a>
58
      <div
59
        className={`user__options-dropdown ${
60
          displayOptions ? 'fadeIn' : 'fadeOut'
61
        }`}
62
        ref={userDropdownContainer}
63
      >
64
        <div className="user__options-description">
65
          <div className="user__options-info">
66
            <Avatar imageUrl={image} name={name} size="xl" />
67
            <h3>{name}</h3>
68
          </div>
69
          {/* <a href='#' className='btn__profile'>
4257 stevensc 70
                        View profile
4710 stevensc 71
                    </a> */}
6094 stevensc 72
        </div>
73
        {(adminUrl || impersonateUrl) && (
74
          <div className="user__options-item">
75
            <h3>Admin</h3>
76
            <ul>
6159 stevensc 77
              {knowledgeAuth && (
78
                <li>
79
                  <a href={routeKnowledge}>Área de conocimiento</a>
80
                </li>
81
              )}
6094 stevensc 82
              {adminUrl && (
83
                <li>
84
                  <a href="#" onClick={getAdminUrl}>
85
                    Administración
86
                  </a>
87
                </li>
88
              )}
89
              {impersonateUrl && (
90
                <li>
91
                  <a href="/impersonate">Personificar otro usuario</a>
92
                </li>
93
              )}
94
            </ul>
95
          </div>
96
        )}
97
        <div className="user__options-item">
98
          <h3>Cuenta</h3>
99
          <ul>
100
            <li>
101
              <a href="/account-settings" target="secondary">
102
                Configuración de la cuenta
103
              </a>
104
            </li>
105
            {defaultNetwork === 'y' && (
106
              <>
107
                <li>
108
                  <a href="/privacy-policy" target="secondary">
109
                    Política de privacidad
110
                  </a>
111
                </li>
112
                <li>
113
                  <a href="/cookies" target="secondary">
114
                    Política de cookies
115
                  </a>
116
                </li>
117
              </>
118
            )}
119
          </ul>
120
        </div>
121
        <div className="user__options-item">
122
          <ul>
123
            <li className="logOutContainer">
124
              <a className="logOutContainer__a" href="/signout">
125
                Cerrar sesión
126
              </a>
127
            </li>
128
          </ul>
129
        </div>
130
      </div>
131
    </li>
132
  )
4250 stevensc 133
}
134
 
6094 stevensc 135
export default UserOptions