Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
7033 stevensc 1
import { CKEditor } from 'ckeditor4-react'
2
import React, { useEffect, useState } from 'react'
3
import { Button, Form, Modal } from 'react-bootstrap'
4
import { useDispatch, useSelector } from 'react-redux'
5
import { CKEDITOR_OPTIONS, axios } from '../../utils'
6
import { useForm } from 'react-hook-form'
7
import FormErrorFeedback from '../UI/FormErrorFeedback'
8
import { addNotification } from '../../redux/notification/notification.actions'
9
 
10
const KnowledgeEditModal = ({
11
  show,
12
  categories = [],
13
  url,
14
  onComplete,
15
  onClose,
16
}) => {
17
  const [loading, setLoading] = useState(false)
18
  const labels = useSelector(({ intl }) => intl.labels)
19
  const dispatch = useDispatch()
20
 
7037 stevensc 21
  const { handleSubmit, register, setValue, errors, getValues } = useForm()
7033 stevensc 22
 
23
  const onSubmit = handleSubmit((data) => {
24
    setLoading(true)
25
    const formData = new FormData()
7037 stevensc 26
    Object.entries(data).map(([key, value]) => formData.append(key, value))
7033 stevensc 27
 
28
    axios
29
      .post(url, formData)
30
      .then((response) => {
31
        const { data, success } = response.data
32
        if (!success) {
33
          if (typeof data === 'string') {
34
            dispatch(addNotification({ style: 'danger', msg: data }))
35
            return
36
          }
37
 
38
          Object.entries(data).map(([key, value]) => {
39
            key in getValues() &&
40
              dispatch(
41
                addNotification({
42
                  style: 'danger',
43
                  msg: `${key}: ${Array.isArray(value) ? value[0] : value}`,
44
                })
45
              )
46
          })
47
          return
48
        }
49
 
50
        onComplete()
51
        onClose()
52
      })
53
      .finally(() => setLoading(false))
54
  })
55
 
56
  useEffect(() => {
57
    register('description', { required: true })
58
  }, [])
59
 
60
  useEffect(() => {
7038 stevensc 61
    if (!url) return
62
 
7033 stevensc 63
    axios.get(url).then((response) => {
7038 stevensc 64
      const { data, success } = response.data
7033 stevensc 65
 
66
      if (!success) {
67
        const errorMessage =
68
          typeof data === 'string' ? data : 'Ha ocurrido un error'
69
 
7037 stevensc 70
        dispatch(
71
          addNotification({
72
            style: 'danger',
73
            msg: errorMessage,
74
          })
75
        )
76
        return
7033 stevensc 77
      }
78
 
79
      setValue('category_id', data.category_id)
80
      setValue('description', data.description)
81
      setValue('title', data.title)
82
    })
83
  }, [show])
84
 
85
  return (
86
    <Modal show={show}>
7037 stevensc 87
      <Modal.Header className="pb-0">
7033 stevensc 88
        <Modal.Title>Editar conocimiento</Modal.Title>
89
      </Modal.Header>
90
      <Modal.Body>
91
        <Form onSubmit={onSubmit}>
92
          <Form.Group>
93
            <Form.Label>{labels.category}</Form.Label>
7038 stevensc 94
            <Form.Control
95
              as="select"
96
              ref={register({ required: true })}
97
              name="category_id"
98
            >
7033 stevensc 99
              {categories.map(({ name, uuid }) => (
7039 stevensc 100
                <option value={uuid} key={uuid}>
101
                  {name}
102
                </option>
7033 stevensc 103
              ))}
104
            </Form.Control>
7037 stevensc 105
            {errors.category_id && (
7033 stevensc 106
              <FormErrorFeedback>{labels.error_field_empty}</FormErrorFeedback>
107
            )}
108
          </Form.Group>
109
 
110
          <Form.Group>
111
            <Form.Label>{labels.title}</Form.Label>
7038 stevensc 112
            <Form.Control
113
              type="text"
114
              name="title"
115
              ref={register({ required: true })}
116
            />
7037 stevensc 117
            {errors.title && (
7033 stevensc 118
              <FormErrorFeedback>{labels.error_field_empty}</FormErrorFeedback>
119
            )}
120
          </Form.Group>
121
 
122
          <CKEditor
123
            onChange={(e) => setValue('description', e.editor.getData())}
7035 stevensc 124
            onInstanceReady={(e) => e.editor.setData(getValues('description'))}
7033 stevensc 125
            config={CKEDITOR_OPTIONS}
126
          />
127
          {errors.description && (
128
            <FormErrorFeedback>{labels.error_field_empty}</FormErrorFeedback>
129
          )}
130
 
7038 stevensc 131
          <Button className="mt-3 mr-2" variant="primary" type="submit">
7033 stevensc 132
            {labels.accept}
133
          </Button>
7035 stevensc 134
          <Button className="btn-secondary mt-3" onClick={onClose}>
135
            {labels.cancel}
7033 stevensc 136
          </Button>
137
        </Form>
138
      </Modal.Body>
139
    </Modal>
140
  )
141
}
142
 
143
export default KnowledgeEditModal