Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1847 stevensc 1
import React, { useState, useEffect } from 'react'
2
import { Link, useLocation } from 'react-router-dom'
3
import { useDispatch, useSelector } from 'react-redux'
2912 stevensc 4
import { Button, Typography } from '@mui/material'
1847 stevensc 5
 
2902 stevensc 6
import { axios, parse } from '@utils'
7
import { addNotification } from '@store/notification/notification.actions'
1847 stevensc 8
 
2902 stevensc 9
import Widget from '@components/UI/Widget'
10
import Cover from '@components/UI/cover/Cover'
11
import ConfirmModal from '@components/modals/ConfirmModal'
12
import ProfileModal from './ProfileModal'
2909 stevensc 13
import Avatar from '@components/common/Avatar'
14
import Row from '@components/common/Row'
1847 stevensc 15
 
16
const ProfileCard = ({
2905 stevensc 17
  cover,
18
  facebook,
19
  following,
20
  formatted_address: formattedAddress,
2902 stevensc 21
  full_name: fullName,
22
  image,
2905 stevensc 23
  instagram,
24
  link_cancel: linkCancel,
25
  link_inmail: linkInmail,
26
  link_request: linkRequest,
2902 stevensc 27
  overview,
2905 stevensc 28
  request_connection: requestConnection,
29
  show_contact: showContact,
30
  sizes,
31
  total_connections: totalConnections,
1847 stevensc 32
  twitter,
2905 stevensc 33
  user_experiences: userExperiences = [],
2902 stevensc 34
  view_following: viewFollowing,
3032 stevensc 35
  view_total_connections: viewTotalConnections,
36
  edit
1847 stevensc 37
}) => {
38
  const [isAdded, setIsAdded] = useState(false)
39
  const [connectionUrl, setConnectionUrl] = useState('')
40
  const [modalToShow, setModalToShow] = useState(null)
41
  const [settedOverview, setSettedOverview] = useState('')
42
  const [isModalShow, setIsModalShow] = useState(false)
43
  const labels = useSelector(({ intl }) => intl.labels)
44
  const { pathname } = useLocation()
45
  const dispatch = useDispatch()
46
 
47
  const displayModal = () => {
48
    setIsModalShow(!isModalShow)
49
  }
50
 
51
  const getProfileData = async () => {
52
    try {
53
      const { data: response } = await axios.get(pathname)
54
      const { link_request, link_cancel } = response
55
 
56
      if (link_request) {
57
        setConnectionUrl(link_request)
58
        return
59
      }
60
 
61
      setConnectionUrl(link_cancel)
62
    } catch (err) {
63
      dispatch(addNotification({ style: 'danger', msg: err.message }))
64
    }
65
  }
66
 
67
  const connect = async () => {
68
    try {
69
      const { data: response } = await axios.post(connectionUrl)
70
      const { data, success } = response
71
 
72
      if (!success) {
73
        return dispatch(addNotification({ style: 'danger', msg: data }))
74
      }
75
 
76
      if (success && isModalShow) {
77
        displayModal()
78
      }
79
 
80
      await getProfileData()
81
      dispatch(addNotification({ style: 'success', msg: data }))
82
      setIsAdded(!isAdded)
83
    } catch (error) {
84
      dispatch(addNotification({ style: 'danger', msg: `Error: ${error}` }))
85
    }
86
  }
87
 
88
  const closeModal = () => {
89
    setModalToShow(null)
90
  }
91
 
92
  useEffect(() => {
2902 stevensc 93
    setIsAdded(!requestConnection)
1847 stevensc 94
    setSettedOverview(overview)
2909 stevensc 95
  }, [requestConnection, overview])
1847 stevensc 96
 
97
  useEffect(() => {
2902 stevensc 98
    linkRequest ? setConnectionUrl(linkRequest) : setConnectionUrl(linkCancel)
99
  }, [linkRequest, linkCancel])
1847 stevensc 100
 
101
  return (
2902 stevensc 102
    <Widget>
3032 stevensc 103
      <Cover cover={cover} edit={edit} />
3047 stevensc 104
 
2906 stevensc 105
      <Widget.Body>
2911 stevensc 106
        <Avatar
107
          src={image}
108
          alt={fullName}
109
          styles={{
110
            width: { xs: '100px', lg: '150px' },
111
            height: { xs: '100px', lg: '150px' },
112
            mt: { xs: '-50px', lg: '-75px' },
113
            border: '4px solid #fff',
114
            backgroundColor: '#c9ced4',
3047 stevensc 115
            cursor: edit ? 'pointer' : 'default'
2911 stevensc 116
          }}
3032 stevensc 117
          edit={edit}
2911 stevensc 118
        />
2906 stevensc 119
 
2902 stevensc 120
        <Typography variant='h2'>{fullName}</Typography>
121
        <Typography>{parse(settedOverview)}</Typography>
122
 
2909 stevensc 123
        <Row>
2902 stevensc 124
          <Typography>{formattedAddress}</Typography>
2917 stevensc 125
          <Typography variant='overline'> - </Typography>
126
          <Typography variant='overline' onClick={() => setModalToShow('info')}>
2902 stevensc 127
            {labels.personal_info}
2909 stevensc 128
          </Typography>
129
        </Row>
2902 stevensc 130
 
2909 stevensc 131
        <Row>
2912 stevensc 132
          {viewTotalConnections ? (
2902 stevensc 133
            <Link to='/connection/my-connections'>
2917 stevensc 134
              <Typography variant='overline'>
2913 stevensc 135
                {`${totalConnections} conexiones`}
2911 stevensc 136
              </Typography>
2902 stevensc 137
            </Link>
2912 stevensc 138
          ) : null}
139
          {viewFollowing ? (
2902 stevensc 140
            <Link onClick={(e) => e.preventDefault()}>
2917 stevensc 141
              <Typography variant='overline'>
2913 stevensc 142
                {`${following} siguiendo`}
2911 stevensc 143
              </Typography>
2902 stevensc 144
            </Link>
2912 stevensc 145
          ) : null}
2909 stevensc 146
        </Row>
2902 stevensc 147
 
2909 stevensc 148
        <Row>
149
          {connectionUrl && isAdded && (
150
            <Button variant='primary' onClick={() => displayModal()}>
151
              {labels.cancel}
152
            </Button>
153
          )}
154
          {connectionUrl && !isAdded && (
155
            <Button variant='primary' onClick={connect}>
156
              {labels.connect}
157
            </Button>
158
          )}
159
          {showContact && (
160
            <Button to={linkInmail} LinkComponent={Link} variant='secondary'>
161
              {labels.message}
162
            </Button>
163
          )}
164
        </Row>
2902 stevensc 165
      </Widget.Body>
2909 stevensc 166
      {/*  {isEdit && (
167
        <>
168
          <OverviewModal
169
            isOpen={modalToShow === 'overview'}
170
            overview={settedOverview}
171
            id={profileId}
172
            closeModal={() => closeModal()}
173
            onComplete={(newOverview) => setSettedOverview(newOverview)}
174
          />
175
        </>
176
      )} */}
1847 stevensc 177
 
2902 stevensc 178
      <ProfileModal
1847 stevensc 179
        show={modalToShow === 'info'}
180
        closeModal={() => closeModal()}
181
        fullName={fullName}
182
        facebook={facebook}
183
        twitter={twitter}
184
        instagram={instagram}
185
        following={following}
186
        formatted_address={formattedAddress}
187
        overview={overview}
188
        total_connections={totalConnections}
2902 stevensc 189
        // follower={follower}
1847 stevensc 190
      />
191
      <ConfirmModal
192
        show={isModalShow}
193
        onClose={() => setIsModalShow(false)}
194
        onAccept={() => connect()}
195
      />
2902 stevensc 196
    </Widget>
1847 stevensc 197
  )
198
}
199
 
200
export default ProfileCard