Proyectos de Subversion LeadersLinked - SPA

Rev

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

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