Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 450 | Rev 457 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 450 Rev 456
Línea 1... Línea 1...
1
import React from "react";
1
import React, { useState, useEffect } from "react";
Línea 2... Línea 2...
2
 
2
 
Línea 3... Línea 3...
3
const Option = (props) => {
3
const Option = (props) => {
4
 
4
 
-
 
5
    // get props
-
 
6
    const { question } = props;
-
 
7
 
-
 
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 
Línea 5... Línea 45...
5
    // get props
45
     */
6
    const { question, handleAnswer } = props;
46
    const removeOptionMultiple = (arr, item) => arr.splice(arr.indexOf(item), 1);
7
 
47
 
8
    return (
48
    return (
Línea 15... Línea 55...
15
                        {question.type == 'multiple' &&
55
                        {question.type == 'multiple' &&
Línea 16... Línea 56...
16
 
56
 
17
                            <input
57
                            <input
18
                                type="checkbox"
58
                                type="checkbox"
19
                                name={`${opt.slug_option}[]`}
59
                                name={`${opt.slug_option}[]`}
20
                                value={opt.slug_option}
60
                                value={input}
21
                                checked={question.answer.includes(opt.slug_option)}
61
                                checked={input.includes(opt.slug_option)}
22
                                onChange={() => handleAnswer(question.slug_section, question.slug_question, opt.slug_option)}
62
                                onChange={() => handleAnswerMultiple(opt.slug_option)}
23
                            />
63
                            />
24
                        }
64
                        }
25
                        {question.type != 'multiple' &&
65
                        {question.type != 'multiple' &&
26
                            <input
66
                            <input
27
                                type="radio"
67
                                type="radio"
28
                                name={`${opt.slug_question}`}
68
                                name={`${opt.slug_question}`}
29
                                value={opt.slug_option}
69
                                value={opt.slug_option}
30
                                checked={question.answer == opt.slug_option}
70
                                checked={input == opt.slug_option}
31
                                onChange={() => handleAnswer(question.slug_section, question.slug_question, opt.slug_option)}
71
                                onChange={() => handleAnswerSimple(opt.slug_option)}
32
                            />
72
                            />
33
                        }
73
                        }
34
                        <div
74
                        <div
35
                            dangerouslySetInnerHTML={{ __html: opt.text }}
75
                            dangerouslySetInnerHTML={{ __html: opt.text }}