Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
5 stevensc 1
import React, { useEffect, useState } from 'react'
1456 stevensc 2
import { useLocation } from 'react-router-dom'
3
import { useDispatch } from 'react-redux'
5 stevensc 4
import { useForm } from 'react-hook-form'
5
import { CKEditor } from 'ckeditor4-react'
1456 stevensc 6
 
7
import { axios, CKEDITOR_OPTIONS } from '../../utils'
5 stevensc 8
import { addNotification } from '../../redux/notification/notification.actions'
9
 
1456 stevensc 10
import Spinner from 'components/UI/Spinner'
11
import FormErrorFeedback from 'components/UI/form/FormErrorFeedback'
12
import Modal from 'components/UI/modal/Modal'
5 stevensc 13
 
14
const OverviewModal = ({
15
  isOpen = false,
16
  overview = '',
17
  id = '',
18
  closeModal = function () {},
703 stevensc 19
  onComplete = function () {}
5 stevensc 20
}) => {
21
  const [loading, setLoading] = useState(false)
703 stevensc 22
  const { pathname } = useLocation()
5 stevensc 23
  const dispatch = useDispatch()
24
 
25
  const { register, errors, handleSubmit, setValue } = useForm()
26
 
1456 stevensc 27
  const onSubmit = handleSubmit(({ description }) => {
5 stevensc 28
    const typesUrl = {
29
      profile: `/profile/my-profiles/extended/${id}`,
703 stevensc 30
      group: `/group/my-groups/extended/${id}`
5 stevensc 31
    }
32
    const type = pathname.split('/')[1]
33
 
34
    setLoading(true)
35
 
36
    const formData = new FormData()
37
    formData.append('description', description)
38
 
39
    axios
40
      .post(typesUrl[type], formData)
704 stevensc 41
      .then(({ data: responseData }) => {
42
        const { data, success } = responseData
43
        if (!success) {
44
          const errorMessage =
45
            typeof data === 'string'
46
              ? data
47
              : Object.entries(data).map(
48
                  ([key, value]) => `${key}: ${value}`
49
                )[0]
50
          throw new Error(errorMessage)
5 stevensc 51
        }
52
 
717 stevensc 53
        onComplete(data.description || data)
5 stevensc 54
        closeModal()
55
      })
704 stevensc 56
      .catch((err) => {
57
        dispatch(addNotification({ style: 'danger', msg: err.message }))
58
      })
5 stevensc 59
      .finally(() => setLoading(false))
1456 stevensc 60
  })
5 stevensc 61
 
62
  const removeModalTabIndex = () => {
63
    const modal = document.querySelector('.fade.modal.show')
64
    modal.removeAttribute('tabindex')
65
  }
66
 
1456 stevensc 67
  useEffect(() => {
68
    register('description', { required: 'Este campo es requerido' })
69
  }, [])
70
 
5 stevensc 71
  return (
1456 stevensc 72
    <Modal
73
      title='Visión general'
74
      show={isOpen}
75
      onClose={closeModal}
76
      onAccept={onSubmit}
77
    >
78
      <CKEditor
79
        onChange={(e) => setValue('description', e.editor.getData())}
80
        onInstanceReady={(e) => e.editor.setData(overview)}
81
        config={CKEDITOR_OPTIONS}
82
        onDialogShow={removeModalTabIndex}
83
      />
84
      {errors.description && (
85
        <FormErrorFeedback>{errors.description.message}</FormErrorFeedback>
86
      )}
87
      {loading && <Spinner />}
5 stevensc 88
    </Modal>
89
  )
90
}
91
 
92
export default OverviewModal