Proyectos de Subversion LeadersLinked - SPA

Rev

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