Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
456 geraldo 1
import React, { useState, useEffect } from "react";
306 geraldo 2
 
3
const Option = (props) => {
315 geraldo 4
 
306 geraldo 5
    // get props
456 geraldo 6
    const { question } = props;
306 geraldo 7
 
456 geraldo 8
    // init States
9
    const [input, setInput] = useState(question.answer);
10
 
11
    /**
12
     * Update question answer
13
     * @param {*} answer
14
     */
15
    const handleAnswerSimple = (value) => {
16
        setInput(value);
17
        question.answer = value;
18
    }
19
 
20
    /**
21
     * Update question answer
22
     * @param {*} answer
23
     */
24
    const handleAnswerMultiple = (value) => {
25
 
26
        question.answer.includes(value) ?
27
            question.answer = removeOptionMultiple(question.answer, value) :
28
            question.answer.push(value)
29
        setInput(question.answer);
30
    }
31
 
32
    /**
33
     * componentDidMount
34
     */
35
    useEffect(() => {
36
        setInput(question.answer);
37
        console.log(question.answer);
38
    }, [question]);
39
 
40
    /**
41
     * Delete existing option
42
     * @param {*} arr
43
     * @param {*} item
44
     * @returns
45
     */
46
    const removeOptionMultiple = (arr, item) => arr.splice(arr.indexOf(item), 1);
47
 
306 geraldo 48
    return (
49
        <div>
319 geraldo 50
            {question.options.map((opt, key) => {
51
                return (
320 geraldo 52
                    <div className="checkbox"
53
                        key={key}>
321 geraldo 54
 
55
                        {question.type == 'multiple' &&
56
 
57
                            <input
58
                                type="checkbox"
59
                                name={`${opt.slug_option}[]`}
456 geraldo 60
                                value={input}
61
                                checked={input.includes(opt.slug_option)}
62
                                onChange={() => handleAnswerMultiple(opt.slug_option)}
344 geraldo 63
                            />
321 geraldo 64
                        }
65
                        {question.type != 'multiple' &&
66
                            <input
67
                                type="radio"
328 geraldo 68
                                name={`${opt.slug_question}`}
342 geraldo 69
                                value={opt.slug_option}
456 geraldo 70
                                checked={input == opt.slug_option}
71
                                onChange={() => handleAnswerSimple(opt.slug_option)}
342 geraldo 72
                            />
321 geraldo 73
                        }
319 geraldo 74
                        <div
75
                            dangerouslySetInnerHTML={{ __html: opt.text }}
76
                            className="option"
77
                        />
78
                    </div>
79
                )
80
            })}
306 geraldo 81
        </div>
82
 
83
    )
84
}
85
 
86
export default Option;