Aucune description

Questions.tsx 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. import {
  2. IonPage,
  3. IonContent,
  4. IonHeader,
  5. IonTitle,
  6. IonToolbar,
  7. IonFooter,
  8. IonImg,
  9. IonItem,
  10. IonLabel,
  11. IonList,
  12. IonCard,
  13. IonCardContent,
  14. IonCardHeader,
  15. IonCardSubtitle,
  16. IonCardTitle,
  17. IonButton,
  18. IonGrid,
  19. IonRow,
  20. IonCol,
  21. IonButtons,
  22. IonBackButton,
  23. useIonViewWillEnter,
  24. IonRadioGroup,
  25. IonRadio,
  26. IonIcon,
  27. IonChip
  28. } from '@ionic/react';
  29. import { useParams } from 'react-router';
  30. import React, { useState } from 'react';
  31. import './Questions.css';
  32. import EnciclopediaPR from '../assets/EnciclopediaPR.png';
  33. import RobertoClemente from '../assets/RobertoClemente.jpg';
  34. import { QuizInfo, getQuiz } from '../data/QuizInfo';
  35. import { thumbsDown, thumbsUp } from 'ionicons/icons';
  36. const Questions: React.FC = () => {
  37. // Estados para respuestas seleccionadas
  38. const [qres1, setQRes1] = useState();
  39. const [qres2, setQRes2] = useState();
  40. const [qres3, setQRes3] = useState();
  41. const [qres4, setQRes4] = useState();
  42. // Arreglos para saber cual radio se selecciono en cada pregunta
  43. const selected1:boolean[] = [false, false, false, false];
  44. const selected2:boolean[] = [false, false, false, false];
  45. const selected3:boolean[] = [false, false, false, false];
  46. const selected4:boolean[] = [false, false, false, false];
  47. // Estados para seleccionar iconos de las respuestas seleccionadas
  48. const [icon11, setIcon11] = useState<any>();
  49. const [icon12, setIcon12] = useState<any>();
  50. const [icon13, setIcon13] = useState<any>();
  51. const [icon14, setIcon14] = useState<any>();
  52. const [icon21, setIcon21] = useState<any>();
  53. const [icon22, setIcon22] = useState<any>();
  54. const [icon23, setIcon23] = useState<any>();
  55. const [icon24, setIcon24] = useState<any>();
  56. const [icon31, setIcon31] = useState<any>();
  57. const [icon32, setIcon32] = useState<any>();
  58. const [icon33, setIcon33] = useState<any>();
  59. const [icon34, setIcon34] = useState<any>();
  60. const [icon41, setIcon41] = useState<any>();
  61. const [icon42, setIcon42] = useState<any>();
  62. const [icon43, setIcon43] = useState<any>();
  63. const [icon44, setIcon44] = useState<any>();
  64. // Estado para contar cuantas preguntas correctas se obtuvieron
  65. const [countres, setCountRes] = useState<number>(0);
  66. const [verResPresionado, setVerResPresionado] = useState<boolean>(false);
  67. /* verificarRes()
  68. Funcion se encarga de verificar si las respuestas seleccionadas
  69. son correctas. Despliega ThumbsUp para seleccion correcta,
  70. ThumbsDowmn para seleccion incorrecta.
  71. */
  72. const verificarRes = () => {
  73. // borrar console logs para el release
  74. console.log([qres1, qres2, qres3, qres4]);
  75. console.log(countres);
  76. // reset a los icons, count por si hubo seleccion anterior
  77. let count = 0;
  78. setCountRes(count);
  79. setVerResPresionado(true); // buton verificar respuestas precionado
  80. setIcon11(null);
  81. setIcon12(null);
  82. setIcon13(null);
  83. setIcon14(null);
  84. setIcon21(null);
  85. setIcon22(null);
  86. setIcon23(null);
  87. setIcon24(null);
  88. setIcon31(null);
  89. setIcon32(null);
  90. setIcon33(null);
  91. setIcon34(null);
  92. setIcon41(null);
  93. setIcon42(null);
  94. setIcon43(null);
  95. setIcon44(null);
  96. // loop para saber que radio escogio el usuario en cada pregunta
  97. let num: number = 0;
  98. let i: number;
  99. for(i = num; i<4; i++){
  100. if(qres1 === quizInfo?.res1[i]){
  101. selected1[i] = true;
  102. }
  103. if(qres2 === quizInfo?.res2[i]){
  104. selected2[i] = true;
  105. }
  106. if(qres3 === quizInfo?.res3[i]){
  107. selected3[i] = true;
  108. }
  109. if(qres4 === quizInfo?.res4[i]){
  110. selected4[i] = true;
  111. }
  112. }
  113. // Para seleccionar si sale icono correccto o incorrecto en seleccion
  114. // de radio.
  115. // ======================= PREGUNTA 1 =========================================
  116. // SI usuario seleccionio el primer radio en la pregunta 1
  117. if(selected1[0] && quizInfo?.res1[0] === quizInfo?.correcta1){
  118. setIcon11(<IonIcon icon={thumbsUp} />);
  119. //setCountRes(countres + 1);
  120. count++;
  121. }
  122. else if (selected1[0] && quizInfo?.res1[0] !== quizInfo?.correcta1){
  123. setIcon11(<IonIcon icon={thumbsDown} />)
  124. }
  125. // SI usuario seleccionio el segundo radio en la pregunta 1
  126. if(selected1[1] && quizInfo?.res1[1] === quizInfo?.correcta1){
  127. setIcon12(<IonIcon icon={thumbsUp} />);
  128. //setCountRes(countres + 1);
  129. count++;
  130. }
  131. else if (selected1[1] && quizInfo?.res1[1] !== quizInfo?.correcta1){
  132. setIcon12(<IonIcon icon={thumbsDown} />)
  133. }
  134. // SI usuario seleccionio el tercer radio en la pregunta 1
  135. if(selected1[2] && quizInfo?.res1[2] === quizInfo?.correcta1){
  136. setIcon13(<IonIcon icon={thumbsUp} />);
  137. //setCountRes(countres + 1);
  138. count++;
  139. }
  140. else if (selected1[2] && quizInfo?.res1[2] !== quizInfo?.correcta1){
  141. setIcon13(<IonIcon icon={thumbsDown} />)
  142. }
  143. // SI usuario seleccionio el cuarto radio en la pregunta 1
  144. if(selected1[3] && quizInfo?.res1[3] === quizInfo?.correcta1){
  145. setIcon14(<IonIcon icon={thumbsUp} />);
  146. //setCountRes(countres + 1);
  147. count++;
  148. }
  149. else if (selected1[3] && quizInfo?.res1[3] !== quizInfo?.correcta1){
  150. setIcon14(<IonIcon icon={thumbsDown} />)
  151. }
  152. // ======================= PREGUNTA 1 =========================================
  153. // ======================= PREGUNTA 2 =========================================
  154. // SI usuario seleccionio el primer radio en la pregunta 2
  155. if(selected2[0] && quizInfo?.res2[0] === quizInfo?.correcta2){
  156. setIcon21(<IonIcon icon={thumbsUp} />);
  157. //setCountRes(countres + 1);
  158. count++;
  159. }
  160. else if (selected2[0] && quizInfo?.res2[0] !== quizInfo?.correcta2){
  161. setIcon21(<IonIcon icon={thumbsDown} />)
  162. }
  163. // SI usuario seleccionio el segundo radio en la pregunta 2
  164. if(selected2[1] && quizInfo?.res2[1] === quizInfo?.correcta2){
  165. setIcon22(<IonIcon icon={thumbsUp} />);
  166. //setCountRes(countres + 1);
  167. count++;
  168. }
  169. else if (selected2[1] && quizInfo?.res2[1] !== quizInfo?.correcta2){
  170. setIcon22(<IonIcon icon={thumbsDown} />)
  171. }
  172. // SI usuario seleccionio el tercer radio en la pregunta 2
  173. if(selected2[2] && quizInfo?.res2[2] === quizInfo?.correcta2){
  174. setIcon23(<IonIcon icon={thumbsUp} />);
  175. //setCountRes(countres + 1);
  176. count++;
  177. }
  178. else if (selected2[2] && quizInfo?.res2[2] !== quizInfo?.correcta2){
  179. setIcon23(<IonIcon icon={thumbsDown} />)
  180. }
  181. // SI usuario seleccionio el cuarto radio en la pregunta 2
  182. if(selected2[3] && quizInfo?.res2[3] === quizInfo?.correcta2){
  183. setIcon24(<IonIcon icon={thumbsUp} />);
  184. //setCountRes(countres + 1);
  185. count++;
  186. }
  187. else if (selected2[3] && quizInfo?.res2[3] !== quizInfo?.correcta2){
  188. setIcon24(<IonIcon icon={thumbsDown} />)
  189. }
  190. // ======================= PREGUNTA 2 =========================================
  191. // ======================= PREGUNTA 3 =========================================
  192. // SI usuario seleccionio el primer radio en la pregunta 3
  193. if(selected3[0] && quizInfo?.res3[0] === quizInfo?.correcta3){
  194. setIcon31(<IonIcon icon={thumbsUp} />);
  195. //setCountRes(countres + 1);
  196. count++;
  197. }
  198. else if (selected3[0] && quizInfo?.res3[0] !== quizInfo?.correcta3){
  199. setIcon31(<IonIcon icon={thumbsDown} />)
  200. }
  201. // SI usuario seleccionio el segundo radio en la pregunta 3
  202. if(selected3[1] && quizInfo?.res3[1] === quizInfo?.correcta3){
  203. setIcon32(<IonIcon icon={thumbsUp} />);
  204. //setCountRes(countres + 1);
  205. count++;
  206. }
  207. else if (selected3[1] && quizInfo?.res3[1] !== quizInfo?.correcta3){
  208. setIcon32(<IonIcon icon={thumbsDown} />)
  209. }
  210. // SI usuario seleccionio el tercer radio en la pregunta 3
  211. if(selected3[2] && quizInfo?.res3[2] === quizInfo?.correcta3){
  212. setIcon33(<IonIcon icon={thumbsUp} />);
  213. //setCountRes(countres + 1);
  214. count++;
  215. }
  216. else if (selected3[2] && quizInfo?.res3[2] !== quizInfo?.correcta3){
  217. setIcon33(<IonIcon icon={thumbsDown} />)
  218. }
  219. // SI usuario seleccionio el cuerto radio en la pregunta 3
  220. if(selected3[3] && quizInfo?.res3[3] === quizInfo?.correcta3){
  221. setIcon34(<IonIcon icon={thumbsUp} />);
  222. //setCountRes(countres + 1);
  223. count++;
  224. }
  225. else if (selected3[3] && quizInfo?.res3[3] !== quizInfo?.correcta3){
  226. setIcon34(<IonIcon icon={thumbsDown} />)
  227. }
  228. // ======================= PREGUNTA 3 =========================================
  229. // ======================= PREGUNTA 4 =========================================
  230. // SI usuario seleccionio el primer radio en la pregunta 4
  231. if(selected4[0] && quizInfo?.res4[0] === quizInfo?.correcta4){
  232. setIcon41(<IonIcon icon={thumbsUp} />);
  233. //setCountRes(countres + 1);
  234. count++;
  235. }
  236. else if (selected4[0] && quizInfo?.res4[0] !== quizInfo?.correcta4){
  237. setIcon41(<IonIcon icon={thumbsDown} />)
  238. }
  239. // SI usuario seleccionio el segundo radio en la pregunta 4
  240. if(selected4[1] && quizInfo?.res4[1] === quizInfo?.correcta4){
  241. setIcon42(<IonIcon icon={thumbsUp} />);
  242. //setCountRes(countres + 1);
  243. count++;
  244. }
  245. else if (selected4[1] && quizInfo?.res4[1] !== quizInfo?.correcta4){
  246. setIcon42(<IonIcon icon={thumbsDown} />)
  247. }
  248. // SI usuario seleccionio el tercer radio en la pregunta 4
  249. if(selected4[2] && quizInfo?.res4[2] === quizInfo?.correcta4){
  250. setIcon43(<IonIcon icon={thumbsUp} />);
  251. //setCountRes(countres + 1);
  252. count++;
  253. }
  254. else if (selected4[2] && quizInfo?.res4[2] !== quizInfo?.correcta4){
  255. setIcon43(<IonIcon icon={thumbsDown} />)
  256. }
  257. // SI usuario seleccionio el cuarto radio en la pregunta 4
  258. if(selected4[3] && quizInfo?.res4[3] === quizInfo?.correcta4){
  259. setIcon44(<IonIcon icon={thumbsUp} />);
  260. //setCountRes(countres + 1);
  261. count++;
  262. }
  263. else if (selected4[3] && quizInfo?.res4[3] !== quizInfo?.correcta4){
  264. setIcon44(<IonIcon icon={thumbsDown} />)
  265. }
  266. // ======================= PREGUNTA 4 =========================================
  267. // Para saber cueantas resspuestas acertó el usuario
  268. setCountRes(count);
  269. };
  270. // State para desplegar la info del quiz
  271. const [quizInfo, setQuiz] = useState<QuizInfo>();
  272. const params = useParams<{ id: string }>();
  273. useIonViewWillEnter(() => {
  274. const quiz = getQuiz(parseInt(params.id, 10));
  275. setQuiz(quiz);
  276. });
  277. return (
  278. <IonPage>
  279. <IonHeader>
  280. <IonToolbar className="Header-Color">
  281. <IonGrid fixed={true}>
  282. <IonRow>
  283. <IonCol></IonCol>
  284. <IonCol>
  285. <IonImg style={{ height: 50, width: 100 }} src={EnciclopediaPR} alt='Logo'></IonImg>
  286. <IonTitle>Quiz</IonTitle>
  287. </IonCol>
  288. <IonCol></IonCol>
  289. </IonRow>
  290. </IonGrid>
  291. </IonToolbar>
  292. </IonHeader>
  293. <IonContent fullscreen className="ion-padding">
  294. <IonImg style={{ height: 300, width: 600 }} src={RobertoClemente} alt='Logo'></IonImg>
  295. {
  296. quizInfo ?
  297. <>
  298. <h1>Quiz sobre la biografia de {quizInfo.title}</h1>
  299. <p>Marque una respuesta por pregunta</p>
  300. <IonCard>
  301. <IonCardHeader>
  302. <IonCardTitle>{quizInfo.pregunta1}</IonCardTitle>
  303. <IonCardSubtitle></IonCardSubtitle>
  304. </IonCardHeader>
  305. <IonCardContent>
  306. <IonList>
  307. <IonRadioGroup value={qres1} onIonChange={(e) => setQRes1(e.detail.value)}>
  308. <IonItem>
  309. <IonLabel>{quizInfo.res1[0]}</IonLabel>
  310. <IonRadio slot="end" value={quizInfo.res1[0]}></IonRadio>
  311. {icon11}
  312. </IonItem>
  313. <IonItem>
  314. <IonLabel>{quizInfo.res1[1]}</IonLabel>
  315. <IonRadio slot="end" value={quizInfo.res1[1]}></IonRadio>
  316. {icon12}
  317. </IonItem>
  318. <IonItem>
  319. <IonLabel>{quizInfo.res1[2]}</IonLabel>
  320. <IonRadio slot="end" value={quizInfo.res1[2]}></IonRadio>
  321. {icon13}
  322. </IonItem>
  323. <IonItem>
  324. <IonLabel>{quizInfo.res1[3]}</IonLabel>
  325. <IonRadio slot="end" value={quizInfo.res1[3]}></IonRadio>
  326. {icon14}
  327. </IonItem>
  328. </IonRadioGroup>
  329. </IonList>
  330. </IonCardContent>
  331. </IonCard>
  332. <IonCard>
  333. <IonCardHeader>
  334. <IonCardTitle>{quizInfo.pregunta2}</IonCardTitle>
  335. <IonCardSubtitle></IonCardSubtitle>
  336. </IonCardHeader>
  337. <IonCardContent>
  338. <IonList>
  339. <IonRadioGroup value={qres2} onIonChange={(e) => setQRes2(e.detail.value)}>
  340. <IonItem>
  341. <IonLabel>{quizInfo.res2[0]}</IonLabel>
  342. <IonRadio slot="end" value={quizInfo.res2[0]}></IonRadio>
  343. {icon21}
  344. </IonItem>
  345. <IonItem>
  346. <IonLabel>{quizInfo.res2[1]}</IonLabel>
  347. <IonRadio slot="end" value={quizInfo.res2[1]}></IonRadio>
  348. {icon22}
  349. </IonItem>
  350. <IonItem>
  351. <IonLabel>{quizInfo.res2[2]}</IonLabel>
  352. <IonRadio slot="end" value={quizInfo.res2[2]}></IonRadio>
  353. {icon23}
  354. </IonItem>
  355. <IonItem>
  356. <IonLabel>{quizInfo.res2[3]}</IonLabel>
  357. <IonRadio slot="end" value={quizInfo.res2[3]}></IonRadio>
  358. {icon24}
  359. </IonItem>
  360. </IonRadioGroup>
  361. </IonList>
  362. </IonCardContent>
  363. </IonCard>
  364. <IonCard>
  365. <IonCardHeader>
  366. <IonCardTitle>{quizInfo.pregunta3}</IonCardTitle>
  367. <IonCardSubtitle></IonCardSubtitle>
  368. </IonCardHeader>
  369. <IonCardContent>
  370. <IonList>
  371. <IonRadioGroup value={qres3} onIonChange={(e) => setQRes3(e.detail.value)}>
  372. <IonItem>
  373. <IonLabel>{quizInfo.res3[0]}</IonLabel>
  374. <IonRadio slot="end" value={quizInfo.res3[0]}></IonRadio>
  375. {icon31}
  376. </IonItem>
  377. <IonItem>
  378. <IonLabel>{quizInfo.res3[1]}</IonLabel>
  379. <IonRadio slot="end" value={quizInfo.res3[1]}></IonRadio>
  380. {icon32}
  381. </IonItem>
  382. <IonItem>
  383. <IonLabel>{quizInfo.res3[2]}</IonLabel>
  384. <IonRadio slot="end" value={quizInfo.res3[2]}></IonRadio>
  385. {icon33}
  386. </IonItem>
  387. <IonItem>
  388. <IonLabel>{quizInfo.res3[3]}</IonLabel>
  389. <IonRadio slot="end" value={quizInfo.res3[3]}></IonRadio>
  390. {icon34}
  391. </IonItem>
  392. </IonRadioGroup>
  393. </IonList>
  394. </IonCardContent>
  395. </IonCard>
  396. <IonCard>
  397. <IonCardHeader>
  398. <IonCardTitle>{quizInfo.pregunta4}</IonCardTitle>
  399. <IonCardSubtitle></IonCardSubtitle>
  400. </IonCardHeader>
  401. <IonCardContent>
  402. <IonList>
  403. <IonRadioGroup value={qres4} onIonChange={(e) => setQRes4(e.detail.value)}>
  404. <IonItem>
  405. <IonLabel>{quizInfo.res4[0]}</IonLabel>
  406. <IonRadio slot="end" value={quizInfo.res4[0]}></IonRadio>
  407. {icon41}
  408. </IonItem>
  409. <IonItem>
  410. <IonLabel>{quizInfo.res4[1]}</IonLabel>
  411. <IonRadio slot="end" value={quizInfo.res4[1]}></IonRadio>
  412. {icon42}
  413. </IonItem>
  414. <IonItem>
  415. <IonLabel>{quizInfo.res4[2]}</IonLabel>
  416. <IonRadio slot="end" value={quizInfo.res4[2]}></IonRadio>
  417. {icon43}
  418. </IonItem>
  419. <IonItem>
  420. <IonLabel>{quizInfo.res4[3]}</IonLabel>
  421. <IonRadio slot="end" value={quizInfo.res4[3]}></IonRadio>
  422. {icon44}
  423. </IonItem>
  424. </IonRadioGroup>
  425. </IonList>
  426. </IonCardContent>
  427. </IonCard>
  428. <IonItem lines="none">
  429. {verResPresionado ? (
  430. <>
  431. <IonChip>{countres} / 4 respuestas correctas</IonChip>
  432. </>
  433. ) : null }
  434. </IonItem>
  435. </> : <div>Quiz not found</div>
  436. }
  437. <IonButton onClick={verificarRes}>Verificar respuestas</IonButton>
  438. </IonContent>
  439. <IonFooter>
  440. <IonToolbar className="Footer-Color">
  441. <div className='Item-Center'>
  442. <IonButtons slot="start">
  443. <IonBackButton defaultHref="/ListBiographie"></IonBackButton>
  444. </IonButtons>
  445. </div>
  446. </IonToolbar>
  447. </IonFooter>
  448. </IonPage>
  449. );
  450. };
  451. export default Questions;