Proyectos de Subversion LeadersLinked - SPA

Rev

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