Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
628 geraldo 1
import React, { useState, useEffect } from "react";
2
import Option from "../behavior/Option";
3
 
4
const Competency = (props) => {
5
 
6
    // get props
7
    const { competency, backendVars, page, setPage, total, index } = props;
8
 
9
    //init states
10
    const [errors, setErrors] = useState([]);
11
    const [input, setInput] = useState(competency.answer);
12
 
13
 
14
    /**
15
     * Check if there are behaviors to answer
16
     * @returns
17
     */
18
    const validateCompetency = () => {
19
        setErrors([]);
20
        let formValid = true;
21
        let messages = [];
22
            competency.behaviors.map((behavior) => {
23
                //Validate if the answer is empty
24
                if (!behavior.answer || behavior.answer.length == 0) {
25
                    messages.push(backendVars.LBL_ERROR_FIELDS_EMPTY);
26
                    formValid = false;
27
                }
28
            });
29
 
30
        setErrors(messages);
31
        return formValid;
32
    }
33
 
34
    /**
35
     * Return to previous competency
36
     * @returns
37
     */
38
    const handlePrevious = () => {
39
        setErrors([]);
40
        setPage(page - 1);
41
    };
42
 
43
    /**
44
     * Update competency answer
45
     * @param {*} value
46
     */
47
    const handleAnswer = (value) => {
48
        setInput(value);
49
        competency.answer = value;
50
    }
51
 
52
 
53
    /**
54
     * Continue to the next competency
55
     */
56
    const handleNext = () => validateCompetency() && setPage(page + 1);
57
 
58
    /**
59
     * componentDidMount
60
     */
61
    useEffect(() => {
62
        setInput(competency.answer);
63
    }, [competency]);
64
 
65
 
66
    return (
67
        <div className="panel-group" hidden={page == index ? false : true}>
68
            <div className="panel panel-default" id={`panel-${competency.competency_id}`}>
69
                <div className="panel-heading">
70
                    <h4 className="panel-title">{competency.type} {competency.name}</h4>
71
                </div>
72
                <div id={competency.competency_id} className="panel-collapse in collapse show">
73
                    <div className="panel-body">
74
 
75
 
76
                        <div
77
                            dangerouslySetInnerHTML={{ __html: competency.description }}
78
                            className="description"
79
                        />>
80
 
81
 
82
                        <div className="row">
83
 
84
                                <div className="col-md-12 col-sm-12 col-xs-12 np-padding">
85
                                    {competency.behaviors.length > 0 &&
86
                                        <div className="col-md-12 col-sm-12 col-xs-12 np-padding">
87
                                            {competency.behaviors.map((behavior, i) => {
88
                                                return <Option
89
                                                    behavior={behavior}
90
                                                    key={i}
91
                                                    handleAnswer={handleAnswer}
92
                                                />
93
 
94
                                            })}
95
                                        </div>}
96
                                </div>
97
 
98
                        </div>
99
 
100
                        <div className="row">
101
                            {errors.length > 0 &&
102
                                <div className="col-md-12 np-padding">
103
                                    {errors.map((error, index) => {
104
                                        return (
105
                                            <div className="alert alert-danger alert-dismissible fade show" role="alert" key={index}>
106
                                                {error}
107
                                                <button type="button" className="close" data-dismiss="alert" aria-label="Close">
108
                                                    <span aria-hidden="true">&times;</span>
109
                                                </button>
110
                                            </div>);
111
                                    })}
112
                                </div>
113
                            }
114
                            <div className="col-md-12 np-padding">
115
                                <ul className="wizard">
116
                                    <li className="previous">
117
                                        {index != 0 &&
118
                                            <button
119
                                                type="button"
120
                                                className="btn btn-secondary"
121
                                                onClick={() => handlePrevious()}
122
                                            >
123
                                                {backendVars.LBL_EVALUATION_TEST_FORM_PREVIOUS}
124
                                            </button>
125
                                        }
126
                                    </li>
127
                                    <li className="next">
128
                                        {index != total - 1 &&
129
                                            <button
130
                                                type="button"
131
                                                onClick={() => handleNext()}
132
                                                className="btn btn-secondary">
133
                                                {backendVars.LBL_EVALUATION_TEST_FORM_NEXT}
134
                                            </button>
135
                                        }
136
                                    </li>
137
                                </ul>
138
                            </div>
139
                        </div>
140
                    </div>
141
                </div>
142
            </div>
143
        </div>
144
    )
145
}
146
 
147
export default Competency;