Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
2970 stevensc 1
import React, { useEffect, useMemo, useRef, useState } from 'react'
813 stevensc 2
import { useForm } from 'react-hook-form'
2970 stevensc 3
import { styled } from '@mui/material'
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'
11
 
2969 stevensc 12
const RadioButton = styled('div')`
5 stevensc 13
  display: flex;
14
  align-items: center;
15
  gap: 0.5rem;
16
  padding: 0.5rem 1rem;
17
  border: 2px solid var(--border-primary);
18
  border-radius: 50px;
19
  cursor: pointer;
20
  transition: all 200ms ease;
21
  position: relative;
22
  overflow: hidden;
23
  margin-bottom: 0.5rem;
24
  input {
25
    margin: 0 !important;
26
  }
27
  label {
28
    color: var(--font-color);
29
    font-weight: 500;
30
  }
31
  &::before {
813 stevensc 32
    content: '';
5 stevensc 33
    position: absolute;
34
    left: 0;
35
    top: 0;
36
    height: 100%;
813 stevensc 37
    width: ${(props) => (props.porcentage ? `${props.porcentage}%` : '0%')};
5 stevensc 38
    background-color: #0002;
39
    z-index: 4;
40
  }
41
  &:hover {
42
    border-color: var(--font-color);
43
    text-shadow: 0 0 1px var(--font-color);
44
  }
813 stevensc 45
`
5 stevensc 46
 
2969 stevensc 47
const VoteTag = styled('span')`
5 stevensc 48
  position: absolute;
49
  bottom: 1rem;
50
  right: 1rem;
51
  color: var(--font-color) !important;
52
  font-weight: 600;
813 stevensc 53
`
5 stevensc 54
 
2970 stevensc 55
const SurveyForm = ({
56
  active = 0,
57
  question = '¿Cómo consideras el ambiente laboral?',
58
  answers = ['Excelente', 'Regular', null, null, null],
59
  votes = [null, null, null, null, null],
60
  time = 0,
61
  voteUrl = '/feed/vote/d454717c-ba6f-485c-b94c-4fbb5f5bed94',
62
  resultType
63
}) => {
813 stevensc 64
  const [remainingTime, setRemainingTime] = useState('00:00:00')
65
  const [isActive, setIsActive] = useState(true)
66
  const timeRef = useRef(time)
2970 stevensc 67
 
813 stevensc 68
  const { register, handleSubmit } = useForm()
5 stevensc 69
 
2970 stevensc 70
  const totalVotes = useMemo(
71
    () =>
72
      votes.reduce((curr, next) => {
73
        if (next === null) return curr
74
        return curr + next
75
      }, 0),
76
    [votes]
77
  )
78
 
5 stevensc 79
  return (
3013 stevensc 80
    <form onChange={handleSubmit} className={styles.survey_form}>
5 stevensc 81
      <h3>{question}</h3>
813 stevensc 82
      {resultType === 'pu' && (
5 stevensc 83
        <span
813 stevensc 84
          className='mb-2'
85
          title='El número de votos es visible para todos los usuarios'
5 stevensc 86
        >
2969 stevensc 87
          <Public /> Público
5 stevensc 88
        </span>
89
      )}
813 stevensc 90
      {resultType === 'pr' && (
5 stevensc 91
        <span
813 stevensc 92
          className='mb-2'
93
          title='Los resultados de la votación son privados'
5 stevensc 94
        >
2969 stevensc 95
          <LockClock /> Privado
5 stevensc 96
        </span>
97
      )}
98
      {answers.map(
99
        (option, index) =>
100
          option && (
2970 stevensc 101
            <RadioButton disabled={!isActive} key={index}>
5 stevensc 102
              <input
813 stevensc 103
                type='radio'
104
                name='vote'
5 stevensc 105
                id={`vote-${index + 1}`}
106
                disabled={!isActive}
107
                ref={register({ required: true })}
108
                value={index + 1}
109
              />
110
              <label htmlFor={`vote-${index + 1}`}>{option}</label>
3013 stevensc 111
              {!!totalVotes && <span className='mb-0'>1</span>}
5 stevensc 112
            </RadioButton>
113
          )
114
      )}
115
      <span>Tiempo restante: {remainingTime}</span>
116
      {!isActive && <VoteTag>Tu voto ya fue emitido</VoteTag>}
117
    </form>
813 stevensc 118
  )
119
}
5 stevensc 120
 
2969 stevensc 121
export default SurveyForm