Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 851 | Rev 854 | 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 { axios } from '../../../utils'
3
import { Link } from 'react-router-dom'
853 stevensc 4
import { Avatar, IconButton } from '@mui/material'
5 stevensc 5
import { useSelector } from 'react-redux'
6
import ExpandLessIcon from '@mui/icons-material/ExpandLess'
7
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
853 stevensc 8
import styled from 'styled-components'
5 stevensc 9
 
10
import EmptySection from '../../UI/EmptySection'
853 stevensc 11
import StyledContainer from '../../widgets/WidgetLayout'
5 stevensc 12
 
853 stevensc 13
const GroupsHelperContainer = styled(StyledContainer)`
14
  padding: 10px;
15
`
16
 
17
const StyledGroupItem = styled.div`
18
  cursor: pointer;
19
  display: flex;
20
  align-items: center;
21
  justify-content: space-between;
22
  width: 100%;
23
`
24
 
5 stevensc 25
const Groups = () => {
26
  const labels = useSelector(({ intl }) => intl.labels)
27
 
28
  return (
853 stevensc 29
    <GroupsHelperContainer>
5 stevensc 30
      <Groups.Item
851 stevensc 31
        url='/helpers/my-groups'
5 stevensc 32
        title={labels.my_groups}
33
        display={true}
34
      />
35
      <Groups.Item
851 stevensc 36
        url='/helpers/groups-suggestion'
5 stevensc 37
        title={labels.suggest_groups}
38
      />
853 stevensc 39
    </GroupsHelperContainer>
5 stevensc 40
  )
41
}
42
 
43
const Item = ({
44
  url = '/helpers/my-groups',
45
  title = 'Mis grupos',
851 stevensc 46
  display = false
5 stevensc 47
}) => {
48
  const [widgetData, setWidgetData] = useState([])
49
  const [displayMenu, setDisplayMenu] = useState(display)
50
  const labels = useSelector(({ intl }) => intl.labels)
51
  const [lookMore, setLookMore] = useState(false)
52
 
53
  const getData = () => {
54
    axios.get(url).then((response) => {
55
      const { success, data } = response.data
56
 
57
      if (success) {
58
        setWidgetData(data.sort((a, b) => a.priority - b.priority).reverse())
59
      }
60
    })
61
  }
62
 
63
  const toggleMenu = () => {
64
    setDisplayMenu(!displayMenu)
65
  }
66
 
67
  const dataSlice = () => {
68
    let infoFollows = [...widgetData]
69
    if (!lookMore) {
70
      infoFollows = infoFollows.slice(0, 3)
71
    }
72
    return infoFollows
73
  }
74
 
75
  useEffect(() => {
76
    getData()
77
  }, [])
78
 
79
  return (
853 stevensc 80
    <>
81
      <StyledGroupItem>
82
        <span>{title}</span>
83
        <IconButton onClick={toggleMenu}>
5 stevensc 84
          {displayMenu ? <ExpandLessIcon /> : <ExpandMoreIcon />}
853 stevensc 85
        </IconButton>
86
      </StyledGroupItem>
5 stevensc 87
 
88
      <ul className={`helper__list ${displayMenu ? 'show' : 'hide'}`}>
89
        {widgetData.length ? (
90
          dataSlice().map(({ id, name, profile, image }) => (
91
            <li key={id}>
92
              <Link
517 stevensc 93
                to={profile}
851 stevensc 94
                className='helper__list-item'
95
                target='secondary'
5 stevensc 96
              >
97
                <Avatar
98
                  src={image}
99
                  alt={`${name} group image`}
100
                  sx={{ width: '40px', height: '40px' }}
101
                />
102
                <span>{name}</span>
103
              </Link>
104
            </li>
105
          ))
106
        ) : (
107
          <EmptySection message={labels.datatable_empty} />
108
        )}
109
 
110
        {widgetData.length >= 3 && (
111
          <li
851 stevensc 112
            className='helper__list-item justify-content-center cursor-pointer py-2'
5 stevensc 113
            onClick={() => setLookMore(!lookMore)}
114
          >
115
            <span>{lookMore ? labels.view_less : labels.view_more}</span>
116
          </li>
117
        )}
118
      </ul>
853 stevensc 119
    </>
5 stevensc 120
  )
121
}
122
 
123
Groups.Item = Item
124
 
125
export default Groups