Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
7212 stevensc 1
import React, { useEffect, useRef, useState } from 'react'
7209 stevensc 2
import { axios } from '../../utils'
7213 stevensc 3
import { useHistory, useLocation } from 'react-router-dom'
7209 stevensc 4
import { addNotification } from '../../redux/notification/notification.actions'
7212 stevensc 5
import { useDispatch, useSelector } from 'react-redux'
6
import { Col, Container, Row } from 'react-bootstrap'
7
import QuestionCard from '../../components/my-coach/QuestionCard'
8
import ConfirmModal from '../../components/modals/ConfirmModal'
7217 stevensc 9
import AnswerCard from '../../components/my-coach/AnswerCard'
7209 stevensc 10
 
11
const MyCoachViewPage = () => {
7212 stevensc 12
  const [question, setQuestion] = useState({})
7216 stevensc 13
  const [answers, setAnswers] = useState([])
7212 stevensc 14
  const [modalShow, setModalShow] = useState(null)
15
  const addUrl = useRef('')
16
  const actionUrl = useRef('')
17
  const labels = useSelector(({ intl }) => intl.labels)
7209 stevensc 18
  const dispatch = useDispatch()
19
  const { pathname } = useLocation()
7213 stevensc 20
  const history = useHistory()
7209 stevensc 21
 
22
  const getQuestion = () => {
23
    axios
7211 stevensc 24
      .get(pathname, {
7209 stevensc 25
        headers: {
26
          'Content-Type': 'application/json',
27
        },
28
      })
29
      .then((response) => {
30
        const { data, success } = response.data
31
 
32
        if (!success) {
33
          const errorMessage =
34
            typeof data === 'string'
35
              ? data
36
              : 'Error interno. Por favor, inténtelo de nuevo más tarde.'
37
 
38
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
39
          return
40
        }
41
 
7212 stevensc 42
        addUrl.current = data.link_answers_add
43
        setQuestion(data)
7209 stevensc 44
      })
45
      .catch((error) => {
46
        dispatch(
47
          addNotification({
48
            style: 'danger',
49
            msg: 'Error interno. Por favor, inténtelo de nuevo más tarde.',
50
          })
51
        )
52
        throw new Error(error)
53
      })
54
  }
55
 
7212 stevensc 56
  const confirmDelete = () => {
57
    axios
58
      .post(actionUrl.current)
59
      .then((response) => {
60
        const { data, success } = response.data
61
 
62
        if (!success) {
63
          const errorMessage =
64
            typeof data === 'string'
65
              ? data
66
              : 'Ha ocurrido un error, por favor intente más tarde.'
67
 
68
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
69
          return
70
        }
71
 
7213 stevensc 72
        closeModal()
7212 stevensc 73
        dispatch(addNotification({ style: 'success', msg: data }))
7214 stevensc 74
        history.replace('/my-coach')
7212 stevensc 75
      })
76
      .catch((error) => {
77
        dispatch(
78
          addNotification({
79
            style: 'danger',
80
            msg: 'Ha ocurrido un error, por favor intente más tarde.',
81
          })
82
        )
83
        throw new Error(error)
84
      })
85
  }
86
 
87
  const deleteQuestion = (url) => {
88
    actionUrl.current = url
89
    setModalShow('delete')
90
  }
91
 
92
  const editQuestion = (url) => {
93
    actionUrl.current = url
94
    setModalShow('edit')
95
  }
96
 
97
  const closeModal = () => {
98
    actionUrl.current = ''
99
    setModalShow(null)
100
  }
101
 
7209 stevensc 102
  useEffect(() => {
103
    getQuestion()
104
  }, [])
105
 
7216 stevensc 106
  useEffect(() => {
107
    if (question.link_answers) {
108
      axios
109
        .get(question.link_answers)
110
        .then((response) => {
111
          const { data, success } = response.data
112
 
113
          if (!success) {
114
            const errorMessage =
115
              typeof data === 'string'
116
                ? data
117
                : 'Error interno. Por favor, inténtelo de nuevo más tarde.'
118
 
119
            dispatch(addNotification({ style: 'danger', msg: errorMessage }))
120
            return
121
          }
122
 
7217 stevensc 123
          setAnswers(data.items)
7216 stevensc 124
        })
125
        .catch((error) => {
126
          dispatch(
127
            addNotification({
128
              style: 'danger',
129
              msg: 'Error interno. Por favor, inténtelo de nuevo más tarde.',
130
            })
131
          )
132
          throw new Error(error)
133
        })
134
    }
135
  }, [question])
136
 
7212 stevensc 137
  return (
138
    <>
139
      <Container as="section" className="companies-info">
140
        <div className="company-title">
141
          <h1 className="title mx-auto">{labels.my_coach}</h1>
142
        </div>
143
        <Row>
144
          <Col md="8" className="mx-auto">
145
            <QuestionCard
146
              key={question.uuid}
147
              onEdit={editQuestion}
148
              onDelete={deleteQuestion}
149
              {...question}
150
            />
7217 stevensc 151
            {answers.map((answer) => (
152
              <AnswerCard key={answer.unique} {...answer} />
153
            ))}
7212 stevensc 154
          </Col>
155
        </Row>
156
      </Container>
157
      <ConfirmModal
158
        show={modalShow === 'delete'}
159
        onClose={closeModal}
160
        onAccept={confirmDelete}
161
      />
162
    </>
163
  )
7209 stevensc 164
}
165
 
166
export default MyCoachViewPage