Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6770 stevensc 1
import React, { useState, useEffect } from 'react'
2
import { axios } from '../../utils'
3
import { useForm } from 'react-hook-form'
6817 stevensc 4
import { useParams } from 'react-router-dom'
6770 stevensc 5
import { useDispatch, useSelector } from 'react-redux'
6
import { Button, Modal } from 'react-bootstrap'
7
import { addNotification } from '../../redux/notification/notification.actions'
8
 
9
import Spinner from '../UI/Spinner'
10
import DropzoneComponent from '../dropzone/DropzoneComponent'
11
import FormErrorFeedback from '../UI/FormErrorFeedback'
12
 
13
const CoverModal = ({ isOpen, sizes, onClose, onComplete }) => {
14
  const [loading, setLoading] = useState(false)
15
  const { uuid } = useParams()
6778 stevensc 16
  const labels = useSelector(({ intl }) => intl.labels)
6770 stevensc 17
  const dispatch = useDispatch()
18
 
19
  const typesUrl = {
20
    user: `/profile/my-profiles/cover/${uuid}/operation/upload`,
21
    company: `/my-company/${uuid}/profile/cover/upload`,
22
    group: `/group/my-groups/cover/${uuid}/operation/upload`,
23
  }
24
 
25
  const { register, errors, handleSubmit, setValue, clearErrors, setError } =
26
    useForm()
27
 
28
  const onUploadedHandler = (files) => {
29
    setValue('cover', files)
30
    clearErrors('cover')
31
  }
32
 
33
  const onSubmitHandler = ({ cover }) => {
34
    setLoading(true)
35
 
36
    const formData = new FormData()
37
    formData.append('cover', cover)
6817 stevensc 38
    const type = window.location.pathname.split('/')[1]
6770 stevensc 39
 
40
    axios
41
      .post(typesUrl[type], formData)
42
      .then(({ data: response }) => {
43
        const { data, success } = response
44
 
45
        if (!success) {
46
          typeof data === 'string'
47
            ? dispatch(addNotification({ style: 'danger', msg: data }))
48
            : Object.entries(data).map(([key, value]) =>
49
                setError(key, value[0])
50
              )
51
          return
52
        }
53
 
54
        onComplete(data)
55
        setValue('cover', '')
56
        onClose()
57
      })
58
      .finally(() => setLoading(false))
59
  }
60
 
61
  useEffect(() => {
62
    register('cover', {
63
      required: 'Este campo es requerido',
64
    })
65
  }, [])
66
 
67
  return (
68
    <Modal show={isOpen} onHide={onClose}>
69
      <form onSubmit={handleSubmit(onSubmitHandler)}>
70
        <Modal.Header closeButton>
71
          <Modal.Title>{labels.cover}</Modal.Title>
72
        </Modal.Header>
73
        <Modal.Body>
74
          {loading && <Spinner />}
75
          <DropzoneComponent
76
            modalType="IMAGE"
77
            onUploaded={onUploadedHandler}
78
            recomendationText={`Imágenes recomendadas de ${sizes}`}
79
          />
80
          {errors.cover && (
81
            <FormErrorFeedback>{errors.cover.message}</FormErrorFeedback>
82
          )}
83
        </Modal.Body>
84
        <Modal.Footer>
85
          <Button size="sm" type="submit">
86
            {labels.accept}
87
          </Button>
88
          <Button size="sm" variant="danger" onClick={onClose}>
89
            {labels.cancel}
90
          </Button>
91
        </Modal.Footer>
92
      </form>
93
    </Modal>
94
  )
95
}
96
 
97
export default CoverModal