Proyectos de Subversion LeadersLinked - SPA

Rev

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