Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
5 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { useSelector } from 'react-redux'
2921 stevensc 3
import { IconButton, styled } from '@mui/material'
4
import { ExpandLess, ExpandMore } from '@mui/icons-material'
5 stevensc 5
 
2921 stevensc 6
import { axios } from '@utils'
5 stevensc 7
 
2921 stevensc 8
import Widget from '@components/UI/Widget'
9
import List from '@components/UI/List'
853 stevensc 10
 
2921 stevensc 11
const HelperItem = styled('div')`
853 stevensc 12
  cursor: pointer;
13
  display: flex;
14
  align-items: center;
15
  justify-content: space-between;
16
  width: 100%;
17
`
18
 
1774 stevensc 19
const GroupsWidget = () => {
5 stevensc 20
  const labels = useSelector(({ intl }) => intl.labels)
21
 
22
  return (
2921 stevensc 23
    <Widget>
24
      <Widget.Body>
25
        <GroupsWidget.Item url='/helpers/my-groups' title={labels.my_groups} />
26
        <GroupsWidget.Item
27
          url='/helpers/groups-suggestion'
28
          title={labels.suggest_groups}
29
        />
30
      </Widget.Body>
31
    </Widget>
5 stevensc 32
  )
33
}
34
 
35
const Item = ({
36
  url = '/helpers/my-groups',
37
  title = 'Mis grupos',
851 stevensc 38
  display = false
5 stevensc 39
}) => {
40
  const [widgetData, setWidgetData] = useState([])
41
  const [displayMenu, setDisplayMenu] = useState(display)
854 stevensc 42
  const [lookMore, setLookMore] = useState(false)
5 stevensc 43
  const labels = useSelector(({ intl }) => intl.labels)
44
 
45
  const getData = () => {
46
    axios.get(url).then((response) => {
47
      const { success, data } = response.data
48
 
49
      if (success) {
50
        setWidgetData(data.sort((a, b) => a.priority - b.priority).reverse())
51
      }
52
    })
53
  }
54
 
55
  const toggleMenu = () => {
56
    setDisplayMenu(!displayMenu)
57
  }
58
 
59
  const dataSlice = () => {
60
    let infoFollows = [...widgetData]
61
    if (!lookMore) {
62
      infoFollows = infoFollows.slice(0, 3)
63
    }
64
    return infoFollows
65
  }
66
 
67
  useEffect(() => {
68
    getData()
69
  }, [])
70
 
71
  return (
853 stevensc 72
    <>
854 stevensc 73
      <HelperItem>
853 stevensc 74
        <span>{title}</span>
75
        <IconButton onClick={toggleMenu}>
2921 stevensc 76
          {displayMenu ? <ExpandLess /> : <ExpandMore />}
853 stevensc 77
        </IconButton>
854 stevensc 78
      </HelperItem>
5 stevensc 79
 
2921 stevensc 80
      <List styles={{ width: '100%', height: displayMenu ? 'auto' : 0 }}>
81
        {dataSlice().map(({ id, name, profile, image }) => (
82
          <List.Item key={id} image={image} title={name} url={profile} />
83
        ))}
5 stevensc 84
 
856 stevensc 85
        {widgetData.length > 3 && (
2921 stevensc 86
          <List.Item
87
            title={lookMore ? labels.view_less : labels.view_more}
88
            onClick={() => setLookMore(!lookMore)}
89
          />
5 stevensc 90
        )}
2921 stevensc 91
      </List>
853 stevensc 92
    </>
5 stevensc 93
  )
94
}
95
 
1774 stevensc 96
GroupsWidget.Item = Item
5 stevensc 97
 
1774 stevensc 98
export default GroupsWidget