Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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