Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1516 | Rev 1519 | 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)),
1518 stevensc 32
    [peopleYouMayKnow]
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 }) => (
1516 stevensc 81
              <ListItem
82
                key={id}
83
                disablePadding
84
                disableRipple
85
                secondaryAction={
86
                  <>
87
                    {link_request && (
88
                      <ButtonPrimary
89
                        label={labels.connect}
90
                        onClick={() => handleConnect(link_request)}
91
                      />
92
                    )}
93
                    {link_cancel && (
94
                      <ButtonSecondary
95
                        label={labels.cancel}
96
                        onClick={() => handleConnect(link_cancel)}
97
                      />
98
                    )}
99
                  </>
100
                }
101
              >
102
                <ListItemButton disableRipple>
103
                  <ListItemAvatar>
104
                    <Avatar alt={`${name} image`} src={image} />
105
                  </ListItemAvatar>
106
 
107
                  <ListItemText primary={name} />
108
                </ListItemButton>
109
              </ListItem>
5 stevensc 110
            )
1518 stevensc 111
          )}
112
        </List>
113
      )}
1516 stevensc 114
    </WidgetWrapper>
875 stevensc 115
  )
116
}
5 stevensc 117
 
875 stevensc 118
export default PeopleYouMayKnow