Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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