Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
958 stevensc 1
import React, { useEffect, useMemo, useState } from 'react'
949 stevensc 2
import { Link } from 'react-router-dom'
5 stevensc 3
import { axios } from '../../../utils'
4
import { useSelector } from 'react-redux'
960 stevensc 5
import { Avatar, Box } from '@mui/material'
958 stevensc 6
import styled from 'styled-components'
5 stevensc 7
 
961 stevensc 8
import { ButtonPrimary } from '@buttons'
1507 stevensc 9
import WidgetWrapper from '../WidgetLayout'
5 stevensc 10
import EmptySection from '../../UI/EmptySection'
11
 
1507 stevensc 12
const WidgetHeader = styled(WidgetWrapper.Header)`
958 stevensc 13
  align-items: baseline;
963 stevensc 14
  border-bottom: 1px solid var(--border-primary);
958 stevensc 15
  span {
16
    cursor: pointer;
17
  }
18
`
19
 
960 stevensc 20
const WidgetItem = styled.div`
21
  align-items: center;
22
  border-bottom: 1px solid var(--border-primary);
23
  display: flex;
24
  padding: 0.5rem 1rem;
25
  gap: 0.5rem;
26
  width: 100%;
27
  justify-content: space-between;
28
`
29
 
961 stevensc 30
const WidgetContent = styled.div`
31
  display: inline-flex;
32
  align-items: center;
33
  gap: 0.5rem;
34
  overflow: hidden;
35
  max-width: 100%;
36
  h2 {
37
    text-overflow: ellipsis;
38
    white-space: nowrap;
39
    overflow: hidden;
40
  }
41
`
42
 
5 stevensc 43
const SuggestWidget = ({
44
  title = 'Mis Grupos:',
45
  url = '/helpers/my-groups',
949 stevensc 46
  btnLabelAccept = 'Ver'
5 stevensc 47
}) => {
958 stevensc 48
  const [data, setData] = useState([])
5 stevensc 49
  const [lookMore, setLookMore] = useState(false)
50
  const labels = useSelector(({ intl }) => intl.labels)
51
 
958 stevensc 52
  const items = useMemo(
53
    () => (lookMore ? data : [...data].slice(0, 3)),
959 stevensc 54
    [lookMore, data]
958 stevensc 55
  )
56
 
5 stevensc 57
  useEffect(() => {
959 stevensc 58
    const getData = (url) => {
59
      axios.get(url).then(({ data: response }) => {
60
        const { success, data } = response
61
        if (success) {
62
          setData(data.sort((a, b) => a.priority - b.priority).reverse())
63
        }
64
      })
65
    }
66
 
5 stevensc 67
    getData(url)
68
  }, [url])
69
 
70
  return (
1507 stevensc 71
    <WidgetWrapper>
958 stevensc 72
      <WidgetHeader title={title}>
962 stevensc 73
        {data.length > 3 ? (
958 stevensc 74
          <span onClick={() => setLookMore(!lookMore)}>
5 stevensc 75
            {lookMore ? labels.view_less : labels.view_more}
76
          </span>
958 stevensc 77
        ) : null}
78
      </WidgetHeader>
949 stevensc 79
 
960 stevensc 80
      <Box
81
        display='flex'
82
        flexDirection='column'
961 stevensc 83
        maxHeight='201'
960 stevensc 84
        overflow='auto'
85
      >
86
        {data.length ? (
87
          items.map((suggest) => (
88
            <SuggestWidget.Item
89
              key={suggest.id}
90
              suggest={suggest}
91
              btnLabelAccept={btnLabelAccept}
92
            />
93
          ))
94
        ) : (
95
          <EmptySection align='left' message={labels?.datatable_empty} />
96
        )}
97
      </Box>
1507 stevensc 98
    </WidgetWrapper>
5 stevensc 99
  )
100
}
101
 
102
const Item = ({ suggest, btnLabelAccept }) => {
960 stevensc 103
  const { name, profile, image } = suggest
5 stevensc 104
  const labels = useSelector(({ intl }) => intl.labels)
950 stevensc 105
 
5 stevensc 106
  return (
960 stevensc 107
    <WidgetItem>
961 stevensc 108
      <WidgetContent>
960 stevensc 109
        <Avatar
961 stevensc 110
          sx={{ width: 50, height: 50 }}
960 stevensc 111
          src={image}
112
          alt={`${name} profile image`}
113
        />
961 stevensc 114
        <h2 title={name}>{name}</h2>
115
      </WidgetContent>
960 stevensc 116
 
961 stevensc 117
      <Link to={profile}>
118
        <ButtonPrimary label={btnLabelAccept || labels.view_profile} />
5 stevensc 119
      </Link>
960 stevensc 120
    </WidgetItem>
5 stevensc 121
  )
122
}
123
 
124
SuggestWidget.Item = Item
125
 
126
export default SuggestWidget