Rev 561 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from "react";
import Question from "../question/Question";
const Section = (props) => {
// get props
const { section, backendVars, page, setPage, total, index } = props;
//init states
const [errors, setErrors] = useState([]);
/**
* Check if there are questions to answer
* @returns
*/
const validateSection = () => {
setErrors([]);
let formValid = true;
let messages = [];
section.questions.map((question) => {
//Validate if the answer is empty
if (!question.answer || question.answer.length == 0) {
// set error message
messages.push(backendVars.LBL_EMPTY_ANSWER.replace('%n', question.position + 1));
formValid = false;
}
});
setErrors(messages);
return formValid;
}
/**
* Return to previous section
* @returns
*/
const handlePrevious = () => {
setErrors([]);
setPage(page - 1);
};
/**
* Continue to the next section
*/
const handleNext = () => validateSection() && setPage(page + 1);
return (
<div className="panel-group" hidden={page == index ? false : true}>
<div className="panel panel-default" id={`panel-${section.slug_section}`}>
<div className="panel-heading">
<h4 className="panel-title">{section.name}</h4>
</div>
<div id={section.slug_section} className="panel-collapse in collapse show">
<div className="panel-body">
<div
dangerouslySetInnerHTML={{ __html: section.text }}
className="description"
/>
<div className="row">
{section.questions.map((question, i) => {
return <Question
question={question}
key={i}
backendVars={backendVars}
/>;
})}
</div>
<div className="row">
{errors.length > 0 &&
<div className="col-md-12 np-padding">
{errors.map((error, index) => {
return (
<div className="alert alert-danger alert-dismissible fade show" role="alert" key={index}>
{error}
<button type="button" className="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>);
})}
</div>
}
<div className="col-md-12 np-padding">
<ul className="wizard">
<li className="previous">
{index != 0 &&
<button
type="button"
className="btn btn-secondary"
onClick={() => handlePrevious()}
>
{backendVars.LBL_EVALUATION_TEST_FORM_PREVIOUS}
</button>
}
</li>
<li className="next">
{index != total - 1 &&
<button
type="button"
onClick={() => handleNext()}
className="btn btn-secondary">
{backendVars.LBL_EVALUATION_TEST_FORM_NEXT}
</button>
}
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default Section;