Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useMemo, useState } from 'react'
import { Link } from 'react-router-dom'
import { useSelector } from 'react-redux'
import {
  Avatar,
  Button,
  List,
  ListItem,
  ListItemAvatar,
  ListItemButton,
  ListItemText
} from '@mui/material'

import { useFetch } from '@hooks'
import colors from '@styles/colors'

import Widget from '@components/UI/Widget'
import Spinner from '@components/UI/Spinner'
import EmptySection from '@components/UI/EmptySection'

const SuggestWidget = ({ title, url }) => {
  const { data, isLoading } = useFetch(url, [])
  const [lookMore, setLookMore] = useState(false)
  const labels = useSelector(({ intl }) => intl.labels)

  const items = useMemo(
    () => (lookMore ? data : [...data].slice(0, 3)),
    [lookMore, data]
  )

  return (
    <Widget>
      <Widget.Header
        title={title}
        renderAction={() => {
          if (data.length <= 3) return null

          return (
            <Button onClick={() => setLookMore(!lookMore)}>
              {lookMore ? labels.view_less : labels.view_more}
            </Button>
          )
        }}
      />
      <Widget.Body styles={data.length > 0 && { padding: '0 !important' }}>
        {isLoading && <Spinner />}

        {!isLoading && data.length === 0 ? (
          <EmptySection message={labels?.datatable_empty} />
        ) : (
          <List sx={{ maxHeight: '225px', overflow: 'auto' }}>
            {items.map(({ name, profile, image, id }) => (
              <ListItem
                key={id}
                sx={{ borderTop: `1px solid ${colors.border.primary}` }}
              >
                <ListItemButton LinkComponent={Link} to={profile} disableRipple>
                  <ListItemAvatar>
                    <Avatar src={image} alt={`${name} profile avatar`} />
                  </ListItemAvatar>

                  <ListItemText primary={name} />
                </ListItemButton>
              </ListItem>
            ))}
          </List>
        )}
      </Widget.Body>
    </Widget>
  )
}

export default SuggestWidget