Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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