Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 876 | Rev 1518 | 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)),
32
    []
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
 
75
      <List sx={{ width: '100%', maxHeight: 300, overflow: 'auto' }}>
76
        {users.map(
77
          ({ id, image, link_cancel, link_request, name, profile }) => {
78
            return (
79
              <ListItem
80
                key={id}
81
                disablePadding
82
                disableRipple
83
                secondaryAction={
84
                  <>
85
                    {link_request && (
86
                      <ButtonPrimary
87
                        label={labels.connect}
88
                        onClick={() => handleConnect(link_request)}
89
                      />
90
                    )}
91
                    {link_cancel && (
92
                      <ButtonSecondary
93
                        label={labels.cancel}
94
                        onClick={() => handleConnect(link_cancel)}
95
                      />
96
                    )}
97
                  </>
98
                }
99
              >
100
                <ListItemButton disableRipple>
101
                  <ListItemAvatar>
102
                    <Avatar alt={`${name} image`} src={image} />
103
                  </ListItemAvatar>
104
 
105
                  <ListItemText primary={name} />
106
                </ListItemButton>
107
              </ListItem>
5 stevensc 108
            )
1516 stevensc 109
          }
5 stevensc 110
        )}
1516 stevensc 111
      </List>
112
    </WidgetWrapper>
875 stevensc 113
  )
114
}
5 stevensc 115
 
875 stevensc 116
export default PeopleYouMayKnow