From 7f0c9b0a5f38e958cd7a5d91efe4ea9872737e8e Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 10:44:22 +0100 Subject: [PATCH 01/32] =?UTF-8?q?Primera=20version=20del=20un=20ejemplo=20?= =?UTF-8?q?con=20una=20pregunta=20y=20a=C3=B1adida=20un=20poco=20de=20nave?= =?UTF-8?q?gabilidad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/package-lock.json | 39 +++++++++++++++++++++++++ webapp/package.json | 1 + webapp/src/App.js | 2 +- webapp/src/components/FirstGame.css | 15 ++++++++++ webapp/src/components/FirstGame.js | 45 +++++++++++++++++++++++++++++ webapp/src/components/Login.js | 5 ++++ webapp/src/index.js | 21 +++++++++++++- 7 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 webapp/src/components/FirstGame.css create mode 100644 webapp/src/components/FirstGame.js diff --git a/webapp/package-lock.json b/webapp/package-lock.json index bcc358d5..a4595721 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -17,6 +17,7 @@ "axios": "^1.6.5", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.22.1", "react-scripts": "5.0.1", "web-vitals": "^3.5.1" }, @@ -5026,6 +5027,14 @@ "node": ">=12" } }, + "node_modules/@remix-run/router": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.1.tgz", + "integrity": "sha512-zcU0gM3z+3iqj8UX45AmWY810l3oUmXM7uH4dt5xtzvMhRtYVhKGOmgOd1877dOPPepfCjUv57w+syamWIYe7w==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -22030,6 +22039,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.22.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.1.tgz", + "integrity": "sha512-0pdoRGwLtemnJqn1K0XHUbnKiX0S4X8CgvVVmHGOWmofESj31msHo/1YiqcJWK7Wxfq2a4uvvtS01KAQyWK/CQ==", + "dependencies": { + "@remix-run/router": "1.15.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.1.tgz", + "integrity": "sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw==", + "dependencies": { + "@remix-run/router": "1.15.1", + "react-router": "6.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", diff --git a/webapp/package.json b/webapp/package.json index 6e59b09b..18a15f71 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -12,6 +12,7 @@ "axios": "^1.6.5", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.22.1", "react-scripts": "5.0.1", "web-vitals": "^3.5.1" }, diff --git a/webapp/src/App.js b/webapp/src/App.js index 910935ab..06c2736a 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -17,7 +17,7 @@ function App() { - Welcome to wiq_0 + Welcome to wiq_06c {showLogin ? : } diff --git a/webapp/src/components/FirstGame.css b/webapp/src/components/FirstGame.css new file mode 100644 index 00000000..f56cd259 --- /dev/null +++ b/webapp/src/components/FirstGame.css @@ -0,0 +1,15 @@ +button { + font-size: 20px; + width: 200px; + height: 50px; + justify-content: center; + margin-bottom: 15px; +} + +.questionStructure .answers { + display: flex; + justify-content: center; /* Alinea los elementos en el centro horizontal / + align-items: center; / Alinea los elementos en el centro vertical / + height: 100vh; / Ajusta la altura al 100% del viewport */ +} + \ No newline at end of file diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js new file mode 100644 index 00000000..dbfa99c0 --- /dev/null +++ b/webapp/src/components/FirstGame.js @@ -0,0 +1,45 @@ +import React, { useState } from 'react'; +import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import './FirstGame.css'; + +const Quiz = () => { + const question = '¿Cuál es la capital de España?'; + const options = ['Madrid', 'Barcelona', 'Valencia', 'Sevilla']; + const correctAnswer = 'Madrid'; + + const [selectedOption, setSelectedOption] = useState(null); + const [isCorrect, setIsCorrect] = useState(null); + + + const checkAnswer = () => { + setIsCorrect(selectedOption === correctAnswer); + }; + + return ( + + +
+ + {question} + + {options.map((option, index) => ( +
+ +
+ ))} +
+ {isCorrect !== null && ( +

{isCorrect ? '¡Respuesta correcta!' : 'Respuesta incorrecta.'}

+ )} +
+ ); +}; + +export default Quiz; diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index 0ad6268e..b9d17bab 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -2,6 +2,7 @@ import React, { useState } from 'react'; import axios from 'axios'; import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import { useNavigate } from 'react-router-dom'; // Importa useHistory const Login = () => { const [username, setUsername] = useState(''); @@ -13,6 +14,8 @@ const Login = () => { const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + const navigation = useNavigate(); // Añade esto + const loginUser = async () => { try { const response = await axios.post(`${apiEndpoint}/login`, { username, password }); @@ -24,6 +27,8 @@ const Login = () => { setLoginSuccess(true); setOpenSnackbar(true); + navigation("/firstGame") + } catch (error) { setError(error.response.data.error); } diff --git a/webapp/src/index.js b/webapp/src/index.js index d563c0fb..f0e61d85 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -4,10 +4,28 @@ import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; +import { + createBrowserRouter, + RouterProvider, + Route, + Routes, + useNavigate, + MemoryRouter + as Router +} from "react-router-dom"; + +import FirstGame from './components/FirstGame'; + + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + + + }> + }> + + ); @@ -15,3 +33,4 @@ root.render( // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals(); + From 588cc02effb33f6fbb4926936dbd91d5f4749ce1 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 13:10:50 +0100 Subject: [PATCH 02/32] =?UTF-8?q?A=C3=B1adido=20un=20contador=20de=20tiemp?= =?UTF-8?q?o=20visual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 50 ++++++++ package.json | 5 + webapp/src/components/CircularProgressBar.js | 29 +++++ webapp/src/components/FirstGame.css | 28 ++++- webapp/src/components/FirstGame.js | 125 +++++++++++++++---- 5 files changed, 209 insertions(+), 28 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 webapp/src/components/CircularProgressBar.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..f9ce8791 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,50 @@ +{ + "name": "wiq_es6c", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "react-circular-progressbar": "^2.1.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-circular-progressbar": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.1.0.tgz", + "integrity": "sha512-xp4THTrod4aLpGy68FX/k1Q3nzrfHUjUe5v6FsdwXBl3YVMwgeXYQKDrku7n/D6qsJA9CuunarAboC2xCiKs1g==", + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..5ba66912 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "react-circular-progressbar": "^2.1.0" + } +} diff --git a/webapp/src/components/CircularProgressBar.js b/webapp/src/components/CircularProgressBar.js new file mode 100644 index 00000000..39336ba4 --- /dev/null +++ b/webapp/src/components/CircularProgressBar.js @@ -0,0 +1,29 @@ +import { CircularProgressbar } from 'react-circular-progressbar'; +import 'react-circular-progressbar/dist/styles.css'; +import React, { useState, useEffect } from 'react'; +import { Container, Typography } from '@mui/material'; + + +function CircularProgress() { + const [percentage, setPercentage] = useState(100); + var control = 100 + useEffect(() => { + const intervalId = setInterval(() => { + // Generar un nuevo porcentaje de progreso aleatorio (solo para propósitos de demostración) + control = control - 1 + setPercentage(control); // Actualizar el estado con el nuevo porcentaje + }, 100); // Intervalo de 1000 milisegundos (1 segundo) + + // Limpiar el intervalo cuando el componente se desmonte + return () => clearInterval(intervalId); + }, []); // La dependencia vacía asegura que useEffect solo se ejecute una vez al montar el componente + + return ( +
+ +
+ ); + } + + + export default CircularProgress(); \ No newline at end of file diff --git a/webapp/src/components/FirstGame.css b/webapp/src/components/FirstGame.css index f56cd259..0f620ae0 100644 --- a/webapp/src/components/FirstGame.css +++ b/webapp/src/components/FirstGame.css @@ -12,4 +12,30 @@ button { align-items: center; / Alinea los elementos en el centro vertical / height: 100vh; / Ajusta la altura al 100% del viewport */ } - \ No newline at end of file + +.allAnswers { + width:100%; + display: block; +} + +.asnwers { + width:100%; +} +.progressBar { + height: 100%; + margin-top: 10; + width:10%; + display: inline-block; +} + +.question { + height: 100%; + width: 90%; + display: inline-block; +} + +.questionText { + display: flex; + margin-bottom: 25px; + +} \ No newline at end of file diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index dbfa99c0..ebe3abf6 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -1,45 +1,116 @@ -import React, { useState } from 'react'; -import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import React, { useState, useEffect } from 'react'; +import { Container, Typography } from '@mui/material'; import './FirstGame.css'; +import { CircularProgressbar } from 'react-circular-progressbar'; +import 'react-circular-progressbar/dist/styles.css'; +import CircularProgress from './CircularProgressBar'; const Quiz = () => { - const question = '¿Cuál es la capital de España?'; - const options = ['Madrid', 'Barcelona', 'Valencia', 'Sevilla']; - const correctAnswer = 'Madrid'; + const questions = [ + { + question: '¿Cuál es la capital de España?', + options: ['Madrid', 'Barcelona', 'Valencia', 'Sevilla'], + correctAnswer: 'Madrid', + }, + { + question: '¿Cual es la capital de Francia?', + options: ['Touluse', 'Paris', 'Lyon', 'Marseille'], + correctAnswer: 'Paris' + } + // Agrega más preguntas aquí + ]; + const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [selectedOption, setSelectedOption] = useState(null); const [isCorrect, setIsCorrect] = useState(null); + const esperar = (ms) => { + return new Promise(resolve => setTimeout(resolve, ms)); + }; + + function ProgressComponent({ initialPercentage }) { + const [percentage, setPercentage] = useState(initialPercentage); + + useEffect(() => { + const intervalId = setInterval(() => { + // Simulando un progreso que cambia dinámicamente + const newPercentage = percentage < 100 ? percentage + 1 : 0; + setPercentage(newPercentage); + }, 100); // Cambia el progreso cada 100 milisegundos + + return () => clearInterval(intervalId); + }, [percentage]); // El efecto se ejecuta cada vez que 'percentage' cambia + } + const checkAnswer = async (option) => { + setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); + setSelectedOption(option); + + const botonIncorrecta = document.getElementById('option-' + questions[currentQuestionIndex].options.indexOf(option)) + if (!isCorrect) { + + botonIncorrecta.style.backgroundColor = 'red' - const checkAnswer = () => { - setIsCorrect(selectedOption === correctAnswer); + } + const numberAnswer = questions[currentQuestionIndex].options.indexOf(questions[currentQuestionIndex].correctAnswer) + const botonCorrecta = document.getElementById('option-' + numberAnswer) + botonCorrecta.style.backgroundColor = 'green' + // Pasar a la siguiente pregunta después de responder + + await esperar(2000); // Espera 2000 milisegundos (2 segundos) + botonIncorrecta.style.backgroundColor = 'lightgrey' + botonCorrecta.style.backgroundColor = 'lightgrey' + console.log(questions.length-1) + console.log(currentQuestionIndex) + if (questions.length-1 !== currentQuestionIndex) { + + setCurrentQuestionIndex((prevIndex) => prevIndex + 1); + } + + }; return ( - - -
- - {question} - - {options.map((option, index) => ( -
- -
- ))} + + + +
+
+ + {questions[currentQuestionIndex].question} + +
+ +
+ +
+
+ {questions[currentQuestionIndex].options.map((option, index) => ( +
+ +
+ + + + ) + + )} +
- {isCorrect !== null && ( + {/* {isCorrect !== null && (

{isCorrect ? '¡Respuesta correcta!' : 'Respuesta incorrecta.'}

- )} + )} */}
); }; + + export default Quiz; From ff3891c059c2cee9ef51b684989a2d905fe785a0 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 13:44:28 +0100 Subject: [PATCH 03/32] Commit antes de una probable explosion --- webapp/src/components/CircularProgressBar.js | 23 +++++++++----------- webapp/src/components/FirstGame.js | 8 +++++-- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/webapp/src/components/CircularProgressBar.js b/webapp/src/components/CircularProgressBar.js index 39336ba4..79bbab03 100644 --- a/webapp/src/components/CircularProgressBar.js +++ b/webapp/src/components/CircularProgressBar.js @@ -4,26 +4,23 @@ import React, { useState, useEffect } from 'react'; import { Container, Typography } from '@mui/material'; -function CircularProgress() { - const [percentage, setPercentage] = useState(100); - var control = 100 + +function CircularProgress(initialValue) { + const [percentage, setPercentage] = useState(initialValue); + useEffect(() => { const intervalId = setInterval(() => { - // Generar un nuevo porcentaje de progreso aleatorio (solo para propósitos de demostración) - control = control - 1 - setPercentage(control); // Actualizar el estado con el nuevo porcentaje - }, 100); // Intervalo de 1000 milisegundos (1 segundo) + setPercentage(prevPercentage => prevPercentage - 1); // Actualizar el estado con el nuevo porcentaje + }, 100); // Intervalo de 100 milisegundos (0.1 segundo) // Limpiar el intervalo cuando el componente se desmonte return () => clearInterval(intervalId); }, []); // La dependencia vacía asegura que useEffect solo se ejecute una vez al montar el componente - + + var listaDevolver = [, percentage] return ( -
- -
+ listaDevolver ); } - - export default CircularProgress(); \ No newline at end of file + export default CircularProgress; \ No newline at end of file diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index ebe3abf6..c1277977 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -23,6 +23,10 @@ const Quiz = () => { const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [selectedOption, setSelectedOption] = useState(null); const [isCorrect, setIsCorrect] = useState(null); + const MiComponente = CircularProgress(100); + const MiCircularProgressbar = MiComponente[0]; + const MiPercentage = MiComponente[1]; + const esperar = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); @@ -81,7 +85,7 @@ const Quiz = () => {
- + {MiCircularProgressbar}
{questions[currentQuestionIndex].options.map((option, index) => ( @@ -108,7 +112,7 @@ const Quiz = () => {

{isCorrect ? '¡Respuesta correcta!' : 'Respuesta incorrecta.'}

)} */} - ); + );) }; From 3c528d969fcbe697c306cba504dcd921db7b378c Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 13:55:29 +0100 Subject: [PATCH 04/32] Intento numero 1 de aprobar --- webapp/src/components/FirstGame.js | 45 +++++++++++++++++++----------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index c1277977..3b0a3c2b 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -3,7 +3,6 @@ import { Container, Typography } from '@mui/material'; import './FirstGame.css'; import { CircularProgressbar } from 'react-circular-progressbar'; import 'react-circular-progressbar/dist/styles.css'; -import CircularProgress from './CircularProgressBar'; const Quiz = () => { const questions = [ @@ -22,29 +21,43 @@ const Quiz = () => { const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [selectedOption, setSelectedOption] = useState(null); - const [isCorrect, setIsCorrect] = useState(null); - const MiComponente = CircularProgress(100); - const MiCircularProgressbar = MiComponente[0]; - const MiPercentage = MiComponente[1]; - + const [isCorrect, setIsCorrect] = useState(true); const esperar = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); }; - function ProgressComponent({ initialPercentage }) { - const [percentage, setPercentage] = useState(initialPercentage); - + function CircularProgress(valorInicial) { + const [percentage, setPercentage] = useState(valorInicial); + useEffect(() => { const intervalId = setInterval(() => { - // Simulando un progreso que cambia dinámicamente - const newPercentage = percentage < 100 ? percentage + 1 : 0; - setPercentage(newPercentage); - }, 100); // Cambia el progreso cada 100 milisegundos + if (percentage <= 0) { + clearInterval(intervalId); // Detener el intervalo + return 0; // Mantener percentage en 0 + } else { + setPercentage(prevPercentage => prevPercentage - 1); // Actualizar el estado con el nuevo porcentaje + } + }, 100); // Intervalo de 100 milisegundos (0.1 segundo) + // Limpiar el intervalo cuando el componente se desmonte return () => clearInterval(intervalId); - }, [percentage]); // El efecto se ejecuta cada vez que 'percentage' cambia + }, []); // La dependencia vacía asegura que useEffect solo se ejecute una vez al montar el componente + + var listaDevolver = [, percentage] + return ( + listaDevolver + ); } + + const [MiCircularProgressbar, MiPercentage] = CircularProgress(100); + + useEffect(() => { + if (MiPercentage === 0) { + // Realizar alguna acción cuando MiPercentage llegue a 0 + } + }, [MiPercentage]); // Este efecto se ejecuta cada vez que 'MiPercentage' cambia + const checkAnswer = async (option) => { setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); setSelectedOption(option); @@ -112,9 +125,7 @@ const Quiz = () => {

{isCorrect ? '¡Respuesta correcta!' : 'Respuesta incorrecta.'}

)} */} - );) + ); }; - - export default Quiz; From e2e6f3b6ee1b91d687974c6cd7c3091b655d4cd1 Mon Sep 17 00:00:00 2001 From: Liliana Date: Mon, 26 Feb 2024 19:47:40 +0100 Subject: [PATCH 05/32] =?UTF-8?q?Correcci=C3=B3n=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/10_quality_requirements.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 13134a57..b315bfa6 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -96,7 +96,7 @@ occurs. |The user must correctly answer questions on different topics. This will improve the user experience and maintain the interest of the participants. |High -|Integrity +|Reliability |The game must be played without errors. |The answer determined as correct for each question by the system shall be the one that is actually correct. |Medium From 494e137f89934a3af1d8725b62070b6a22f60f9a Mon Sep 17 00:00:00 2001 From: Liliana Date: Fri, 1 Mar 2024 09:28:38 +0100 Subject: [PATCH 06/32] imagen arbol actualizada --- docs/images/QualityTree.png | Bin 80328 -> 83428 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/QualityTree.png b/docs/images/QualityTree.png index 6266b73f273723ffec6e08b42122a8b78058c596..e562dda5278faf0311450742ae7f1854cf299a2f 100644 GIT binary patch literal 83428 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 literal 80328 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�g-uboFcJg{#;En{&HKU<5wZ3BFsp5tlw6D7PDI`Iy6YYW3>|j@QDH-+)tJ z93(-ZTJLvTNJtu%5Mpl!!F;51iJjg}6`?1;O9cw|@C8M!n)kN2|G$p^9CZBkU__80 zXsHd|&o<~RiG`m03&Hg#_Ww^=-#HG-`hGqWpIT_dMjbbvZHfV_rdanQgOr+AcZV|S zM4LJC#Ir;| zsb=jW8gKNRy)+&UTzfPL1=DRVA+SxBDmvTXMd;0Yd_tPbQh_8Y9o|j_!F4Ko0AwxF|_z;GtewBD~UQ@ z$w;uSY1c=MdzxBgMC-L)Os$_1x3@Oua40V5WRuc!BypnW4#&$YAvY&@?HaYeo@-|b z`i=DsKgoD6Ebh8@!Q_OVGo8SkMU6ia-^4~DqJsjkPDC|RZp5e)#Wg^ctwx0TgaA;` zQ>WQO_9TKx@5|jzzJYLPF%F;RWdQ{Dm`cPp6~Tx*4#LRIIeqRJ==JqyO?h3_cODC3 zAo?>D328(uhq+_hK}a9^t|vjbXqbQYV}t9MIwmU46g^+K)b>;oYAl<3-GZutz0tcd z?}}SUNSbhfXjbXVdd`6Z(dny?kJXA+c0rJ0pAQfOFb^$Kz-gkSn6osLKP1hBog8 z>j_bsKWTE9D~Z5c?fnh{Kw3Nuh6O?`4V2S^IU&h|(aB03HonP7>J+2wJ8}0%w83i- z8xjE@FcnL^3*#gW5qhi9eWv=++3ryFUC!H|S_tefHBGV7D@oGTu<tD=hI3pR7i9-dD))f0b|l0K!&W)zdW*I|GeaTP@GW)7fy3f&Y=FzFz%{~sS9xmA z4R5*ZPf`8hQyN~6ygrbazxoCF%;UEkPp?kVm`DEFmxmMP>+bH|$%^KellfoU){SdD z$}-jl>73L@Jz-FT~Je{7I1 z3%l`xQ2u1$+SG>lwGPau^~uf)Gx<4B^R(z6#d zMGsn1To$PhjU(F;{}*wKJ9@gk$E2AxkaH()0B8TK=e72YsGdJ@qWga{%4)XGpIOd5 z7fh+15PIHuD}<15JSpOHk(?U>$@>@d9iGdB`^P_gPl?sJfR-79gs8JWZEoW)hA$X4 z62C2eX;a&WjAYhQEG`s4guV|9D2jZ;kG;#`H>>yo-vn5056MYt`WHQ zFsT;$92p&AF|q#uRdvd-q1o+{2J3<`N!2?oweWw-{i%b0@;n z0z~)|)<+^Ej&NWc{d_lGl_}RSY9w<0hw)}i{kP@m&^cij)m5$7@#42D72qp3kx~W+as!iRW+fS<8Qf-+0 zD`0k)I>e*F%>Y|VSsB~SbrMJ%e+5L^?D%y%KWX9McoGL2f(c~-kRY6)F!A^I2kq9|^*=j+O6*eff>(p| zW9yN^2}{`K0HYir`y-cqo%umoasAy#>!Xnv{V9#0HwMR_?q9#cJsdr2PdpIT3BzC%1L6-*RC-S zTP{HhotR0ioU;mv@Dd`(oZ{r7e%O#+ef5PW!H@oyAPxTg=ZF1noE_u0wDWDfI@uue z_7n9mZ#9BV7MS6!#A%Jm_+c0VHs@aUFE)2#?RPEb=QXTR%2Lfj(^85xamHIlH1yRt zT6#7VJFaQ3WFdBY0jfLA2B^-_@O3f>eJ;zSHHO^^7NVoPO8M4Ss@<-kQHh-EM(eCZ z{13AOL?{Ci(ltNn+cR-H->-ZA1ayfN)BZX$cL(1kmwH8Gq>jY06YKilklA7cvV3eME6KgBGm7N>A%EFOxAj3jL> zH>SL476SloPxsW+AWx1kb;IHbAK~W15s@33laVAy($`4Sx70YHQ1tzM;YlLH7)Ib3 z;5wNrxeZm>jD2j07cA4sLGSp?eNrv3=k1+uRR6iW#m**~p3Ge^XJ|Eb#7Fe*XRBL; zw_v><*;fwpCH=Jd+;FEnRUj@a3JGbN5T+Fu4CcJi5x{Xx?|h`gWq7}lk6=4$0MYvN z!98s^rKj|JDy7h|NK=X_o`zZ-qA1h*@?X7l>2~m>&n!oxql3Zb9?Ki{?WQrZ6}JFc ze<}9Yx2a?!_%fma-%HAf{14w_I%U3;1gTQKhR!?2k}*0cUfo6yEJiND{FDElXcU;RTwL zfOW-~&P^_c`0BqmGp8h6&R_{F#Bi**U?VZAGN$@HLsyCU_FscOCsgk4o7$`MlgyvR zc^^lvN)hLRyJX1s+cc|!_V;rxjWx+|fX@P3;4)CP42TJc|%r1(7wdVp=DwoiFv5&P%@N# z&>!d7wOqw%mnDEvy4;V9BrlGJAZmZ4>pY#C2PfyQ&w2theLt{&>$sVoNAwC4R zfJNzOHqF|>>8DShOt5IdySnVrtD!&X3v^!JVK9_($!`Hu9n^a;gU=*&6PihtM=Zoj z1bh=H^R&1;ziLB+440#ATa4BuPff;uH>6DmRtw5$Q&FLN#P`FdPslyx*394*3 zUS%qvMmX0ZZKf_@d#Z;JIrcj2MwRSfzL@LV`~EInm-s$6dqt`3;p4smvFbe=ObMAN z0u*}$ntXUV^TRK}j98CkWeLMkn3%pqs+FvmS(em}u3J~I-8pBt``mdnrfc(T)5@hG z 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

aT*3hoiKN3XqM|CD@whj;E*t-q5JKy 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 From b52653e794680dd29b64f89c12e5677af3b45a5c Mon Sep 17 00:00:00 2001 From: Liliana Date: Fri, 1 Mar 2024 09:33:10 +0100 Subject: [PATCH 07/32] =?UTF-8?q?cambio=20documentaci=C3=B3n=20apartado=20?= =?UTF-8?q?10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/10_quality_requirements.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index b315bfa6..f48e10c7 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -96,7 +96,7 @@ occurs. |The user must correctly answer questions on different topics. This will improve the user experience and maintain the interest of the participants. |High -|Reliability +|Fiability |The game must be played without errors. |The answer determined as correct for each question by the system shall be the one that is actually correct. |Medium From 1fc1f56e8c5b73eaf569f8eaa30125e29d0fe032 Mon Sep 17 00:00:00 2001 From: alegarman2002 <116609314+alegarman2002@users.noreply.github.com> Date: Sat, 2 Mar 2024 12:58:12 +0100 Subject: [PATCH 08/32] Fixed problem with buttons --- webapp/src/components/FirstGame.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index 3b0a3c2b..40d236f9 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -21,7 +21,7 @@ const Quiz = () => { const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [selectedOption, setSelectedOption] = useState(null); - const [isCorrect, setIsCorrect] = useState(true); + const [isCorrect, setIsCorrect] = useState(null); const esperar = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); @@ -52,11 +52,11 @@ const Quiz = () => { const [MiCircularProgressbar, MiPercentage] = CircularProgress(100); - useEffect(() => { - if (MiPercentage === 0) { - // Realizar alguna acción cuando MiPercentage llegue a 0 - } - }, [MiPercentage]); // Este efecto se ejecuta cada vez que 'MiPercentage' cambia + // useEffect(() => { + // if (MiPercentage === 0) { + // // Realizar alguna acción cuando MiPercentage llegue a 0 + // } + // }, [MiPercentage]); // Este efecto se ejecuta cada vez que 'MiPercentage' cambia const checkAnswer = async (option) => { setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); From 301be1a2d44bd4467a62553e02615a1be8a5e2c1 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Mon, 4 Mar 2024 14:47:47 +0100 Subject: [PATCH 09/32] First try to connect to questiongenerator api --- webapp/package-lock.json | 40 ++++++++++++++++++++++++++++++ webapp/package.json | 2 ++ webapp/src/components/FirstGame.js | 23 ++++++++++++++++- 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/webapp/package-lock.json b/webapp/package-lock.json index a4595721..303e6b1d 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -15,6 +15,7 @@ "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.2", "axios": "^1.6.5", + "fetch": "^1.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.22.1", @@ -7432,6 +7433,17 @@ "node": ">=8" } }, + "node_modules/biskviit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/biskviit/-/biskviit-1.0.1.tgz", + "integrity": "sha512-VGCXdHbdbpEkFgtjkeoBN8vRlbj1ZRX2/mxhE8asCCRalUx2nBzOomLJv8Aw/nRt5+ccDb+tPKidg4XxcfGW4w==", + "dependencies": { + "psl": "^1.1.7" + }, + "engines": { + "node": ">=1.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -9611,6 +9623,25 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha512-bl1LAgiQc4ZWr++pNYUdRe/alecaHFeHxIJ/pNciqGdKXghaTCOwKkbKp6ye7pKZGu/GcaSXFk8PBVhgs+dJdA==", + "dependencies": { + "iconv-lite": "~0.4.13" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -11043,6 +11074,15 @@ "pend": "~1.2.0" } }, + "node_modules/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-5O8TwrGzoNblBG/jtK4NFuZwNCkZX6s5GfRNOaGtm+QGJEuNakSC/i2RW0R93KX6E0jVjNXm6O3CRN4Ql3K+yA==", + "dependencies": { + "biskviit": "1.0.1", + "encoding": "0.1.12" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", diff --git a/webapp/package.json b/webapp/package.json index 18a15f71..bf7583ba 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -10,9 +10,11 @@ "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.2", "axios": "^1.6.5", + "fetch": "^1.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.22.1", + "react-circular-progressbar": "^2.1.0", "react-scripts": "5.0.1", "web-vitals": "^3.5.1" }, diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index 40d236f9..56c577e7 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -3,9 +3,26 @@ import { Container, Typography } from '@mui/material'; import './FirstGame.css'; import { CircularProgressbar } from 'react-circular-progressbar'; import 'react-circular-progressbar/dist/styles.css'; +import axios from 'axios'; + +const apiEndpoint = 'http://localhost:8006'; + +var jsonApi = '' + const Quiz = () => { - const questions = [ + + const getQuestions = async() => { + try { + jsonApi = await axios.get(`${apiEndpoint}/questions`); + + } catch (error) { + console.log(error.jsonApi.data.error); + } + }; + + + const questions = [ { question: '¿Cuál es la capital de España?', options: ['Madrid', 'Barcelona', 'Valencia', 'Sevilla'], @@ -58,10 +75,14 @@ const Quiz = () => { // } // }, [MiPercentage]); // Este efecto se ejecuta cada vez que 'MiPercentage' cambia + const checkAnswer = async (option) => { setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); setSelectedOption(option); + getQuestions() + console.log(jsonApi.data) + const botonIncorrecta = document.getElementById('option-' + questions[currentQuestionIndex].options.indexOf(option)) if (!isCorrect) { From b76de84d811754d7284e5f4c1b8e92e36a1f5bf8 Mon Sep 17 00:00:00 2001 From: alegarman2002 <116609314+alegarman2002@users.noreply.github.com> Date: Tue, 5 Mar 2024 20:58:16 +0100 Subject: [PATCH 10/32] Added the menu with navigation --- .../package-lock.json | 21 ++++ .../questiongeneratorservice/package.json | 1 + .../questiongenerator-service.js | 1 + webapp/src/components/FirstGame.js | 81 +++++++-------- webapp/src/components/Login.js | 3 +- webapp/src/components/Menu.js | 99 +++++++++++++++++++ webapp/src/index.js | 2 + 7 files changed, 168 insertions(+), 40 deletions(-) create mode 100644 webapp/src/components/Menu.js diff --git a/questionsservice/questiongeneratorservice/package-lock.json b/questionsservice/questiongeneratorservice/package-lock.json index 3dbf397a..ebaf8660 100644 --- a/questionsservice/questiongeneratorservice/package-lock.json +++ b/questionsservice/questiongeneratorservice/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "express": "^4.18.2", "mongoose": "^8.2.0" }, @@ -229,6 +230,18 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -900,6 +913,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", diff --git a/questionsservice/questiongeneratorservice/package.json b/questionsservice/questiongeneratorservice/package.json index cf6a7e5b..5685bd45 100644 --- a/questionsservice/questiongeneratorservice/package.json +++ b/questionsservice/questiongeneratorservice/package.json @@ -19,6 +19,7 @@ }, "homepage": "https://github.com/arquisoft/wiq_es6c#readme", "dependencies": { + "cors": "^2.8.5", "express": "^4.18.2", "mongoose": "^8.2.0" }, diff --git a/questionsservice/questiongeneratorservice/questiongenerator-service.js b/questionsservice/questiongeneratorservice/questiongenerator-service.js index 099e87dd..b352941e 100644 --- a/questionsservice/questiongeneratorservice/questiongenerator-service.js +++ b/questionsservice/questiongeneratorservice/questiongenerator-service.js @@ -42,6 +42,7 @@ function getQuestions(req) { // Route for getting questions app.get('/questions', async (req, res) => { try { + res.setHeader("Access-Control-Allow-Origin", "*"); const request = new Request({ n_preguntas: Number(req.body.n_preguntas), n_respuestas: Number(req.body.n_respuestas), diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index 56c577e7..f1c88e8a 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -4,38 +4,52 @@ import './FirstGame.css'; import { CircularProgressbar } from 'react-circular-progressbar'; import 'react-circular-progressbar/dist/styles.css'; import axios from 'axios'; +import { json } from 'react-router-dom'; +import { useLocation } from 'react-router-dom'; -const apiEndpoint = 'http://localhost:8006'; - -var jsonApi = '' +var questionsCalled = false const Quiz = () => { - const getQuestions = async() => { - try { - jsonApi = await axios.get(`${apiEndpoint}/questions`); + const questions = useLocation().state.questions; + console.log(questions) + + // useEffect (() => { + // if (!isApiCalledRef) { + // getQuestions(); + // isApiCalledRef = true; + // } + // }, []); // Dependencia vacía para ejecutar solo al montar el componente + + // const getQuestions = async () => { + // try { + // const response = await axios.get(`${apiEndpoint}/questions`); + // for (var i = 0; i < response.data.length; i++) { + // var possibleAnswers = [response.data[i].respuesta_correcta, response.data[i].respuestas_incorrectas[0], response.data[i].respuestas_incorrectas[1], response.data[i].respuestas_incorrectas[2]] + // possibleAnswers = shuffleArray(possibleAnswers) + // console.log(possibleAnswers) + // questions.push({ + // question: response.data[0].pregunta, + // options: possibleAnswers, + // correctAnswer: response.data[i].respuesta_correcta + // }) + // } + // console.log(questions) + + // } catch (error) { + // console.error(error); + // } + // }; + // const getQuestions = async() => { + // try { + // jsonApi = await axios.get(`${apiEndpoint}/questions`); - } catch (error) { - console.log(error.jsonApi.data.error); - } - }; + // } catch (error) { + // console.log(error.jsonApi.data.error); + // } + // }; - - const questions = [ - { - question: '¿Cuál es la capital de España?', - options: ['Madrid', 'Barcelona', 'Valencia', 'Sevilla'], - correctAnswer: 'Madrid', - }, - { - question: '¿Cual es la capital de Francia?', - options: ['Touluse', 'Paris', 'Lyon', 'Marseille'], - correctAnswer: 'Paris' - } - // Agrega más preguntas aquí - ]; - const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [selectedOption, setSelectedOption] = useState(null); const [isCorrect, setIsCorrect] = useState(null); @@ -67,7 +81,7 @@ const Quiz = () => { ); } - const [MiCircularProgressbar, MiPercentage] = CircularProgress(100); + // const [MiCircularProgressbar, MiPercentage] = CircularProgress(100); // useEffect(() => { // if (MiPercentage === 0) { @@ -80,9 +94,6 @@ const Quiz = () => { setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); setSelectedOption(option); - getQuestions() - console.log(jsonApi.data) - const botonIncorrecta = document.getElementById('option-' + questions[currentQuestionIndex].options.indexOf(option)) if (!isCorrect) { @@ -97,8 +108,6 @@ const Quiz = () => { await esperar(2000); // Espera 2000 milisegundos (2 segundos) botonIncorrecta.style.backgroundColor = 'lightgrey' botonCorrecta.style.backgroundColor = 'lightgrey' - console.log(questions.length-1) - console.log(currentQuestionIndex) if (questions.length-1 !== currentQuestionIndex) { setCurrentQuestionIndex((prevIndex) => prevIndex + 1); @@ -108,9 +117,7 @@ const Quiz = () => { }; return ( - - - +

@@ -119,7 +126,7 @@ const Quiz = () => {
- {MiCircularProgressbar} + {/* {MiCircularProgressbar} */}
{questions[currentQuestionIndex].options.map((option, index) => ( @@ -134,11 +141,7 @@ const Quiz = () => { {option}
- - - ) - )}
diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index b9d17bab..8937360d 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -27,7 +27,7 @@ const Login = () => { setLoginSuccess(true); setOpenSnackbar(true); - navigation("/firstGame") + navigation("/menu") } catch (error) { setError(error.response.data.error); @@ -38,6 +38,7 @@ const Login = () => { setOpenSnackbar(false); }; + return ( {loginSuccess ? ( diff --git a/webapp/src/components/Menu.js b/webapp/src/components/Menu.js new file mode 100644 index 00000000..0a759a3c --- /dev/null +++ b/webapp/src/components/Menu.js @@ -0,0 +1,99 @@ +import React, { useState, useEffect } from 'react'; +import { Container, Typography } from '@mui/material'; +import './FirstGame.css'; +import 'react-circular-progressbar/dist/styles.css'; +import axios from 'axios'; +import { json } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; // Importa useHistory + +const apiEndpoint = 'http://localhost:8006'; + +var jsonApi = '' + +var isApiCalledRef = false; + + +const DatosContext = React.createContext(); + +var questions = [] + +function shuffleArray(array) { + // Crea una copia del array original + const shuffledArray = [...array]; + + // Recorre el array desde el último elemento hasta el primero + for (let i = shuffledArray.length - 1; i > 0; i--) { + // Genera un índice aleatorio entre 0 y el índice actual + const randomIndex = Math.floor(Math.random() * (i + 1)); + + // Intercambia el elemento actual con el elemento del índice aleatorio + const temp = shuffledArray[i]; + shuffledArray[i] = shuffledArray[randomIndex]; + shuffledArray[randomIndex] = temp; + } + + // Devuelve el array barajado + return shuffledArray; +} + +// useEffect (() => { +// if (!isApiCalledRef) { +// getQuestions(); +// isApiCalledRef = true; +// } +// }, []); + + + + +const Menu = () => { + + const [n_preguntas, setn_preguntas] = useState(5); + + const navigation = useNavigate(); // Añade esto + + const initiateGame = async () => { + if (!isApiCalledRef) { + await getQuestions() + } + isApiCalledRef = true + navigation("/firstGame", {state: {questions}}) + } + + const getQuestions = async () => { + try { + setn_preguntas(5) + const response = await axios.get(`${apiEndpoint}/questions`, {n_preguntas}); + console.log(response.data.length) + for (var i = 0; i < response.data.length; i++) { + var possibleAnswers = [response.data[i].respuesta_correcta, response.data[i].respuestas_incorrectas[0], response.data[i].respuestas_incorrectas[1], response.data[i].respuestas_incorrectas[2]] + possibleAnswers = shuffleArray(possibleAnswers) + questions.push({ + question: response.data[0].pregunta, + options: possibleAnswers, + correctAnswer: response.data[i].respuesta_correcta + }) + } + } catch (error) { + console.error(error); + } + console.log(questions) + }; + + return ( + +

Bienvenido a wiq_06c por favor seleccione un modo de juego para comenzar partida:

+ +
+ ); + +} + + +export default Menu; diff --git a/webapp/src/index.js b/webapp/src/index.js index f0e61d85..da7de47c 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -15,6 +15,7 @@ import { } from "react-router-dom"; import FirstGame from './components/FirstGame'; +import Menu from './components/Menu'; const root = ReactDOM.createRoot(document.getElementById('root')); @@ -24,6 +25,7 @@ root.render( }> }> + }> From 3dc210a3833ce609407f467310dd31137f553c6c Mon Sep 17 00:00:00 2001 From: Abel Date: Sat, 9 Mar 2024 21:26:48 +0100 Subject: [PATCH 11/32] Removed unnecesary line --- .../questiongeneratorservice/questiongenerator-service.js | 1 - 1 file changed, 1 deletion(-) diff --git a/questionsservice/questiongeneratorservice/questiongenerator-service.js b/questionsservice/questiongeneratorservice/questiongenerator-service.js index 3e4e8f90..ffaec5f4 100644 --- a/questionsservice/questiongeneratorservice/questiongenerator-service.js +++ b/questionsservice/questiongeneratorservice/questiongenerator-service.js @@ -98,7 +98,6 @@ function getQuestions(req) { // Route for getting questions app.get('/questions', async (req, res) => { try { - // res.setHeader("Access-Control-Allow-Origin", "*"); // TODO: Implement logic to fetch questions from MongoDB and send response // const questions = await Question.find() const defaultQuestion = getQuestions(req) From 67d4aad788dc43c52726c769f08dd92576815e32 Mon Sep 17 00:00:00 2001 From: Abel Date: Sat, 9 Mar 2024 21:27:51 +0100 Subject: [PATCH 12/32] Added query params (hardcoded) and fixed question display --- webapp/src/components/Menu.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webapp/src/components/Menu.js b/webapp/src/components/Menu.js index 0a759a3c..76bc4110 100644 --- a/webapp/src/components/Menu.js +++ b/webapp/src/components/Menu.js @@ -6,7 +6,7 @@ import axios from 'axios'; import { json } from 'react-router-dom'; import { useNavigate } from 'react-router-dom'; // Importa useHistory -const apiEndpoint = 'http://localhost:8006'; +const apiEndpoint = 'http://localhost:8007'; var jsonApi = '' @@ -63,13 +63,13 @@ const Menu = () => { const getQuestions = async () => { try { setn_preguntas(5) - const response = await axios.get(`${apiEndpoint}/questions`, {n_preguntas}); + const response = await axios.get(`${apiEndpoint}/questions?n_preguntas=${n_preguntas}`); console.log(response.data.length) for (var i = 0; i < response.data.length; i++) { var possibleAnswers = [response.data[i].respuesta_correcta, response.data[i].respuestas_incorrectas[0], response.data[i].respuestas_incorrectas[1], response.data[i].respuestas_incorrectas[2]] possibleAnswers = shuffleArray(possibleAnswers) questions.push({ - question: response.data[0].pregunta, + question: response.data[i].pregunta, options: possibleAnswers, correctAnswer: response.data[i].respuesta_correcta }) From cac634d04fca137efc8ac2db95d5c3833edf4118 Mon Sep 17 00:00:00 2001 From: Liliana Date: Mon, 11 Mar 2024 20:26:15 +0100 Subject: [PATCH 13/32] =?UTF-8?q?barra=20de=20navegaci=C3=B3n=20y=20pie=20?= =?UTF-8?q?de=20p=C3=A1gina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/src/components/Footer.js | 14 ++++++++++ webapp/src/components/NavBar.css | 46 ++++++++++++++++++++++++++++++++ webapp/src/components/NavBar.js | 29 ++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 webapp/src/components/Footer.js create mode 100644 webapp/src/components/NavBar.css create mode 100644 webapp/src/components/NavBar.js diff --git a/webapp/src/components/Footer.js b/webapp/src/components/Footer.js new file mode 100644 index 00000000..7059ad28 --- /dev/null +++ b/webapp/src/components/Footer.js @@ -0,0 +1,14 @@ +import { AppBar, Toolbar, Typography } from '@mui/material'; + +const Footer = () => { + return ( + + + © WIQ_ES6C + + + ); +}; + +export default Footer; \ No newline at end of file diff --git a/webapp/src/components/NavBar.css b/webapp/src/components/NavBar.css new file mode 100644 index 00000000..54516ebe --- /dev/null +++ b/webapp/src/components/NavBar.css @@ -0,0 +1,46 @@ +nav { + background-color: #1c57c4; + color: #fff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 20px; +} + +.logo img { + max-width: 100px; +} + +.nav-links { + list-style: none; + display: flex; + align-items: center; +} + +.nav-links li { + margin-right: 5%; +} + +.nav-links li:last-child { + margin-right: 0%; +} + +.nav-links a { + text-decoration: none; + color: #fff; +} + +.nav-links button { + background-color: transparent; + border: none; + color: #fff; + cursor: pointer; +} + +.nav-links button:hover { + text-decoration: underline; +} + +.nav-links { + margin-left: auto; +} \ No newline at end of file diff --git a/webapp/src/components/NavBar.js b/webapp/src/components/NavBar.js new file mode 100644 index 00000000..392baf94 --- /dev/null +++ b/webapp/src/components/NavBar.js @@ -0,0 +1,29 @@ +import React from 'react'; +import './NavBar.css'; +import { Link } from 'react-router-dom'; + +const Navbar = ({ loggedIn, handleLogout }) => { + return ( + + ); +}; + +export default Navbar; \ No newline at end of file From 4396167bf16dfccc3807b2dab7cf9911cc0664eb Mon Sep 17 00:00:00 2001 From: Liliana Date: Tue, 12 Mar 2024 19:50:08 +0100 Subject: [PATCH 14/32] change check answers --- webapp/src/components/FirstGame.js | 82 ++---------------------------- 1 file changed, 4 insertions(+), 78 deletions(-) diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index f1c88e8a..003a5be6 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -8,98 +8,26 @@ import { json } from 'react-router-dom'; import { useLocation } from 'react-router-dom'; -var questionsCalled = false - const Quiz = () => { - const questions = useLocation().state.questions; - console.log(questions) - - // useEffect (() => { - // if (!isApiCalledRef) { - // getQuestions(); - // isApiCalledRef = true; - // } - // }, []); // Dependencia vacía para ejecutar solo al montar el componente - // const getQuestions = async () => { - // try { - // const response = await axios.get(`${apiEndpoint}/questions`); - // for (var i = 0; i < response.data.length; i++) { - // var possibleAnswers = [response.data[i].respuesta_correcta, response.data[i].respuestas_incorrectas[0], response.data[i].respuestas_incorrectas[1], response.data[i].respuestas_incorrectas[2]] - // possibleAnswers = shuffleArray(possibleAnswers) - // console.log(possibleAnswers) - // questions.push({ - // question: response.data[0].pregunta, - // options: possibleAnswers, - // correctAnswer: response.data[i].respuesta_correcta - // }) - // } - // console.log(questions) - - // } catch (error) { - // console.error(error); - // } - // }; - // const getQuestions = async() => { - // try { - // jsonApi = await axios.get(`${apiEndpoint}/questions`); - - // } catch (error) { - // console.log(error.jsonApi.data.error); - // } - // }; - - const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); - const [selectedOption, setSelectedOption] = useState(null); - const [isCorrect, setIsCorrect] = useState(null); + const [currentQuestionIndex, setCurrentQuestionIndex] = React.useState(0); + const [selectedOption, setSelectedOption] = React.useState(null); + const [isCorrect, setIsCorrect] = React.useState(null); const esperar = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); }; - function CircularProgress(valorInicial) { - const [percentage, setPercentage] = useState(valorInicial); - - useEffect(() => { - const intervalId = setInterval(() => { - if (percentage <= 0) { - clearInterval(intervalId); // Detener el intervalo - return 0; // Mantener percentage en 0 - } else { - setPercentage(prevPercentage => prevPercentage - 1); // Actualizar el estado con el nuevo porcentaje - } - }, 100); // Intervalo de 100 milisegundos (0.1 segundo) - - // Limpiar el intervalo cuando el componente se desmonte - return () => clearInterval(intervalId); - }, []); // La dependencia vacía asegura que useEffect solo se ejecute una vez al montar el componente - - var listaDevolver = [, percentage] - return ( - listaDevolver - ); - } - - // const [MiCircularProgressbar, MiPercentage] = CircularProgress(100); - - // useEffect(() => { - // if (MiPercentage === 0) { - // // Realizar alguna acción cuando MiPercentage llegue a 0 - // } - // }, [MiPercentage]); // Este efecto se ejecuta cada vez que 'MiPercentage' cambia - - const checkAnswer = async (option) => { setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); setSelectedOption(option); const botonIncorrecta = document.getElementById('option-' + questions[currentQuestionIndex].options.indexOf(option)) if (!isCorrect) { - botonIncorrecta.style.backgroundColor = 'red' - } + const numberAnswer = questions[currentQuestionIndex].options.indexOf(questions[currentQuestionIndex].correctAnswer) const botonCorrecta = document.getElementById('option-' + numberAnswer) botonCorrecta.style.backgroundColor = 'green' @@ -109,10 +37,8 @@ const Quiz = () => { botonIncorrecta.style.backgroundColor = 'lightgrey' botonCorrecta.style.backgroundColor = 'lightgrey' if (questions.length-1 !== currentQuestionIndex) { - setCurrentQuestionIndex((prevIndex) => prevIndex + 1); } - }; From b3f302a57de1493e635e484a8308f81698bf4fbc Mon Sep 17 00:00:00 2001 From: alegarman2002 <116609314+alegarman2002@users.noreply.github.com> Date: Wed, 13 Mar 2024 13:29:09 +0100 Subject: [PATCH 15/32] Updated the game so we can have unlimited questions --- webapp/src/components/FirstGame.js | 47 ++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index 003a5be6..d3789cf6 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -7,9 +7,9 @@ import axios from 'axios'; import { json } from 'react-router-dom'; import { useLocation } from 'react-router-dom'; - +const apiEndpoint = 'http://localhost:8007'; const Quiz = () => { - const questions = useLocation().state.questions; + var questions = useLocation().state.questions; const [currentQuestionIndex, setCurrentQuestionIndex] = React.useState(0); const [selectedOption, setSelectedOption] = React.useState(null); @@ -19,7 +19,48 @@ const Quiz = () => { return new Promise(resolve => setTimeout(resolve, ms)); }; + + function shuffleArray(array) { + // Crea una copia del array original + const shuffledArray = [...array]; + + // Recorre el array desde el último elemento hasta el primero + for (let i = shuffledArray.length - 1; i > 0; i--) { + // Genera un índice aleatorio entre 0 y el índice actual + const randomIndex = Math.floor(Math.random() * (i + 1)); + + // Intercambia el elemento actual con el elemento del índice aleatorio + const temp = shuffledArray[i]; + shuffledArray[i] = shuffledArray[randomIndex]; + shuffledArray[randomIndex] = temp; + } + + // Devuelve el array barajado + return shuffledArray; + } + + + const getQuestions = async () => { + try { + const response = await axios.get(`${apiEndpoint}/questions?n_preguntas=${1}`); + console.log(response.data.length) + for (var i = 0; i < response.data.length; i++) { + var possibleAnswers = [response.data[i].respuesta_correcta, response.data[i].respuestas_incorrectas[0], response.data[i].respuestas_incorrectas[1], response.data[i].respuestas_incorrectas[2]] + possibleAnswers = shuffleArray(possibleAnswers) + questions.push({ + question: response.data[i].pregunta, + options: possibleAnswers, + correctAnswer: response.data[i].respuesta_correcta + }) + } + } catch (error) { + console.error(error); + } + console.log(questions) +}; + const checkAnswer = async (option) => { + getQuestions() setIsCorrect(option === questions[currentQuestionIndex].correctAnswer); setSelectedOption(option); @@ -39,6 +80,8 @@ const Quiz = () => { if (questions.length-1 !== currentQuestionIndex) { setCurrentQuestionIndex((prevIndex) => prevIndex + 1); } + setIsCorrect(false) + }; From 559b2239ef3fb80d9de41a5cbb7e622c395499c1 Mon Sep 17 00:00:00 2001 From: alegarman2002 <116609314+alegarman2002@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:01:32 +0100 Subject: [PATCH 16/32] Fixed problem of dependencies --- webapp/package-lock.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 303e6b1d..26ab6de7 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -17,6 +17,7 @@ "axios": "^1.6.5", "fetch": "^1.1.0", "react": "^18.2.0", + "react-circular-progressbar": "^2.1.0", "react-dom": "^18.2.0", "react-router-dom": "^6.22.1", "react-scripts": "5.0.1", @@ -21932,6 +21933,14 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "node_modules/react-circular-progressbar": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.1.0.tgz", + "integrity": "sha512-xp4THTrod4aLpGy68FX/k1Q3nzrfHUjUe5v6FsdwXBl3YVMwgeXYQKDrku7n/D6qsJA9CuunarAboC2xCiKs1g==", + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", From a0c33a7d0acc22af1379062ffa02ec6317bde6d8 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 15:24:29 +0100 Subject: [PATCH 17/32] Fixed problem with login test apparently --- webapp/src/components/Context.js | 17 +++++++++++++++++ webapp/src/components/Login.test.js | 16 ++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 webapp/src/components/Context.js diff --git a/webapp/src/components/Context.js b/webapp/src/components/Context.js new file mode 100644 index 00000000..9e5bdcea --- /dev/null +++ b/webapp/src/components/Context.js @@ -0,0 +1,17 @@ +import React, { createContext, useContext, useState } from 'react'; + +const Context = createContext(); + +export function UserProvider({ children }) { + const [usernameGlobal, setUsernameGlobal] = useState(''); + + return ( + + {children} + + ); +} + +export function useUser() { + return useContext(Context); +} \ No newline at end of file diff --git a/webapp/src/components/Login.test.js b/webapp/src/components/Login.test.js index af102dcf..1d9282c6 100644 --- a/webapp/src/components/Login.test.js +++ b/webapp/src/components/Login.test.js @@ -3,6 +3,10 @@ import { render, fireEvent, screen, waitFor, act } from '@testing-library/react' import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import Login from './Login'; +import { Context } from './Context'; +import { BrowserRouter as Router } from 'react-router-dom'; + + const mockAxios = new MockAdapter(axios); @@ -12,7 +16,9 @@ describe('Login component', () => { }); it('should log in successfully', async () => { - render(); + render( + + ); const usernameInput = screen.getByLabelText(/Username/i); const passwordInput = screen.getByLabelText(/Password/i); @@ -34,7 +40,13 @@ describe('Login component', () => { }); it('should handle error when logging in', async () => { - render(); + + render( + + + + + ); const usernameInput = screen.getByLabelText(/Username/i); const passwordInput = screen.getByLabelText(/Password/i); From cc0cf8800d125908e4c56ef76227ab0e9736a7e6 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 15:28:07 +0100 Subject: [PATCH 18/32] Added the login into the inder for navigation --- webapp/src/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/webapp/src/index.js b/webapp/src/index.js index da7de47c..bf6814c8 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -16,6 +16,7 @@ import { import FirstGame from './components/FirstGame'; import Menu from './components/Menu'; +import Login from './components/Login' const root = ReactDOM.createRoot(document.getElementById('root')); @@ -26,6 +27,7 @@ root.render( }> }> }> + }> From c5681f2d2b4b9557d6b8f3cc995a4d50203e4d28 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 15:38:44 +0100 Subject: [PATCH 19/32] Fixed problems witho second part of text at login and problems with app test --- webapp/src/App.test.js | 11 ++++++++++- webapp/src/components/Login.test.js | 7 +++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index 9aa27757..0319a782 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -1,8 +1,17 @@ import { render, screen } from '@testing-library/react'; import App from './App'; +import { Context } from './components/Context'; +import { Router } from 'react-router-dom'; + test('renders learn react link', () => { - render(); + render( + + + + + + ); const linkElement = screen.getByText(/Welcome to wiq_0/i); expect(linkElement).toBeInTheDocument(); }); diff --git a/webapp/src/components/Login.test.js b/webapp/src/components/Login.test.js index 1d9282c6..5d83593b 100644 --- a/webapp/src/components/Login.test.js +++ b/webapp/src/components/Login.test.js @@ -16,9 +16,12 @@ describe('Login component', () => { }); it('should log in successfully', async () => { - render( + render( + + - ); + + ); const usernameInput = screen.getByLabelText(/Username/i); const passwordInput = screen.getByLabelText(/Password/i); From ecd16b9e9acbcb353aaff905e757ad969a844ecc Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 15:47:29 +0100 Subject: [PATCH 20/32] Trying to fix error on how we call th context.js --- webapp/src/App.test.js | 6 ++--- webapp/src/components/Context.js | 2 +- webapp/src/components/Login.test.js | 35 +++++++++++++++-------------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index 0319a782..c6c4561e 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -1,16 +1,16 @@ import { render, screen } from '@testing-library/react'; import App from './App'; -import { Context } from './components/Context'; +import { ContextFun } from './components/Context'; import { Router } from 'react-router-dom'; test('renders learn react link', () => { render( - + - + ); const linkElement = screen.getByText(/Welcome to wiq_0/i); expect(linkElement).toBeInTheDocument(); diff --git a/webapp/src/components/Context.js b/webapp/src/components/Context.js index 9e5bdcea..8a23041c 100644 --- a/webapp/src/components/Context.js +++ b/webapp/src/components/Context.js @@ -2,7 +2,7 @@ import React, { createContext, useContext, useState } from 'react'; const Context = createContext(); -export function UserProvider({ children }) { +export function ContextFun({ children }) { const [usernameGlobal, setUsernameGlobal] = useState(''); return ( diff --git a/webapp/src/components/Login.test.js b/webapp/src/components/Login.test.js index 5d83593b..3149be03 100644 --- a/webapp/src/components/Login.test.js +++ b/webapp/src/components/Login.test.js @@ -3,8 +3,8 @@ import { render, fireEvent, screen, waitFor, act } from '@testing-library/react' import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import Login from './Login'; -import { Context } from './Context'; -import { BrowserRouter as Router } from 'react-router-dom'; +import { ContextFun } from './Context'; +import { BrowserRouter as Router } from 'react-router-dom'; @@ -17,11 +17,11 @@ describe('Login component', () => { it('should log in successfully', async () => { render( - - - - - ); + + + + + ); const usernameInput = screen.getByLabelText(/Username/i); const passwordInput = screen.getByLabelText(/Password/i); @@ -32,10 +32,10 @@ describe('Login component', () => { // Simulate user input await act(async () => { - fireEvent.change(usernameInput, { target: { value: 'testUser' } }); - fireEvent.change(passwordInput, { target: { value: 'testPassword' } }); - fireEvent.click(loginButton); - }); + fireEvent.change(usernameInput, { target: { value: 'testUser' } }); + fireEvent.change(passwordInput, { target: { value: 'testPassword' } }); + fireEvent.click(loginButton); + }); // Verify that the user information is displayed expect(screen.getByText(/Hello testUser!/i)).toBeInTheDocument(); @@ -43,12 +43,13 @@ describe('Login component', () => { }); it('should handle error when logging in', async () => { - - render( - - - - + + render( + + + + + ); const usernameInput = screen.getByLabelText(/Username/i); From 6b1ecae1837aff8a966351c05247a138482c3c8c Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 15:53:57 +0100 Subject: [PATCH 21/32] Fixed Login test, tryung to fix app test --- webapp/src/App.test.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index c6c4561e..b4ffdf62 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -6,11 +6,7 @@ import { Router } from 'react-router-dom'; test('renders learn react link', () => { render( - - - - - + ); const linkElement = screen.getByText(/Welcome to wiq_0/i); expect(linkElement).toBeInTheDocument(); From d7a0a7a7d6089f56d3ee48b6504d632c6f7c5273 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 15:58:36 +0100 Subject: [PATCH 22/32] Return to the previous version of app test --- webapp/src/App.test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index b4ffdf62..c6c4561e 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -6,7 +6,11 @@ import { Router } from 'react-router-dom'; test('renders learn react link', () => { render( - + + + + + ); const linkElement = screen.getByText(/Welcome to wiq_0/i); expect(linkElement).toBeInTheDocument(); From 4ca2be46c0ae121e0b2d850441a660118e705984 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 16:01:46 +0100 Subject: [PATCH 23/32] Trying to fix the app text with an update on the index --- webapp/src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webapp/src/index.js b/webapp/src/index.js index bf6814c8..ea595119 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -28,6 +28,7 @@ root.render( }> }> }> + }> From df1e22f001836d2bb50d5ff781f05bfb3396e6b6 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 16:04:41 +0100 Subject: [PATCH 24/32] Making the test a bit more simple --- webapp/src/App.test.js | 4 ++-- webapp/src/index.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index c6c4561e..5e93f49b 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -12,6 +12,6 @@ test('renders learn react link', () => { ); - const linkElement = screen.getByText(/Welcome to wiq_0/i); - expect(linkElement).toBeInTheDocument(); + // const linkElement = screen.getByText(/Welcome to wiq_0/i); + // expect(linkElement).toBeInTheDocument(); }); diff --git a/webapp/src/index.js b/webapp/src/index.js index ea595119..bf6814c8 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -28,7 +28,6 @@ root.render( }> }> }> - }> From 80cbfe1b9950a5da3fb7424e0927e5f0745fb46f Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 16:09:41 +0100 Subject: [PATCH 25/32] Trying to fix again the app text pls kill me --- webapp/src/App.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index 5e93f49b..883e0404 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -1,7 +1,7 @@ import { render, screen } from '@testing-library/react'; import App from './App'; import { ContextFun } from './components/Context'; -import { Router } from 'react-router-dom'; +import { BrowserRouter as Router } from 'react-router-dom'; test('renders learn react link', () => { From d43156c562699df94580400e06ec8d9df166e6be Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 16:27:28 +0100 Subject: [PATCH 26/32] Eliminated unussed resources for that moment --- webapp/src/components/CircularProgressBar.js | 26 ----------- webapp/src/components/Footer.js | 14 ------ webapp/src/components/NavBar.css | 46 -------------------- webapp/src/components/NavBar.js | 29 ------------ 4 files changed, 115 deletions(-) delete mode 100644 webapp/src/components/CircularProgressBar.js delete mode 100644 webapp/src/components/Footer.js delete mode 100644 webapp/src/components/NavBar.css delete mode 100644 webapp/src/components/NavBar.js diff --git a/webapp/src/components/CircularProgressBar.js b/webapp/src/components/CircularProgressBar.js deleted file mode 100644 index 79bbab03..00000000 --- a/webapp/src/components/CircularProgressBar.js +++ /dev/null @@ -1,26 +0,0 @@ -import { CircularProgressbar } from 'react-circular-progressbar'; -import 'react-circular-progressbar/dist/styles.css'; -import React, { useState, useEffect } from 'react'; -import { Container, Typography } from '@mui/material'; - - - -function CircularProgress(initialValue) { - const [percentage, setPercentage] = useState(initialValue); - - useEffect(() => { - const intervalId = setInterval(() => { - setPercentage(prevPercentage => prevPercentage - 1); // Actualizar el estado con el nuevo porcentaje - }, 100); // Intervalo de 100 milisegundos (0.1 segundo) - - // Limpiar el intervalo cuando el componente se desmonte - return () => clearInterval(intervalId); - }, []); // La dependencia vacía asegura que useEffect solo se ejecute una vez al montar el componente - - var listaDevolver = [, percentage] - return ( - listaDevolver - ); - } - - export default CircularProgress; \ No newline at end of file diff --git a/webapp/src/components/Footer.js b/webapp/src/components/Footer.js deleted file mode 100644 index 7059ad28..00000000 --- a/webapp/src/components/Footer.js +++ /dev/null @@ -1,14 +0,0 @@ -import { AppBar, Toolbar, Typography } from '@mui/material'; - -const Footer = () => { - return ( - - - © WIQ_ES6C - - - ); -}; - -export default Footer; \ No newline at end of file diff --git a/webapp/src/components/NavBar.css b/webapp/src/components/NavBar.css deleted file mode 100644 index 54516ebe..00000000 --- a/webapp/src/components/NavBar.css +++ /dev/null @@ -1,46 +0,0 @@ -nav { - background-color: #1c57c4; - color: #fff; - display: flex; - justify-content: space-between; - align-items: center; - padding: 10px 20px; -} - -.logo img { - max-width: 100px; -} - -.nav-links { - list-style: none; - display: flex; - align-items: center; -} - -.nav-links li { - margin-right: 5%; -} - -.nav-links li:last-child { - margin-right: 0%; -} - -.nav-links a { - text-decoration: none; - color: #fff; -} - -.nav-links button { - background-color: transparent; - border: none; - color: #fff; - cursor: pointer; -} - -.nav-links button:hover { - text-decoration: underline; -} - -.nav-links { - margin-left: auto; -} \ No newline at end of file diff --git a/webapp/src/components/NavBar.js b/webapp/src/components/NavBar.js deleted file mode 100644 index 392baf94..00000000 --- a/webapp/src/components/NavBar.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; -import './NavBar.css'; -import { Link } from 'react-router-dom'; - -const Navbar = ({ loggedIn, handleLogout }) => { - return ( - - ); -}; - -export default Navbar; \ No newline at end of file From e5b66779ec3d7b5c6d769b70f80fadcb56bdf1fa Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 16:44:31 +0100 Subject: [PATCH 27/32] First try in test for firstGame --- webapp/src/App.test.js | 4 ++-- webapp/src/components/FirstGame.test.js | 20 ++++++++++++++++++++ webapp/src/components/Menu.test.js | 0 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 webapp/src/components/FirstGame.test.js create mode 100644 webapp/src/components/Menu.test.js diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index 883e0404..7235d3a7 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -12,6 +12,6 @@ test('renders learn react link', () => { ); - // const linkElement = screen.getByText(/Welcome to wiq_0/i); - // expect(linkElement).toBeInTheDocument(); + const linkElement = screen.getByText(/Welcome to wiq_0/i); + expect(linkElement).toBeInTheDocument(); }); diff --git a/webapp/src/components/FirstGame.test.js b/webapp/src/components/FirstGame.test.js new file mode 100644 index 00000000..92e1e91c --- /dev/null +++ b/webapp/src/components/FirstGame.test.js @@ -0,0 +1,20 @@ +import React from 'react'; +import { render, fireEvent, screen, waitFor, act } from '@testing-library/react'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; +import FirstGame from './FirstGame'; +import { ContextFun } from './Context'; +import { BrowserRouter as Router } from 'react-router-dom'; + + +test('renders learn react link', () => { + render( + + + + + + ); + const linkElement = screen.getByText(/¿Cual es/i); + expect(linkElement).toBeInTheDocument(); + }); \ No newline at end of file diff --git a/webapp/src/components/Menu.test.js b/webapp/src/components/Menu.test.js new file mode 100644 index 00000000..e69de29b From cd1e826c2afa2636680d0f8e402e3b4f770b4983 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 17:16:04 +0100 Subject: [PATCH 28/32] Desisto de hacer los test de momento --- webapp/src/components/FirstGame.test.js | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/webapp/src/components/FirstGame.test.js b/webapp/src/components/FirstGame.test.js index 92e1e91c..29b21fbc 100644 --- a/webapp/src/components/FirstGame.test.js +++ b/webapp/src/components/FirstGame.test.js @@ -1,20 +1,20 @@ -import React from 'react'; -import { render, fireEvent, screen, waitFor, act } from '@testing-library/react'; -import axios from 'axios'; -import MockAdapter from 'axios-mock-adapter'; -import FirstGame from './FirstGame'; -import { ContextFun } from './Context'; -import { BrowserRouter as Router } from 'react-router-dom'; +// import React from 'react'; +// import { render, fireEvent, screen, waitFor, act } from '@testing-library/react'; +// import axios from 'axios'; +// import MockAdapter from 'axios-mock-adapter'; +// import FirstGame from './FirstGame'; +// import { ContextFun } from './Context'; +// import { BrowserRouter as Router } from 'react-router-dom'; -test('renders learn react link', () => { - render( - - - - - - ); - const linkElement = screen.getByText(/¿Cual es/i); - expect(linkElement).toBeInTheDocument(); - }); \ No newline at end of file +// test('renders learn react link', () => { +// render( +// +// +// +// +// +// ); +// const linkElement = screen.getByText(/¿Cual es/i); +// expect(linkElement).toBeInTheDocument(); +// }); \ No newline at end of file From 85108d29efe946c3ba709545fcbe86ccf407fa23 Mon Sep 17 00:00:00 2001 From: alegarman2002 Date: Wed, 13 Mar 2024 17:19:19 +0100 Subject: [PATCH 29/32] Booro los archivos --- webapp/src/components/FirstGame.test.js | 20 -------------------- webapp/src/components/Menu.test.js | 0 2 files changed, 20 deletions(-) delete mode 100644 webapp/src/components/FirstGame.test.js delete mode 100644 webapp/src/components/Menu.test.js diff --git a/webapp/src/components/FirstGame.test.js b/webapp/src/components/FirstGame.test.js deleted file mode 100644 index 29b21fbc..00000000 --- a/webapp/src/components/FirstGame.test.js +++ /dev/null @@ -1,20 +0,0 @@ -// import React from 'react'; -// import { render, fireEvent, screen, waitFor, act } from '@testing-library/react'; -// import axios from 'axios'; -// import MockAdapter from 'axios-mock-adapter'; -// import FirstGame from './FirstGame'; -// import { ContextFun } from './Context'; -// import { BrowserRouter as Router } from 'react-router-dom'; - - -// test('renders learn react link', () => { -// render( -// -// -// -// -// -// ); -// const linkElement = screen.getByText(/¿Cual es/i); -// expect(linkElement).toBeInTheDocument(); -// }); \ No newline at end of file diff --git a/webapp/src/components/Menu.test.js b/webapp/src/components/Menu.test.js deleted file mode 100644 index e69de29b..00000000 From 951564a9eb762fd8e031269e18970572eff46fb8 Mon Sep 17 00:00:00 2001 From: Liliana Date: Wed, 13 Mar 2024 19:29:23 +0100 Subject: [PATCH 30/32] sonarcloud problem solved (??) --- webapp/src/components/FirstGame.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/webapp/src/components/FirstGame.js b/webapp/src/components/FirstGame.js index d3789cf6..e11e9589 100644 --- a/webapp/src/components/FirstGame.js +++ b/webapp/src/components/FirstGame.js @@ -19,6 +19,11 @@ const Quiz = () => { return new Promise(resolve => setTimeout(resolve, ms)); }; + function secureRandomNumber(max) { + const randomBytes = new Uint32Array(1); + window.crypto.getRandomValues(randomBytes); + return randomBytes[0] % max; + } function shuffleArray(array) { // Crea una copia del array original @@ -27,8 +32,9 @@ const Quiz = () => { // Recorre el array desde el último elemento hasta el primero for (let i = shuffledArray.length - 1; i > 0; i--) { // Genera un índice aleatorio entre 0 y el índice actual - const randomIndex = Math.floor(Math.random() * (i + 1)); - + //const randomIndex = Math.floor(Math.random() * (i + 1)); + const randomIndex = secureRandomNumber(i + 1); + // Intercambia el elemento actual con el elemento del índice aleatorio const temp = shuffledArray[i]; shuffledArray[i] = shuffledArray[randomIndex]; From ff8991023995470a5edff54845d24622be6ead30 Mon Sep 17 00:00:00 2001 From: Liliana Date: Wed, 13 Mar 2024 19:33:44 +0100 Subject: [PATCH 31/32] sonarcloud problem solved at menu --- webapp/src/components/Menu.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/webapp/src/components/Menu.js b/webapp/src/components/Menu.js index 76bc4110..990e84de 100644 --- a/webapp/src/components/Menu.js +++ b/webapp/src/components/Menu.js @@ -17,6 +17,12 @@ const DatosContext = React.createContext(); var questions = [] +function secureRandomNumber(max) { + const randomBytes = new Uint32Array(1); + window.crypto.getRandomValues(randomBytes); + return randomBytes[0] % max; +} + function shuffleArray(array) { // Crea una copia del array original const shuffledArray = [...array]; @@ -24,7 +30,8 @@ function shuffleArray(array) { // Recorre el array desde el último elemento hasta el primero for (let i = shuffledArray.length - 1; i > 0; i--) { // Genera un índice aleatorio entre 0 y el índice actual - const randomIndex = Math.floor(Math.random() * (i + 1)); + //const randomIndex = Math.floor(Math.random() * (i + 1)); + const randomIndex = secureRandomNumber(i + 1); // Intercambia el elemento actual con el elemento del índice aleatorio const temp = shuffledArray[i]; From 38ada23f21d06d1a9e7734b1cdada37d5b00ed56 Mon Sep 17 00:00:00 2001 From: alegarman2002 <116609314+alegarman2002@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:56:13 +0100 Subject: [PATCH 32/32] Eliminated the unnecessary files --- package-lock.json | 50 ----------------------------------------------- package.json | 5 ----- 2 files changed, 55 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f9ce8791..00000000 --- a/package-lock.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "wiq_es6c", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "react-circular-progressbar": "^2.1.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-circular-progressbar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.1.0.tgz", - "integrity": "sha512-xp4THTrod4aLpGy68FX/k1Q3nzrfHUjUe5v6FsdwXBl3YVMwgeXYQKDrku7n/D6qsJA9CuunarAboC2xCiKs1g==", - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 5ba66912..00000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "react-circular-progressbar": "^2.1.0" - } -}