Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3432 stevensc 1
import React, { useMemo, useState } from 'react'
2
import { Link } from 'react-router-dom'
3
import { useSelector } from 'react-redux'
3025 stevensc 4
import {
5
  Avatar,
6
  Button,
7
  List,
8
  ListItem,
9
  ListItemAvatar,
10
  ListItemButton,
3432 stevensc 11
  ListItemText
12
} from '@mui/material'
3027 stevensc 13
 
3432 stevensc 14
import { useFetch } from '@hooks'
15
import colors from '@styles/colors'
5 stevensc 16
 
3432 stevensc 17
import Widget from '@components/UI/Widget'
18
import Spinner from '@components/UI/Spinner'
19
import EmptySection from '@components/UI/EmptySection'
3027 stevensc 20
 
3025 stevensc 21
const SuggestWidget = ({ title, url }) => {
3432 stevensc 22
  const { data, isLoading } = useFetch(url, [])
23
  const [lookMore, setLookMore] = useState(false)
24
  const labels = useSelector(({ intl }) => intl.labels)
5 stevensc 25
 
958 stevensc 26
  const items = useMemo(
27
    () => (lookMore ? data : [...data].slice(0, 3)),
959 stevensc 28
    [lookMore, data]
3432 stevensc 29
  )
958 stevensc 30
 
3025 stevensc 31
  return (
32
    <Widget>
33
      <Widget.Header
34
        title={title}
35
        renderAction={() => {
3432 stevensc 36
          if (data.length <= 3) return null
959 stevensc 37
 
3025 stevensc 38
          return (
39
            <Button onClick={() => setLookMore(!lookMore)}>
40
              {lookMore ? labels.view_less : labels.view_more}
41
            </Button>
3432 stevensc 42
          )
3025 stevensc 43
        }}
44
      />
3432 stevensc 45
      <Widget.Body styles={data.length > 0 && { padding: '0 !important' }}>
46
        {isLoading && <Spinner />}
5 stevensc 47
 
3432 stevensc 48
        {!isLoading && data.length === 0 ? (
3025 stevensc 49
          <EmptySection message={labels?.datatable_empty} />
50
        ) : (
3432 stevensc 51
          <List sx={{ maxHeight: '225px', overflow: 'auto' }}>
3025 stevensc 52
            {items.map(({ name, profile, image, id }) => (
3026 stevensc 53
              <ListItem
54
                key={id}
55
                sx={{ borderTop: `1px solid ${colors.border.primary}` }}
56
              >
3025 stevensc 57
                <ListItemButton LinkComponent={Link} to={profile} disableRipple>
58
                  <ListItemAvatar>
59
                    <Avatar src={image} alt={`${name} profile avatar`} />
60
                  </ListItemAvatar>
949 stevensc 61
 
3025 stevensc 62
                  <ListItemText primary={name} />
63
                </ListItemButton>
64
              </ListItem>
65
            ))}
66
          </List>
960 stevensc 67
        )}
3025 stevensc 68
      </Widget.Body>
69
    </Widget>
3432 stevensc 70
  )
71
}
5 stevensc 72
 
3432 stevensc 73
export default SuggestWidget