Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1903 | Ir a la última revisión | | 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 CoverModal from './CoverModal'
6
import { axios } from '@app/utils'
7
import { useDispatch } from 'react-redux'
8
import { addNotification } from '@app/redux/notification/notification.actions'
9
 
10
const Cover = ({
11
  cover: defaultCover,
12
  sizes = '',
13
  edit = false,
14
  editUrl = ''
15
}) => {
16
  const [cover, setCover] = useState('')
17
  const [showModal, setShowModal] = useState(false)
18
  const dispatch = useDispatch()
19
 
20
  const toggleModal = () => setShowModal(!showModal)
21
 
22
  const onCoverChange = (cover) => {
23
    const formData = new FormData()
24
    formData.append('cover', cover)
25
 
26
    axios
27
      .post(editUrl, formData)
28
      .then(({ data: response }) => {
29
        const { data, success } = response
30
 
31
        if (!success) {
32
          const errorMessage =
33
            typeof data === 'string'
34
              ? data
35
              : Object.keys(data).map((key) => data[key])[0]
36
          throw new Error(errorMessage)
37
        }
38
 
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%',
56
          height: '300px',
57
          position: 'relative'
58
        }}
59
      >
60
        <img src={cover} alt='Profile cover' />
61
 
62
        {edit && (
63
          <IconButton
64
            sx={{
65
              position: 'absolute',
66
              top: '20px',
67
              right: '20px',
68
              backgroundColor: '#fff',
69
              color: 'blueviolet'
70
            }}
71
            onClick={toggleModal}
72
          >
73
            <Edit />
74
          </IconButton>
75
        )}
76
      </Box>
77
      <CoverModal
78
        isOpen={showModal}
79
        size={sizes}
80
        onClose={toggleModal}
81
        onComplete={onCoverChange}
82
      />
83
    </>
84
  )
85
}
86
 
87
export default Cover