Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2959 | 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 {
  Accordion,
  AccordionDetails,
  AccordionSummary,
  Avatar,
  List,
  ListItem,
  ListItemAvatar,
  ListItemButton,
  ListItemText
} from '@mui/material';
import ExpandMore from '@mui/icons-material/ExpandMore';

import { useFetch } from '@hooks';

import Widget from '@components/UI/Widget';

const GroupsWidget = () => {
  const labels = useSelector(({ intl }) => intl.labels);

  return (
    <Widget>
      <Widget.Body>
        <GroupsWidget.Item url='/helpers/my-groups' title={labels.my_groups} />
        <GroupsWidget.Item url='/helpers/groups-suggestion' title={labels.suggest_groups} />
      </Widget.Body>
    </Widget>
  );
};

const Item = ({ url = '/helpers/my-groups', title = 'Mis grupos' }) => {
  const labels = useSelector(({ intl }) => intl.labels);
  const [lookMore, setLookMore] = useState(false);

  const { data } = useFetch(url, []);

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

  const toggleList = () => setLookMore(!lookMore);

  return (
    <Accordion>
      <AccordionSummary expandIcon={<ExpandMore />}>{title}</AccordionSummary>
      <AccordionDetails>
        <List sx={{ maxHeight: 225, overflow: 'auto' }}>
          {items.map(({ id, name, profile, image }) => (
            <ListItem key={id}>
              <ListItemButton to={profile} LinkComponent={Link}>
                <ListItemAvatar>
                  <Avatar src={image} />
                </ListItemAvatar>

                <ListItemText primary={name} />
              </ListItemButton>
            </ListItem>
          ))}

          {data.length > 3 && (
            <ListItem>
              <ListItemButton onClick={toggleList}>
                <ListItemText
                  sx={{ textAlign: 'center' }}
                  primary={lookMore ? labels.view_less : labels.view_more}
                />
              </ListItemButton>
            </ListItem>
          )}
        </List>
      </AccordionDetails>
    </Accordion>
  );
};

GroupsWidget.Item = Item;

export default GroupsWidget;