Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3694 stevensc 1
import React, { useMemo, useState } from 'react';
2
import { Link } from 'react-router-dom';
3
import { useSelector } from 'react-redux';
2947 stevensc 4
import {
5
  Accordion,
6
  AccordionDetails,
7
  AccordionSummary,
8
  Avatar,
9
  List,
2952 stevensc 10
  ListItem,
2947 stevensc 11
  ListItemAvatar,
12
  ListItemButton,
13
  ListItemText
3694 stevensc 14
} from '@mui/material';
15
import ExpandMore from '@mui/icons-material/ExpandMore';
5 stevensc 16
 
3694 stevensc 17
import { useFetch } from '@hooks';
5 stevensc 18
 
3694 stevensc 19
import Widget from '@components/UI/Widget';
853 stevensc 20
 
1774 stevensc 21
const GroupsWidget = () => {
3694 stevensc 22
  const labels = useSelector(({ intl }) => intl.labels);
5 stevensc 23
 
24
  return (
2921 stevensc 25
    <Widget>
26
      <Widget.Body>
27
        <GroupsWidget.Item url='/helpers/my-groups' title={labels.my_groups} />
3694 stevensc 28
        <GroupsWidget.Item url='/helpers/groups-suggestion' title={labels.suggest_groups} />
2921 stevensc 29
      </Widget.Body>
30
    </Widget>
3694 stevensc 31
  );
32
};
5 stevensc 33
 
2922 stevensc 34
const Item = ({ url = '/helpers/my-groups', title = 'Mis grupos' }) => {
3694 stevensc 35
  const labels = useSelector(({ intl }) => intl.labels);
36
  const [lookMore, setLookMore] = useState(false);
5 stevensc 37
 
3694 stevensc 38
  const { data } = useFetch(url, []);
5 stevensc 39
 
3694 stevensc 40
  const items = useMemo(() => (lookMore ? data : data.slice(0, 3)), [lookMore, data]);
2942 stevensc 41
 
3694 stevensc 42
  const toggleList = () => setLookMore(!lookMore);
2953 stevensc 43
 
5 stevensc 44
  return (
2947 stevensc 45
    <Accordion>
46
      <AccordionSummary expandIcon={<ExpandMore />}>{title}</AccordionSummary>
47
      <AccordionDetails>
2959 stevensc 48
        <List sx={{ maxHeight: 225, overflow: 'auto' }}>
2947 stevensc 49
          {items.map(({ id, name, profile, image }) => (
2952 stevensc 50
            <ListItem key={id}>
51
              <ListItemButton to={profile} LinkComponent={Link}>
52
                <ListItemAvatar>
53
                  <Avatar src={image} />
54
                </ListItemAvatar>
2942 stevensc 55
 
2952 stevensc 56
                <ListItemText primary={name} />
57
              </ListItemButton>
58
            </ListItem>
2947 stevensc 59
          ))}
5 stevensc 60
 
2947 stevensc 61
          {data.length > 3 && (
2952 stevensc 62
            <ListItem>
2957 stevensc 63
              <ListItemButton onClick={toggleList}>
2956 stevensc 64
                <ListItemText
2957 stevensc 65
                  sx={{ textAlign: 'center' }}
2956 stevensc 66
                  primary={lookMore ? labels.view_less : labels.view_more}
67
                />
2952 stevensc 68
              </ListItemButton>
69
            </ListItem>
2947 stevensc 70
          )}
71
        </List>
72
      </AccordionDetails>
73
    </Accordion>
3694 stevensc 74
  );
75
};
5 stevensc 76
 
3694 stevensc 77
GroupsWidget.Item = Item;
5 stevensc 78
 
3694 stevensc 79
export default GroupsWidget;