Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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">&times;</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;