Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1902 stevensc 1
import React, { useState, useEffect } from 'react'
2
import { Box, IconButton } from '@mui/material'
3
import { Edit } from '@mui/icons-material'
4
 
5
import { axios } from '@app/utils'
6
import { useDispatch } from 'react-redux'
7
import { addNotification } from '@app/redux/notification/notification.actions'
8
 
1903 stevensc 9
import CoverModal from './CoverModal'
10
 
1902 stevensc 11
const Cover = ({
1903 stevensc 12
  cover: defaultCover = '/images/no_cover.jpg',
1902 stevensc 13
  sizes = '',
14
  edit = false,
15
  editUrl = ''
16
}) => {
17
  const [cover, setCover] = useState('')
18
  const [showModal, setShowModal] = useState(false)
19
  const dispatch = useDispatch()
20
 
21
  const toggleModal = () => setShowModal(!showModal)
22
 
23
  const onCoverChange = (cover) => {
24
    const formData = new FormData()
25
    formData.append('cover', cover)
26
 
27
    axios
28
      .post(editUrl, formData)
29
      .then(({ data: response }) => {
30
        const { data, success } = response
31
 
32
        if (!success) {
33
          const errorMessage =
1905 stevensc 34
            typeof data === 'string' ? data : 'Intente mas tarde'
1902 stevensc 35
          throw new Error(errorMessage)
36
        }
37
 
1906 stevensc 38
        setCover(data)
1902 stevensc 39
        toggleModal()
40
      })
41
      .catch((error) => {
42
        console.log(error)
43
        dispatch(addNotification({ style: 'danger', msg: error.message }))
44
      })
45
  }
46
 
47
  useEffect(() => {
48
    setCover(defaultCover)
49
  }, [defaultCover])
50
 
51
  return (
52
    <>
53
      <Box
54
        sx={{
55
          width: '100%',
1903 stevensc 56
          maxHeight: '300px',
1907 stevensc 57
          position: 'relative',
58
          overflow: 'hidden',
59
          '& img': {
60
            width: '100%',
61
            maxHeight: '300px',
62
            objectFit: 'cover'
63
          }
1902 stevensc 64
        }}
65
      >
66
        <img src={cover} alt='Profile cover' />
67
 
68
        {edit && (
69
          <IconButton
70
            sx={{
71
              position: 'absolute',
72
              top: '20px',
73
              right: '20px',
74
              backgroundColor: '#fff',
75
              color: 'blueviolet'
76
            }}
77
            onClick={toggleModal}
78
          >
79
            <Edit />
80
          </IconButton>
81
        )}
82
      </Box>
83
      <CoverModal
1903 stevensc 84
        show={showModal}
85
        sizes={sizes}
1902 stevensc 86
        onClose={toggleModal}
1903 stevensc 87
        onConfirm={onCoverChange}
1902 stevensc 88
      />
89
    </>
90
  )
91
}
92
 
93
export default Cover