Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 717 | Rev 1456 | 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'
2
import { Button, Modal } from 'react-bootstrap'
3
import { useForm } from 'react-hook-form'
4
import { CKEditor } from 'ckeditor4-react'
5
import { useDispatch } from 'react-redux'
6
import { addNotification } from '../../redux/notification/notification.actions'
7
import { axios, CKEDITOR_OPTIONS } from '../../utils'
8
 
9
import Spinner from '../UI/Spinner'
1437 stevensc 10
import FormErrorFeedback from '../UI/form/FormErrorFeedback'
5 stevensc 11
import { useLocation } from 'react-router-dom'
12
 
13
const OverviewModal = ({
14
  isOpen = false,
15
  overview = '',
16
  id = '',
17
  closeModal = function () {},
703 stevensc 18
  onComplete = function () {}
5 stevensc 19
}) => {
20
  const [loading, setLoading] = useState(false)
703 stevensc 21
  const { pathname } = useLocation()
5 stevensc 22
  const dispatch = useDispatch()
23
 
24
  const { register, errors, handleSubmit, setValue } = useForm()
25
 
26
  useEffect(() => {
27
    register('description', { required: 'Este campo es requerido' })
28
  }, [])
29
 
704 stevensc 30
  const onSubmitHandler = ({ description }) => {
5 stevensc 31
    const typesUrl = {
32
      profile: `/profile/my-profiles/extended/${id}`,
703 stevensc 33
      group: `/group/my-groups/extended/${id}`
5 stevensc 34
    }
35
    const type = pathname.split('/')[1]
36
 
37
    setLoading(true)
38
 
39
    const formData = new FormData()
40
    formData.append('description', description)
41
 
42
    axios
43
      .post(typesUrl[type], formData)
704 stevensc 44
      .then(({ data: responseData }) => {
45
        const { data, success } = responseData
46
        if (!success) {
47
          const errorMessage =
48
            typeof data === 'string'
49
              ? data
50
              : Object.entries(data).map(
51
                  ([key, value]) => `${key}: ${value}`
52
                )[0]
53
          throw new Error(errorMessage)
5 stevensc 54
        }
55
 
717 stevensc 56
        onComplete(data.description || data)
5 stevensc 57
        closeModal()
58
      })
704 stevensc 59
      .catch((err) => {
60
        dispatch(addNotification({ style: 'danger', msg: err.message }))
61
      })
5 stevensc 62
      .finally(() => setLoading(false))
63
  }
64
 
65
  const removeModalTabIndex = () => {
66
    const modal = document.querySelector('.fade.modal.show')
67
    modal.removeAttribute('tabindex')
68
  }
69
 
70
  return (
71
    <Modal show={isOpen} onHide={closeModal}>
72
      <Modal.Header closeButton>
73
        <Modal.Title>Visión general</Modal.Title>
74
      </Modal.Header>
75
      <form onSubmit={handleSubmit(onSubmitHandler)} autoComplete={false}>
76
        <Modal.Body>
77
          {loading && <Spinner />}
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
        </Modal.Body>
88
        <Modal.Footer>
703 stevensc 89
          <Button size='sm' type='submit'>
5 stevensc 90
            Enviar
91
          </Button>
703 stevensc 92
          <Button size='sm' variant='danger' onClick={closeModal}>
5 stevensc 93
            Cancelar
94
          </Button>
95
        </Modal.Footer>
96
      </form>
97
    </Modal>
98
  )
99
}
100
 
101
export default OverviewModal