Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3017 stevensc 1
import React from 'react'
813 stevensc 2
import { useForm } from 'react-hook-form'
3017 stevensc 3
import { styled, Typography } from '@mui/material'
2970 stevensc 4
import { Public, LockClock } from '@mui/icons-material'
5 stevensc 5
 
2969 stevensc 6
import { axios } from '@utils'
2970 stevensc 7
import { updateFeed } from '@store/feed/feed.actions'
2969 stevensc 8
import { addNotification } from '@store/notification/notification.actions'
5 stevensc 9
 
2970 stevensc 10
import styles from './survey.module.scss'
3017 stevensc 11
import Widget from '@components/UI/Widget'
3018 stevensc 12
import CheckboxInput from '@components/UI/inputs/Checkbox'
2970 stevensc 13
 
3018 stevensc 14
const AnswerContainer = styled('div')`
5 stevensc 15
  display: flex;
16
  align-items: center;
17
  gap: 0.5rem;
18
  padding: 0.5rem 1rem;
19
  border: 2px solid var(--border-primary);
20
  border-radius: 50px;
21
  cursor: pointer;
22
  transition: all 200ms ease;
23
  position: relative;
24
  overflow: hidden;
25
  margin-bottom: 0.5rem;
26
  &:hover {
27
    border-color: var(--font-color);
28
    text-shadow: 0 0 1px var(--font-color);
29
  }
813 stevensc 30
`
5 stevensc 31
 
3017 stevensc 32
const SurveyForm = ({
33
  active = false,
34
  question = '¿Cómo consideras el ambiente laboral?',
35
  answers = [],
36
  votes = [],
37
  time = 0,
38
  voteUrl = '/feed/vote/d454717c-ba6f-485c-b94c-4fbb5f5bed94',
39
  resultType = 'pu'
40
}) => {
3018 stevensc 41
  const { control, handleSubmit } = useForm()
5 stevensc 42
 
3014 stevensc 43
  const sendVote = handleSubmit(({ vote }) => {
44
    const formData = new FormData()
45
    formData.append('vote', vote)
46
 
47
    axios
48
      .post(voteUrl, formData)
49
      .then(({ data: response }) => {
50
        const { success, data } = response
51
 
52
        if (!success) {
53
          const errorMessage =
54
            typeof data === 'string'
55
              ? data
56
              : 'Error interno, por favor intente mas tarde.'
57
          throw new Error(errorMessage)
58
        }
59
 
60
        updateFeed({ feed: data, uuid: data.feed_uuid })
61
        addNotification({ style: 'success', msg: 'Voto emitido con exito' })
62
      })
63
      .catch((err) => {
64
        addNotification({ style: 'danger', msg: err.message })
65
      })
66
  })
67
 
3017 stevensc 68
  console.log({
69
    active,
70
    question,
71
    answers,
72
    votes,
73
    time,
74
    voteUrl,
75
    resultType
76
  })
3014 stevensc 77
 
3017 stevensc 78
  return (
79
    <Widget>
80
      <Widget.Body>
81
        <Typography variant='h3'>{question}</Typography>
3014 stevensc 82
 
3017 stevensc 83
        {resultType === 'pu' ? (
84
          <Typography
85
            variant='overline'
86
            title='El número de votos es visible para todos los usuarios'
87
          >
88
            <Public /> Público
89
          </Typography>
90
        ) : (
91
          <Typography
92
            variant='overline'
93
            title='Los resultados de la votación son privados'
94
          >
95
            <LockClock /> Privado
96
          </Typography>
97
        )}
3014 stevensc 98
 
3017 stevensc 99
        <form onChange={sendVote} className={styles.survey_form}>
100
          {answers.map((answer, index) => {
101
            if (answer === null) return null
3014 stevensc 102
 
3017 stevensc 103
            return (
3018 stevensc 104
              <AnswerContainer key={answer}>
105
                <CheckboxInput
3017 stevensc 106
                  name='vote'
107
                  value={index + 1}
3018 stevensc 108
                  label={answer}
109
                  control={control}
3017 stevensc 110
                />
3018 stevensc 111
 
3017 stevensc 112
                {/*  {!!totalVotes && (
3015 stevensc 113
              <span className='mb-0'>
114
                {getPorcentage(votes[index], totalVotes)}%
115
              </span>
116
            )} */}
3018 stevensc 117
              </AnswerContainer>
3017 stevensc 118
            )
119
          })}
3018 stevensc 120
 
121
          <Typography variant='overline'>Tiempo restante: </Typography>
122
 
123
          {!active && (
124
            <Typography variant='overline'>
125
              El formulario ya ha finalizado
126
            </Typography>
127
          )}
3017 stevensc 128
        </form>
129
      </Widget.Body>
130
    </Widget>
813 stevensc 131
  )
132
}
5 stevensc 133
 
2969 stevensc 134
export default SurveyForm