Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React from 'react'
import { useNavigate } from 'react-router-dom'
import { useDispatch } from 'react-redux'
import { Avatar, styled, Typography } from '@mui/material'
import {
  VisibilityOutlined,
  MapOutlined,
  ShareOutlined
} from '@mui/icons-material'
import parse from 'html-react-parser'

import { axios } from '@app/utils'
import { addNotification } from '@app/redux/notification/notification.actions'

import Widget from '@components/UI/Widget'
import Options from '@components/UI/Option'

const Row = styled('div')(() => ({
  display: 'flex',
  justifyContent: 'space-around',
  alignItems: 'center'
}))

export default function ProfileInfo({
  image,
  name,
  description,
  visits,
  country,
  connections,
  linkAdmin,
  linkImpersonate
}) {
  const navigate = useNavigate()
  const dispatch = useDispatch()

  const getAdminUrl = async () => {
    try {
      const response = await axios.get('/backend/signin-admin')
      const { data, success } = response.data
      if (!success) throw new Error(data)
      window.open(data)
    } catch (error) {
      dispatch(addNotification({ style: 'danger', msg: error.message }))
    }
  }

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

      <Row>
        <Typography variant='overline'>
          <VisibilityOutlined />
          {visits}
        </Typography>

        <Typography variant='overline'>
          <MapOutlined />
          {country}
        </Typography>

        <Typography variant='overline'>
          <ShareOutlined />
          {connections}
        </Typography>
      </Row>

      <Options>
        {linkAdmin ? (
          <Options.Item onClick={getAdminUrl}>Administración</Options.Item>
        ) : null}

        {linkImpersonate ? (
          <Options.Item onClick={() => navigate('/impersonate')}>
            Personificar otro usuario
          </Options.Item>
        ) : null}

        <Options.Item onClick={() => navigate('/account-settings')}>
          Configuración de la cuenta
        </Options.Item>
        <Options.Item onClick={() => navigate('/privacy-policy')}>
          Política de privacidad
        </Options.Item>
        <Options.Item onClick={() => navigate('/cookies')}>
          Política de cookies
        </Options.Item>
        <Options.Item onClick={() => navigate('/signout')}>
          Cerrar sesión
        </Options.Item>
      </Options>
    </Widget>
  )
}