Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
364 geraldo 1
import React, { useState } from "react";
306 geraldo 2
import Question from "../question/Question";
3
 
4
const Section = (props) => {
307 geraldo 5
 
364 geraldo 6
    // get props
365 geraldo 7
    const { section, backendVars, handleAnswer, page, setPage, total } = props;
357 geraldo 8
 
364 geraldo 9
    //init states
365 geraldo 10
    const [errors, setErrors] = useState([]);
357 geraldo 11
 
360 geraldo 12
    /**
13
     * Check if there are questions to answer
14
     * @returns
15
     */
16
    const validateSection = () => {
370 geraldo 17
        setErrors([]);
360 geraldo 18
        let formValid = true;
366 geraldo 19
        let messages = [];
360 geraldo 20
        section.questions.map((question) => {
21
            //Validate if the answer is empty
381 geraldo 22
            if (!question.answer || question.answer.length == 0) {
366 geraldo 23
                // set error message
365 geraldo 24
                messages.push(backendVars.LBL_EMPTY_ANSWER.replace('%n', question.position + 1));
360 geraldo 25
                formValid = false;
26
            }
365 geraldo 27
        });
372 geraldo 28
        setErrors(messages);
360 geraldo 29
        return formValid;
30
    }
357 geraldo 31
 
364 geraldo 32
    /**
33
     * Return to previous section
34
     * @returns
35
     */
36
    const handlePrevious = () => setPage(page - 1);
37
 
38
 
39
    /**
40
     * Continue to the next section
41
     */
388 geraldo 42
    const handleNext = () =>{
43
 
44
        if(validateSection()){
45
            setPage(page + 1);
46
            setErrors([]);
47
        }
48
 
49
    }
378 geraldo 50
 
364 geraldo 51
 
306 geraldo 52
    return (
312 geraldo 53
 
364 geraldo 54
        <div className="panel-group" hidden={page == section.position ? false : true}>
312 geraldo 55
            <div className="panel panel-default" id={`panel-${section.slug_section}`}>
56
                <div className="panel-heading">
57
                    <h4 className="panel-title">
363 geraldo 58
                        <a>{section.name}</a>
312 geraldo 59
                    </h4>
60
                </div>
61
                <div id={section.slug_section} className="panel-collapse in collapse show">
62
                    <div className="panel-body">
63
                        <div
64
                            dangerouslySetInnerHTML={{ __html: section.text }}
65
                            className="description"
66
                        />
67
                        <div className="row">
357 geraldo 68
                            {section.questions.map((question, i) => {
332 geraldo 69
                                return <Question
70
                                    question={question}
357 geraldo 71
                                    key={i}
332 geraldo 72
                                    backendVars={backendVars}
342 geraldo 73
                                    handleAnswer={handleAnswer}
332 geraldo 74
                                />;
312 geraldo 75
                            })}
76
                        </div>
357 geraldo 77
                        <div className="row">
365 geraldo 78
                            {errors.length > 0 &&
79
                                <div className="col-md-12 np-padding">
374 geraldo 80
                                    {errors.map((error, index) => {
372 geraldo 81
                                        return (
365 geraldo 82
                                        <div class="alert alert-danger" role="alert" key={index}>
83
                                            {error}
372 geraldo 84
                                        </div>);
365 geraldo 85
                                    })}
364 geraldo 86
                                </div>
365 geraldo 87
                            }
367 geraldo 88
                            <div className="col-md-12 np-padding">
363 geraldo 89
                                <ul class="wizard">
368 geraldo 90
                                    <li class="previous">
91
                                        {section.position != 0 &&
365 geraldo 92
                                            <button
93
                                                type="button"
94
                                                className="btn btn-secondary"
95
                                                onClick={() => handlePrevious()}
96
                                            >
97
                                                {backendVars.LBL_SELF_EVALUATION_TEST_FORM_PREVIOUS}
98
                                            </button>
368 geraldo 99
                                        }
100
                                    </li>
101
                                    <li class="next">
102
                                        {section.position != total - 1 &&
365 geraldo 103
                                            <button
104
                                                type="button"
105
                                                onClick={() => handleNext()}
106
                                                className="btn btn-secondary">
107
                                                {backendVars.LBL_SELF_EVALUATION_TEST_FORM_NEXT}
108
                                            </button>
368 geraldo 109
                                        }
110
                                    </li>
359 geraldo 111
                                </ul>
357 geraldo 112
                            </div>
113
                        </div>
312 geraldo 114
                    </div>
115
                </div>
306 geraldo 116
            </div>
117
        </div>
118
    )
119
}
120
 
121
export default Section;