Proyectos de Subversion LeadersLinked - SPA

Rev

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

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