Proyectos de Subversion LeadersLinked - SPA

Rev

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

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