Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1516 stevensc 1
import React, { useMemo, useState } from 'react'
2
import { useDispatch, useSelector } from 'react-redux'
3
import {
4
  Avatar,
5
  Box,
6
  List,
7
  ListItem,
8
  ListItemAvatar,
9
  ListItemButton,
10
  ListItemText,
11
  Typography
12
} from '@mui/material'
13
 
875 stevensc 14
import { axios } from '../../../utils'
15
import { addNotification } from '../../../redux/notification/notification.actions'
1516 stevensc 16
import useFetch from '../../../hooks/useFetch'
5 stevensc 17
 
1516 stevensc 18
import WidgetWrapper from '../WidgetLayout'
19
import { ButtonPrimary, ButtonSecondary } from '@buttons'
5 stevensc 20
 
21
const PeopleYouMayKnow = () => {
1516 stevensc 22
  const { data: peopleYouMayKnow, refetch } = useFetch(
23
    '/helpers/people-you-may-know',
24
    []
25
  )
875 stevensc 26
  const [lookMore, setLookMore] = useState(false)
27
  const labels = useSelector(({ intl }) => intl.labels)
28
  const dispatch = useDispatch()
5 stevensc 29
 
1516 stevensc 30
  const users = useMemo(
31
    () => (lookMore ? peopleYouMayKnow : [...peopleYouMayKnow].slice(0, 3)),
1521 stevensc 32
    [peopleYouMayKnow, lookMore]
1516 stevensc 33
  )
34
 
5 stevensc 35
  const handleConnect = (url) => {
36
    axios.post(url).then(({ data }) => {
37
      if (!data.success) {
205 stevensc 38
        dispatch(
5 stevensc 39
          addNotification({
875 stevensc 40
            style: 'danger',
5 stevensc 41
            msg:
875 stevensc 42
              typeof data.data === 'string' ? data.data : 'Ha ocurrido un error'
5 stevensc 43
          })
875 stevensc 44
        )
45
        return
5 stevensc 46
      }
47
 
48
      dispatch(
49
        addNotification({
875 stevensc 50
          style: 'success',
51
          msg: data.data
5 stevensc 52
        })
875 stevensc 53
      )
1516 stevensc 54
      refetch()
875 stevensc 55
    })
56
  }
5 stevensc 57
 
1516 stevensc 58
  return (
59
    <WidgetWrapper>
60
      <Box
61
        display='flex'
62
        alignItems='baseline'
63
        justifyContent='space-between'
64
        padding={1}
65
      >
66
        <Typography variant='h3'>{`${labels.connect_with}:`}</Typography>
5 stevensc 67
 
68
        {peopleYouMayKnow.length >= 4 && (
69
          <span onClick={() => setLookMore(!lookMore)}>
70
            {lookMore ? labels.view_less : labels.view_more}
71
          </span>
72
        )}
1516 stevensc 73
      </Box>
74
 
1518 stevensc 75
      {!users.length ? (
76
        <Typography variant='body1'>{labels.datatable_empty}</Typography>
77
      ) : (
78
        <List sx={{ width: '100%', maxHeight: 300, overflow: 'auto' }}>
79
          {users.map(
80
            ({ id, image, link_cancel, link_request, name, profile }) => (
1519 stevensc 81
              <ListItem key={id} disablePadding disableRipple>
82
                <ListItemButton disableRipple>
83
                  <ListItemAvatar>
84
                    <Avatar alt={`${name} image`} src={image} />
85
                  </ListItemAvatar>
86
 
87
                  <ListItemText primary={name} />
88
 
1521 stevensc 89
                  {link_request && (
90
                    <ButtonPrimary
91
                      label={labels.connect}
92
                      onClick={() => handleConnect(link_request)}
93
                    />
94
                  )}
95
                  {link_cancel && (
96
                    <ButtonSecondary
97
                      label={labels.cancel}
98
                      onClick={() => handleConnect(link_cancel)}
99
                    />
100
                  )}
1516 stevensc 101
                </ListItemButton>
102
              </ListItem>
5 stevensc 103
            )
1518 stevensc 104
          )}
105
        </List>
106
      )}
1516 stevensc 107
    </WidgetWrapper>
875 stevensc 108
  )
109
}
5 stevensc 110
 
875 stevensc 111
export default PeopleYouMayKnow