Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1507 | Rev 2854 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useRef, useEffect } from 'react'
import { axios } from '../../../utils'
import { Avatar } from '@mui/material'
import { useNavigate } from 'react-router-dom'
import { useDispatch } from 'react-redux'
import { addNotification } from '../../../redux/notification/notification.actions'
import MapOutlinedIcon from '@mui/icons-material/MapOutlined'
import ShareOutlinedIcon from '@mui/icons-material/ShareOutlined'
import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'
import styled from 'styled-components'

import Paraphrase from '../../UI/Paraphrase'
import WidgetWrapper from '../WidgetLayout'
import Options from '../../UI/Option'

const StyledProfileContainer = styled(WidgetWrapper)`
  padding: 10px;
  text-align: center;
`

const StyledProfileStatus = styled.div`
  display: flex;
  align-items: center;
  justify-content: space-around;
`

export default function ProfileInfo({
  image,
  name,
  description,
  visits,
  country,
  connections,
  linkAdmin,
  linkImpersonate
}) {
  const navigate = useNavigate()
  const dispatch = useDispatch()
  const options = useRef([
    {
      label: 'Configuración de la cuenta',
      action: () => navigate('/account-settings')
    },
    {
      label: 'Política de privacidad',
      action: () => navigate('/privacy-policy')
    },
    { label: 'Política de cookies', action: () => navigate('/cookies') },
    { label: 'Cerrar sesión', action: () => navigate('/signout') }
  ])

  const getAdminUrl = () => {
    axios
      .get('/backend/signin-admin')
      .then(({ data: responseData }) => {
        const { data, success } = responseData

        if (!success) {
          throw new Error(data)
        }

        window.open(data)
      })
      .catch((err) => {
        dispatch(addNotification({ style: 'danger', msg: err.message }))
      })
  }

  useEffect(() => {
    if (linkAdmin)
      options.current.unshift({ label: 'Administración', action: getAdminUrl })

    if (linkImpersonate)
      options.current.unshift({
        label: 'Personificar otro usuario',
        action: () => navigate('/impersonate')
      })
  }, [])

  return (
    <StyledProfileContainer>
      <Avatar
        src={image}
        alt={`${name} profile-image`}
        sx={{ margin: '0 auto', width: 100, height: 100 }}
      />
      <h2>{name}</h2>
      <Paraphrase>{description}</Paraphrase>

      <StyledProfileStatus>
        <span>
          <VisibilityOutlinedIcon />
          {visits}
        </span>
        <span>
          <MapOutlinedIcon />
          {country}
        </span>
        <span>
          <ShareOutlinedIcon />
          {connections}
        </span>
      </StyledProfileStatus>

      <Options options={options.current} top='10px' right='10px' />
    </StyledProfileContainer>
  )
}