Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7059 | Rev 7061 | 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
 
7055 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]) => {
7053 stevensc 30
      if (['attachment', 'image'].includes(key) && value) {
7046 stevensc 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
 
7055 stevensc 88
      setValue('title', data.title)
7033 stevensc 89
      setValue('category_id', data.category_id)
90
      setValue('description', data.description)
91
    })
7057 stevensc 92
  }, [url, show, isEdit])
7044 stevensc 93
 
94
  useEffect(() => {
95
    if (!show) {
96
      setValue('category_id', '')
97
      setValue('description', '')
98
      setValue('title', '')
7059 stevensc 99
      setValue('image', '')
7044 stevensc 100
    }
7033 stevensc 101
  }, [show])
102
 
103
  return (
104
    <Modal show={show}>
7037 stevensc 105
      <Modal.Header className="pb-0">
7054 stevensc 106
        <Modal.Title>
107
          {isEdit ? labels.edit : labels.add} conocimiento
108
        </Modal.Title>
7033 stevensc 109
      </Modal.Header>
110
      <Modal.Body>
7056 stevensc 111
        {loading ? (
112
          <Spinner />
113
        ) : (
114
          <Form onSubmit={onSubmit}>
115
            <Form.Group>
116
              <Form.Label>{labels.category}</Form.Label>
117
              <Form.Control
118
                as="select"
119
                ref={register({ required: true })}
120
                name="category_id"
121
              >
122
                {categories.map(({ name, uuid }) => (
123
                  <option value={uuid} key={uuid}>
124
                    {name}
125
                  </option>
126
                ))}
127
              </Form.Control>
128
              {errors.category_id && (
129
                <FormErrorFeedback>
130
                  {labels.error_field_empty}
131
                </FormErrorFeedback>
132
              )}
133
            </Form.Group>
7033 stevensc 134
 
7056 stevensc 135
            <Form.Group>
136
              <Form.Label>{labels.title}</Form.Label>
137
              <Form.Control
138
                type="text"
139
                name="title"
140
                ref={register({ required: true })}
141
              />
142
              {errors.title && (
143
                <FormErrorFeedback>
144
                  {labels.error_field_empty}
145
                </FormErrorFeedback>
146
              )}
147
            </Form.Group>
148
 
149
            <CKEditor
150
              onChange={(e) => setValue('description', e.editor.getData())}
7060 stevensc 151
              initData={getValues('description')}
7056 stevensc 152
              config={CKEDITOR_OPTIONS}
7038 stevensc 153
            />
7056 stevensc 154
 
155
            {errors.description && (
7033 stevensc 156
              <FormErrorFeedback>{labels.error_field_empty}</FormErrorFeedback>
157
            )}
158
 
7056 stevensc 159
            <Form.Group>
160
              <Form.File
161
                label={labels.image}
162
                name="image"
163
                ref={register({ required: true })}
164
              />
165
              {errors.image && (
166
                <FormErrorFeedback>
167
                  {labels.error_field_empty}
168
                </FormErrorFeedback>
169
              )}
170
            </Form.Group>
7055 stevensc 171
 
7056 stevensc 172
            <Form.Group>
173
              <Form.File
174
                label={labels.attachment}
175
                name="attachment"
176
                ref={register}
177
              />
178
            </Form.Group>
7033 stevensc 179
 
7056 stevensc 180
            <Button className="mt-3 mr-2" variant="primary" type="submit">
181
              {labels.accept}
182
            </Button>
183
            <Button className="btn-secondary mt-3" onClick={onClose}>
184
              {labels.cancel}
185
            </Button>
186
          </Form>
187
        )}
7033 stevensc 188
      </Modal.Body>
189
    </Modal>
190
  )
191
}
192
 
193
export default KnowledgeEditModal