Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5566 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { axios } from '../../utils'
3
import { useForm } from 'react-hook-form'
4
import { Button, Modal } from 'react-bootstrap'
5
import { addNotification } from '../../redux/notification/notification.actions'
6
 
7
import Spinner from '../loading-spinner/Spinner'
8
 
9
const SocialNetworksModal = ({
10
  isOpen,
11
  profileId,
12
  type,
13
  facebook,
14
  twitter,
15
  instagram,
16
  onClose,
17
  onComplete,
18
}) => {
19
  const [isLoading, setIsLoading] = useState(false)
20
  const { register, handleSubmit, getValues, setValue, setError } = useForm()
21
 
22
  const postUrls = {
23
    profile: `/profile/my-profiles/social-network/${profileId}`,
24
    company: `/my-company/${profileId}/profile/social-network`,
25
  }
26
 
27
  const onSubmitHandler = async (data) => {
28
    setIsLoading(true)
29
    const formData = new FormData()
30
    Object.entries(data).map(([key, value]) => formData.append(key, value))
31
 
32
    await axios
33
      .post(postUrls[type], formData)
34
      .then(({ data: response }) => {
35
        if (!response.success) {
36
          const responseType = typeof response.data
37
 
38
          if (responseType === 'string') {
39
            addNotification({ style: 'danger', msg: response.data })
40
            return
41
          }
42
 
43
          Object.entries(response.data).map(([key, value]) => {
44
            if (key in getValues()) {
45
              setError(key, {
46
                type: 'manual',
47
                message: Array.isArray(value) ? value[0] : value,
48
              })
49
            }
50
          })
51
        }
52
 
53
        onComplete({
54
          facebook: response.data.facebook,
55
          twitter: response.data.twitter,
56
          instagram: response.data.instagram,
57
        })
58
        onClose()
59
      })
60
      .finally(() => setIsLoading(false))
61
  }
62
 
63
  useEffect(() => {
64
    setValue('facebook', facebook)
65
    setValue('twitter', twitter)
66
    setValue('instagram', instagram)
67
  }, [facebook, twitter, instagram, isOpen])
68
 
69
  return (
70
    <Modal show={isOpen} onHide={onClose}>
71
      <form onSubmit={handleSubmit(onSubmitHandler)}>
72
        <Modal.Header closeButton>
73
          <Modal.Title>Redes Sociales</Modal.Title>
74
        </Modal.Header>
75
        <Modal.Body>
76
          {isLoading && <Spinner />}
77
          <div className="form-group">
78
            <input
79
              type="text"
80
              name="facebook"
81
              placeholder="Perfil de Facebook"
82
              ref={register}
83
              defaultValue={facebook}
84
            />
85
          </div>
86
          <div className="form-group">
87
            <input
88
              type="text"
89
              name="twitter"
90
              placeholder="Perfil de Twitter"
91
              ref={register}
92
              defaultValue={twitter}
93
            />
94
          </div>
95
          <div className="form-group">
96
            <input
97
              type="text"
98
              name="instagram"
99
              placeholder="Perfil de Instagram"
100
              ref={register}
101
              defaultValue={instagram}
102
            />
103
          </div>
104
        </Modal.Body>
105
        <Modal.Footer>
106
          <Button type="submit">Enviar</Button>
107
          <Button onClick={onClose}>Cancelar</Button>
108
        </Modal.Footer>
109
      </form>
110
    </Modal>
111
  )
112
}
113
 
114
export default SocialNetworksModal