You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

questionnaire.js 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React from 'react';
  2. import url from '../server';
  3. import Question from './question';
  4. import QuestionnaireResult from './questionnaire_result';
  5. function Questionnaire(props){
  6. const [currentIndex, onMoveToIndex] = React.useState(0);
  7. const [questionnaireDataFetched, onQuestionnaireDataFetched] = React.useState(null);
  8. const [resultsAvailable, onQuestionnaireCompleted] = React.useState(false);
  9. //-------------------------------
  10. // Fetch questionnaire
  11. //-------------------------------
  12. if(null === questionnaireDataFetched)
  13. {
  14. fetch(url+"/questionnaire")
  15. .then(response => response.json())
  16. .then(result => {
  17. if('error' in result)
  18. console.error(result);
  19. onQuestionnaireDataFetched(result);
  20. })
  21. .catch( e => {
  22. console.log(e);
  23. });
  24. }
  25. if(!resultsAvailable)
  26. return (<React.Fragment>
  27. {
  28. null === questionnaireDataFetched ?
  29. <div> Questionnaire is loading </div>
  30. :
  31. <Question
  32. key={"question_"+currentIndex} //force throw away to ease radio buttons management
  33. sessionId={props.sessionId}
  34. questions={questionnaireDataFetched.questions}
  35. index={currentIndex}
  36. moveToQuestion={onMoveToIndex}
  37. questionnaireCompleted={onQuestionnaireCompleted}/>
  38. }
  39. <div>
  40. {
  41. currentIndex > 0 ? <div onClick={() => onMoveToIndex(currentIndex-1)}>Previous Question</div> : ''
  42. }
  43. {
  44. null != questionnaireDataFetched && currentIndex < questionnaireDataFetched.questions.length - 1 && 'answer' in questionnaireDataFetched.questions[currentIndex] &&
  45. <div onClick={() => onMoveToIndex(currentIndex+1)}>Next Question</div>
  46. }
  47. </div>
  48. </React.Fragment>
  49. )
  50. else
  51. return(
  52. <QuestionnaireResult sessionId={props.sessionId}/>
  53. )
  54. }
  55. export default Questionnaire;