Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7380 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useEffect, useRef, useState } from 'react'
import { axios } from '../../../utils'
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'

import useOutsideClick from '../../../hooks/useOutsideClick'
import { Avatar } from '@mui/material'
import { Link } from 'react-router-dom'
import { logout } from '../../../redux/auth/auth.actions'
import { useDispatch } from 'react-redux'
import { addNotification } from '../../../redux/notification/notification.actions'

const UserOptions = ({
  image = '',
  name = '',
  adminUrl = '',
  impersonateUrl = '',
  defaultNetwork = 'y',
  knowledgeAuth,
  routeAdmin = '',
  routeImpersonate = '',
}) => {
  const [userImage, setUserImage] = useState(
    '/storage/type/user/code/f3df3718-37d9-4e4d-bd84-71f7924a858d/'
  )
  const [displayOptions, setDisplayOptions] = useState(false)
  const userDropdownContainer = useRef(null)
  const dispatch = useDispatch()

  useOutsideClick(userDropdownContainer, () => setDisplayOptions(false))

  const checkUserImage = () => {
    const session_image = sessionStorage.getItem('user_session_image')

    if (!session_image) {
      return
    }

    setUserImage(session_image)
    sessionStorage.removeItem('user_session_image')
  }

  const handleDisplay = async (e) => {
    e.preventDefault()
    setDisplayOptions(!displayOptions)
  }

  const getAdminUrl = async (e) => {
    e.preventDefault()
    try {
      const { data } = await axios.get(routeAdmin)
      if (data.success) return window.open(data.data)
    } catch (error) {
      console.log('>>: error > ', error)
    }
  }

  const handleLogout = (e) => {
    e.preventDefault()
    axios
      .get('/signout')
      .then((response) => {
        const { success, data } = response.data
        if (!success) {
          dispatch(
            addNotification({
              style: 'danger',
              msg: 'Error interno. Intente más tarde.',
            })
          )
        }

        if (data.url) {
          window.location.href = data.url
          dispatch(
            addNotification({
              style: 'success',
              msg: data.message,
            })
          )
          return
        }

        dispatch(logout())
      })
      .catch((err) => {
        dispatch(
          addNotification({
            style: 'danger',
            message: 'Error interno. Intente más tarde.',
          })
        )
        throw new Error(err)
      })
  }

  useEffect(() => {
    const timer = setInterval(() => {
      checkUserImage()
    }, 2000)

    return () => {
      clearInterval(timer)
    }
  }, [])

  useEffect(() => {
    setUserImage(image)
  }, [image])

  return (
    <li>
      <a href="#" className="header__option mobile" onClick={handleDisplay}>
        <Avatar src={userImage} alt={`${name} profile image`} />
        <span>
          Me <ArrowDropDownIcon className="user__option-icon" />
        </span>
      </a>
      <div
        className={`user__options-dropdown ${
          displayOptions ? 'fadeIn' : 'fadeOut'
        }`}
        ref={userDropdownContainer}
      >
        <div className="user__options-description">
          <div className="user__options-info">
            <Avatar src={userImage} alt={`${name} profile image`} />
            <h3>{name}</h3>
          </div>
          {/* <a href='#' className='btn__profile'>
                        View profile
                    </a> */}
        </div>
        {(adminUrl || impersonateUrl || knowledgeAuth) && (
          <div className="user__options-item">
            <h3>Admin</h3>
            <ul>
              {adminUrl && (
                <li>
                  <Link to="/admin" onClick={getAdminUrl}>
                    Administración
                  </Link>
                </li>
              )}
              {impersonateUrl && (
                <li>
                  <Link to={routeImpersonate}>Personificar otro usuario</Link>
                </li>
              )}
            </ul>
          </div>
        )}
        <div className="user__options-item">
          <h3>Cuenta</h3>
          <ul>
            <li>
              <Link to="/account-settings">Configuración de la cuenta</Link>
            </li>
            {defaultNetwork === 'y' && (
              <>
                <li>
                  <Link to="/privacy-policy">Política de privacidad</Link>
                </li>
                <li>
                  <Link to="/cookies">Política de cookies</Link>
                </li>
              </>
            )}
          </ul>
        </div>
        <div className="user__options-item">
          <ul>
            <li className="logOutContainer">
              <Link
                className="logOutContainer__a"
                to="/signout"
                onClick={handleLogout}
              >
                Cerrar sesión
              </Link>
            </li>
          </ul>
        </div>
      </div>
    </li>
  )
}

export default UserOptions